開屏廣告
開屏廣告是一種在應(yīng)用啟動時且在應(yīng)用主界面顯示之前需要被展示的廣告。
添加開屏廣告
1.添加SplashView。
在XML布局文件中添加SplashView。
以下示例代碼中展示了如何在XML布局文件中添加SplashView。
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".SplashActivity">
<!-- 開屏廣告Logo區(qū)域 -->
<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>
說明
您需要配置在Logo區(qū)域中配置對應(yīng)的應(yīng)用圖標(biāo)、應(yīng)用名稱和版權(quán)信息。
以下示例代碼展示了如何獲取SplashView。
SplashView splashView=findViewById(R.id.splash_ad_view);
2.修改應(yīng)用默認(rèn)啟動頁面。
開屏廣告是在應(yīng)用主界面顯示之前被展示,所以需修改應(yīng)用默認(rèn)啟動頁面。
修改AndroidManifest.xml,將默認(rèn)啟動的activity修改為SplashActivity,這樣即可在應(yīng)用主界面加載前展示開屏廣告。
修改后的內(nèi)容示例如下:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/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="false"
android:screenOrientation="portrait">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
...
</application>
</manifest>
創(chuàng)建SplashActivity.java類,用于實現(xiàn)開屏廣告獲取和展示。
...
import android.os.Build;
import androidx.appcompat.app.AppCompatActivity;
public class SplashActivity extends AppCompatActivity {
// "testq6zq98hecj"為專用的測試廣告位ID, App正式發(fā)布時需要改為正式的廣告位ID
private static final String AD_ID = "testq6zq98hecj";
private static final int AD_TIMEOUT = 5000;
private static final int MSG_AD_TIMEOUT = 1001;
/**
* 暫停標(biāo)志位。
* 在開屏廣告頁面展示時:
* 按返回鍵退出應(yīng)用時需設(shè)置為true,以確保應(yīng)用主界面不被拉起;
* 切換至其他界面時需設(shè)置為false,以確保從其他頁面回到開屏廣告頁面時仍然可以正常跳轉(zhuǎn)至應(yīng)用主界面;
*/
private boolean hasPaused = false;
// 收到廣告展示超時消息時的回調(diào)處理
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();
}
/**
* 廣告展示完畢時,從廣告界面跳轉(zhuǎn)至App主界面
*/
private void jump() {
if (!hasPaused) {
hasPaused = true;
startActivity(new Intent(SplashActivity.this, MainActivity.class));
finish();
}
}
/**
* 按返回鍵退出應(yīng)用時需設(shè)置為true,以確保應(yīng)用主界面不被拉起
*/
@Override
protected void onStop() {
// 移除消息隊列中等待的超時消息
timeoutHandler.removeMessages(MSG_AD_TIMEOUT);
hasPaused = true;
super.onStop();
}
/**
* 從其他頁面回到開屏頁面時調(diào)用,進(jìn)入應(yīng)用主界面
*/
@Override
protected void onRestart() {
super.onRestart();
hasPaused = false;
jump();
}
@Override
protected void onDestroy() {
super.onDestroy();
}
}
3.獲取廣告。
SplashView創(chuàng)建好之后,通過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() {
// 廣告獲取成功時調(diào)用
...
}
@Override
public void onAdFailedToLoad(int errorCode) {
// 廣告獲取失敗時調(diào)用, 跳轉(zhuǎn)至App主界面
jump();
}
@Override
public void onAdDismissed() {
// 廣告展示完畢時調(diào)用, 跳轉(zhuǎn)至App主界面
jump();
}
};
// 獲取SplashView
SplashView splashView = findViewById(R.id.splash_ad_view);
// 設(shè)置默認(rèn)Slogan
splashView.setSloganResId(R.drawable.default_slogan);
// 設(shè)置視頻類開屏廣告的音頻焦點類型
splashView.setAudioFocusType(AudioFocusType.NOT_GAIN_AUDIO_FOCUS_WHEN_MUTE);
// 獲取廣告,其中AD_ID為廣告位ID
splashView.load(AD_ID, orientation, adParam, splashAdLoadListener);
// 發(fā)送延時消息,保證廣告顯示超時后,APP首頁可以正常顯示
timeoutHandler.removeMessages(MSG_AD_TIMEOUT);
timeoutHandler.sendEmptyMessageDelayed(MSG_AD_TIMEOUT, AD_TIMEOUT);
}
說明
您需要為App設(shè)計一張開屏默認(rèn)Slogan圖片,確保在未獲得到開屏廣告之前展示默認(rèn)Slogan,提供良好的用戶體驗。
4.(可選)監(jiān)聽廣告事件。
通過實現(xiàn)SplashAdDisplayListener類中的方法來監(jiān)聽廣告展示類事件。了解詳細(xì)方法,請參見API文檔中的SplashAdDisplayListener類。
SplashAdDisplayListener adDisplayListener = new SplashAdDisplayListener() {
@Override
public void onAdShowed() {
// 廣告顯示時調(diào)用
...
}
@Override
public void onAdClick() {
// 廣告被點擊時調(diào)用
...
}
};
splashView.setAdDisplayListener(adDisplayListener);
測試開屏廣告
測試開屏廣告時,需要使用專門的測試廣告位ID來獲取測試廣告,以避免在測試過程中產(chǎn)生無效的廣告點擊量。測試廣告位ID僅作為功能調(diào)試使用,不可用于廣告變現(xiàn)。您需要在應(yīng)用發(fā)布前申請正式的廣告位ID,并替換測試廣告位ID。
以下表格中提供了開屏廣告的專用測試廣告位ID:
下載開屏廣告的示例代碼并運行,可以看到如下效果圖:
另外您也可以通過學(xué)習(xí)Codelab中的教程來集成開屏廣告。