H5頁面調用admob激勵視頻,用戶獲取獎勵
應用前提條件
- 使用 Android Studio 3.2 或更高版本
-
確保您應用的 build 文件使用以下值:
minSdkVersion
為16
或更高版本compileSdkVersion
為28
或更高版本
1,在您的項目級 build.gradle
文件中,同時在 buildscript
和 allprojects
兩個部分中添加
buildscript {
repositories {
google()
mavenCentral()
}
}
allprojects {
repositories {
google()
mavenCentral()
}
}
2,將 Google 移動廣告 SDK 的依賴項添加到您的模塊的應用級
dependencies { implementation 'com.google.android.gms:play-services-ads:21.0.0' }
3,將您的 AdMob 應用 ID(
測試ID:ca-app-pub-3940256099942544~3347511713
注意:開發工程一定要使用測試ID,不要使用線上ID,否則可能導致線上admob廣告流量無效,最嚴重導致封號!
<manifest> <application> <!-- Sample AdMob app ID: ca-app-pub-3940256099942544~3347511713 --> <meta-data android:name="com.google.android.gms.ads.APPLICATION_ID" android:value="ca-app-pub-xxxxxxxxxxxxxxxx~yyyyyyyyyy"/> </application> </manifest>
4,初始化廣告和預加載激勵視頻
import com.google.android.gms.ads.MobileAds; import com.google.android.gms.ads.initialization.InitializationStatus; import com.google.android.gms.ads.initialization.OnInitializationCompleteListener; public class MainActivity extends AppCompatActivity { private AdRequest adRequest; private Handler mHandler; private WebView webview; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); MobileAds.initialize(this, new OnInitializationCompleteListener() { @Override public void onInitializationComplete(InitializationStatus initializationStatus) { } }); adRequest = new AdRequest.Builder().build(); loadJiliAd(); //ad必須在主線程上,使用消息通知調用 mHandler = new Handler() { @Override public void handleMessage(Message msg) { switch (msg.what) { case 0: // 顯示廣告 showJiliad(); break; case 1: //測試加載js webview.loadUrl("javascript:test()"); break; default: break; } } }; //加載頁面 showWeb(); } private void showJiliad(){ if (mRewardedAd != null) { Activity activityContext = this; mRewardedAd.show(activityContext, new OnUserEarnedRewardListener() { @Override public void onUserEarnedReward(@NonNull RewardItem rewardItem) { // 用戶獲得獎勵 Log.d("TAG", "The user earned the reward."); int rewardAmount = rewardItem.getAmount(); String rewardType = rewardItem.getType(); showJiangli("恭喜獲得獎勵"); } }); }else{ showJiangli("廣告拉取中,請稍候再試"); loadJiliAd(); } } private void showJiangli(String msg){ Toast.makeText(this,msg,Toast.LENGTH_SHORT).show(); } private void showWeb(){ //實例化WebView對象 webview = new WebView(this); //設置WebView屬性,能夠執行Javascript腳本 WebSettings webSettings = webview.getSettings(); webSettings.setJavaScriptEnabled(true); //加載頁面 webview.loadUrl("//xxx.com/"); //WebAppInterface 是我們自定義的一個類,通過實例化一個WebAppInterface 對象來和html進行綁定 WebAppInterface webAppInterface = new WebAppInterface(this,mHandler); webview.addJavascriptInterface(webAppInterface, "Android"); webview.setWebViewClient(new WebViewClient(){ @Override public boolean shouldOverrideUrlLoading(WebView view, String url){ view.loadUrl(url); return true; } }); webview.setWebViewClient(new WebViewClient() { Random ra =new Random(); int r = ra.nextInt(20) + 1 ; @Override public void onPageFinished(WebView view, String url) { //結束 super.onPageFinished(view, url); Log.d("TAG", "加載結束"); if(r == 10){ showAD(); } } @Override public void onPageStarted(WebView view, String url, Bitmap favicon) { //開始 super.onPageStarted(view, url, favicon); Log.d("TAG", "加載開始"); num ++; if(r == 6){ if (mInterstitialAd != null) { showAD(); } }else if(num >= 6){ if (mInterstitialAd != null) { num =0; showAD(); }else{ Log.d("TAG", "廣告未加載成功"); } } Log.d("TAG", "加載NUM:" + String.valueOf(num)); } }); private void loadJiliAd(){ RewardedAd.load(this, "ca-app-pub-3940256099942544/5224354917", adRequest, new RewardedAdLoadCallback() { @Override public void onAdFailedToLoad(@NonNull LoadAdError loadAdError) { // Handle the error. Log.d("TAG", loadAdError.toString()); mRewardedAd = null; } @Override public void onAdLoaded(@NonNull RewardedAd rewardedAd) { mRewardedAd = rewardedAd; Log.d("TAG", "Ad was loaded."); mRewardedAd.setFullScreenContentCallback(new FullScreenContentCallback() { @Override public void onAdClicked() { // 在為廣告記錄點擊時調用。 Log.d("TAG", "Ad was clicked."); } @Override public void onAdDismissedFullScreenContent() { // 當廣告被關閉時調用. // 將廣告引用設置為 null,這樣您就不會再次展示廣告。 Log.d("TAG", "Ad dismissed fullscreen content."); mRewardedAd = null; } @Override public void onAdFailedToShowFullScreenContent(AdError adError) { // 廣告無法展示時調用 Log.e("TAG", "Ad failed to show fullscreen content."); mRewardedAd = null; } @Override public void onAdImpression() { // 在為廣告記錄展示時調用 Log.d("TAG", "Ad recorded an impression."); } @Override public void onAdShowedFullScreenContent() { // 顯示廣告時調用. Log.d("TAG", "Ad showed fullscreen content."); } }); } }); } }
6,webAppInterface類
public class WebAppInterface { Activity mContext; Handler mHandler; /** * Instantiate the interface and set the context */ WebAppInterface(Activity c,Handler r) { mContext = c; mHandler = r; } /** * js調用Android的函數 */ @JavascriptInterface public void startFunction() { Toast.makeText(mContext,"我是安卓原生的彈窗",Toast.LENGTH_SHORT).show(); //調用激勵視頻廣告 Message msg = new Message(); msg.what = 0; mHandler.sendMessage(msg); } /** * js調用Android的函數並給Android原生傳遞一個參數 */ @JavascriptInterface public void startFunction(String arg) { Toast.makeText(mContext,arg,Toast.LENGTH_SHORT).show(); } }
7,html調用激勵獎勵
<input type="button" value="點擊調用android代碼,拉取激勵視頻" onclick="window.Android.startFunction()"/>
整體流程結束,業務代碼可按需自行添加