如何在我的應用啟動介面實現「開屏廣告」?

華為開發者論壇發表於2021-07-02

什麼是開屏廣告

開屏廣告是一種在應用啟動時且在應用主介面顯示之前需要被展示的廣告。一般是5s展示時間,廣告展示時間結束後自動進入應用,使用者可以點選跳過按鈕直接進入主介面。

開屏廣告示例


開屏廣告的優勢


位置優勢:使用者在進入App前就會看到開屏廣告,相比於應用內廣告提前,並且只要使用App的使用者就要強制觀看。

展示面積大:廣告全屏顯示,視覺衝擊力很強,便於優質內容曝光,吸引使用者眼球,增強使用者點選率與品牌曝光度。

當使用者剛開啟應用時,使用者覆蓋面廣,使用者注意力集中。因此開屏廣告適用於廣告主進行大規模的品牌宣傳和產品推廣。

華為廣告服務能夠幫助開發者接入包括開屏廣告在內的6種廣告位。接下來的文章會詳細講解開屏廣告的開發步驟。示例程式碼已在相關社群進行開源,歡迎開發者關注、下載並提供寶貴意見:

Github官方地址:

Gitee官方地址:

前提條件

HUAWEI Ads SDK依賴HMS Core(APK)4.0.0.300及以上版本。如果裝置上未安裝HMS Core(APK)4.0.0.300及以上版本,則無法使用HUAWEI Ads SDK的相關介面。

在開發應用前需要在 華為開發者聯盟網站上註冊成為開發者並完成實名認證,具體方法可參見 帳號註冊認證

參見 建立專案和在 專案中新增應用完成應用的建立。

開發前準備

廣告服務的整合需如下4個關鍵步驟,可以參考 華為開發者聯盟文件

1. 匯入HUAWEI Ads SDK

2. 配置網路許可權

3. 配置混淆指令碼

4. 初始化SDK

1.1  新增SplashView。

在XML佈局檔案中新增SplashView。

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="
    xmlns:tools="
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context=".SplashActivity"> 
 
    <!-- 開屏廣告Logo區域 --> 
    <RelativeLayout 
        android:id="@+id/logo_area" 
        android:layout_width="match_parent" 
        android:layout_height="100dp" 
        android:layout_alignParentBottom="true" 
        android:background="@android:color/white" 
        android:visibility="visible"> 
        <LinearLayout 
            android:layout_width="wrap_content" 
            android:layout_height="wrap_content" 
            android:layout_alignParentBottom="true" 
            android:layout_centerHorizontal="true" 
            android:layout_marginBottom="40dp" 
            android:orientation="vertical"> 
            <LinearLayout 
                android:layout_width="wrap_content" 
                android:layout_height="wrap_content" 
                android:layout_gravity="center" 
                android:layout_marginBottom="6dp" 
                android:gravity="center" 
                android:orientation="horizontal"> 
                <ImageView 
                    android:layout_width="28dp" 
                    android:layout_height="28dp" 
                    android:background="@mipmap/ic_launcher" /> 
                <View 
                    android:layout_width="0.5dp" 
                    android:layout_height="18dp" 
                    android:layout_marginLeft="12dp" 
                    android:layout_marginRight="12dp" 
                    android:alpha="0.1" 
                    android:background="@android:color/black" /> 
                <TextView 
                    android:layout_width="wrap_content" 
                    android:layout_height="wrap_content" 
                    android:alpha="1" 
                    android:text="@string/owner" 
                    android:textColor="@android:color/black" 
                    android:textSize="16sp" /> 
            </LinearLayout> 
            <TextView 
                android:layout_width="wrap_content" 
                android:layout_height="wrap_content" 
                android:layout_gravity="center" 
                android:alpha="0.5" 
                android:text="@string/copyright_info" 
                android:textColor="@android:color/black" 
                android:textSize="8sp" /> 
        </LinearLayout> 
    </RelativeLayout> 
 
    <!-- 開屏廣告檢視 --> 
    <com.huawei.hms.ads.splash.SplashView 
        android:id="@+id/splash_ad_view" 
        android:layout_width="match_parent" 
        android:layout_height="match_parent" 
        android:layout_above="@id/logo" /> 
</RelativeLayout>

 以下示例程式碼展示瞭如何獲取SplashView

SplashView splashView = findViewById(R.id.splash_ad_view);

1.2  修改應用預設啟動頁面。

開屏廣告是在應用主介面顯示之前被展示,所以需修改應用預設啟動頁面。

修改AndroidManifest.xml, 將預設啟動的activity修改為SplashActivity,這樣即可在應用主介面載入前展示開屏廣告。

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="
    package="com.huawei.hms.ads.sdk"> 
    <application 
        android:allowBackup="true" 
        android:icon="@mipmap/ic_launcher" 
        android:label="@string/app_name" 
        android:roundIcon="@mipmap/ic_launcher_round" 
        android:supportsRtl="true" 
        android:theme="@style/AppTheme"> 
        <activity 
            android:name=".MainActivity" 
            android:exported="false" 
            android:screenOrientation="portrait"> 
        </activity> 
        <activity 
            android:name=".SplashActivity" 
            android:exported="true" 
            android:screenOrientation="portrait"> 
            <intent-filter> 
                <action android:name="android.intent.action.MAIN" /> 
                <category android:name="android.intent.category.LAUNCHER" /> 
            </intent-filter> 
        </activity> 
        ... 
    </application> 
</manifest>

建立SplashActivity.java類,用於實現開屏廣告獲取和展示。

... 
import android.os.Build; 
import androidx.appcompat.app.AppCompatActivity; 
 
public class SplashActivity extends AppCompatActivity { 
    // "testq6zq98hecj"為測試專用的廣告位ID, App正式釋出時需要改為正式的廣告位ID 
    private static final String AD_ID = "testq6zq98hecj"; 
    private static final int AD_TIMEOUT = 5000; 
    private static final int MSG_AD_TIMEOUT = 1001; 
 
    /** 
     * 暫停標誌位。 
     * 在開屏廣告頁面展示時: 
     * 按返回鍵退出應用時需設定為true,以確保應用主介面不被拉起; 
     * 切換至其他介面時需設定為false,以確保從其他頁面回到開屏廣告頁面時仍然可以正常跳轉至應用主介面; 
     */ 
    private boolean hasPaused = false; 
 
    // 收到廣告展示超時訊息時的回撥處理 
    private Handler timeoutHandler = new Handler(new Handler.Callback() { 
        @Override 
        public boolean handleMessage(@NonNull Message msg) { 
            if (SplashActivity.this.hasWindowFocus()) { 
                jump(); 
            } 
            return false; 
        } 
    }); 
 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.activity_splash); 
        // 獲取並展示開屏廣告         
        loadAd(); 
    } 
    /** 
     * 廣告展示完畢時,從廣告介面跳轉至App主介面 
     */ 
    private void jump() { 
        if (!hasPaused) { 
            hasPaused = true; 
            startActivity(new Intent(SplashActivity.this, MainActivity.class)); 
            finish(); 
        } 
    } 
    /** 
     * 按返回鍵退出應用時需設定為true,以確保應用主介面不被拉起 
     */ 
    @Override 
    protected void onStop() { 
        // 移除訊息佇列中等待的超時訊息 
        timeoutHandler.removeMessages(MSG_AD_TIMEOUT); 
        hasPaused = true; 
        super.onStop(); 
    } 
    /** 
     * 從其他頁面回到開屏頁面時呼叫,進入應用主介面 
     */ 
    @Override 
    protected void onRestart() { 
        super.onRestart(); 
        hasPaused = false; 
        jump(); 
    } 
    @Override 
    protected void onDestroy() { 
        super.onDestroy();

1.3  獲取廣告。

SplashView建立好之後,透過SplashView類的load()方法來獲取廣告。

private void loadAd() { 
    int orientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT; 
    AdParam adParam = new AdParam.Builder().build(); 
    SplashView.SplashAdLoadListener splashAdLoadListener = new SplashView.SplashAdLoadListener() { 
        @Override 
        public void onAdLoaded() { 
            // 廣告獲取成功時呼叫 
            ... 
        } 
        @Override 
        public void onAdFailedToLoad(int errorCode) { 
            // 廣告獲取失敗時呼叫, 跳轉至App主介面 
            jump(); 
        } 
        @Override 
        public void onAdDismissed() { 
            // 廣告展示完畢時呼叫, 跳轉至App主介面 
            jump(); 
        } 
    }; 
    // 獲取SplashView 
    SplashView splashView = findViewById(R.id.splash_ad_view); 
    // 設定預設Slogan 
    splashView.setSloganResId(R.drawable.default_slogan); 
    // 設定影片類開屏廣告的音訊焦點型別 
    splashView.setAudioFocusType(AudioFocusType.NOT_GAIN_AUDIO_FOCUS_WHEN_MUTE); 
    // 獲取廣告,其中AD_ID為廣告位ID 
    splashView.load(AD_ID, orientation, adParam, splashAdLoadListener); 
    // 傳送延時訊息,保證廣告顯示超時後,APP首頁可以正常顯示 
    timeoutHandler.removeMessages(MSG_AD_TIMEOUT); 
    timeoutHandler.sendEmptyMessageDelayed(MSG_AD_TIMEOUT, AD_TIMEOUT);

1.4  監聽廣告事件。

透過實現SplashAdDisplayListener類中的方法來監聽廣告展示類事件。瞭解詳細方法,請參見API文件中的SplashAdDisplayListener類。

SplashAdDisplayListener adDisplayListener = new SplashAdDisplayListener() { 
    @Override 
    public void onAdShowed() { 
        // 廣告顯示時呼叫 
        ... 
    } 
    @Override 
    public void onAdClick() { 
        // 廣告被點選時呼叫 
        ... 
    } 
}; 
splashView.setAdDisplayListener(adDisplayListener);

更多應用內廣告形式操作指南:
1、 應用內新增Banner廣告位
2、 應用內新增激勵廣告
3、 應用內新增原生廣告
4、應用內新增開屏廣告
5、 應用內新增插屏廣告
6、 應用內新增貼片廣告

>>訪問 華為廣告服務官網,瞭解更多相關內容

>>獲取 華為廣告服務開發指導文件

>>訪問 華為開發者聯盟官網,瞭解更多相關內容

>>獲取 開發指導文件

>>華為移動服務開源倉庫地址: GitHubGitee


原文連結: https://developer.huawei.com/consumer/cn/forum/topic/0202568885258240762?fid=18

原作者:胡椒

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69970551/viewspace-2779382/,如需轉載,請註明出處,否則將追究法律責任。

相關文章