• H5页面调用admob激励视频,用户获取奖励


    https://developers.google.com/admob/android/rewarded?hl=zh-cn#set_the_fullscreencontentcallback

    应用前提条件

    • 使用 Android Studio 3.2 或更高版本
    • 确保您应用的 build 文件使用以下值:

      • minSdkVersion 为 16 或更高版本
      • compileSdkVersion 为 28 或更高版本

    1,在您的项目级 build.gradle 文件中,同时在 buildscript 和 allprojects 两个部分中添加

    1. buildscript {
    2.     repositories {
    3.         google()
    4.         mavenCentral()
    5.     }
    6. }
    7. allprojects {
    8.     repositories {
    9.         google()
    10.         mavenCentral()
    11.     }
    12. }

    2,将 Google 移动广告 SDK 的依赖项添加到您的模块的应用级 Gradle 文件,通常为 app/build.gradle:

    1. dependencies {
    2.   implementation 'com.google.android.gms:play-services-ads:21.0.0'
    3. }

    3,将您的 AdMob 应用 ID(可在 AdMob 界面中找到)添加到应用的 AndroidManifest.xml 文件中。为此,请添加包含 android:name="com.google.android.gms.ads.APPLICATION_ID" 的  代码。您可以在 AdMob 界面中找到您的应用 ID。对于 android:value,请插入您自己的 AdMob 应用 ID,并用英文引号括起来。

    测试ID:ca-app-pub-3940256099942544~3347511713

    注意:开发工程一定要使用测试ID,不要使用线上ID,否则可能导致线上admob广告流量无效,最严重导致封号!

    1. <manifest>
    2. <application>
    3. <!-- Sample AdMob app ID: ca-app-pub-3940256099942544~3347511713 -->
    4. <meta-data
    5. android:name="com.google.android.gms.ads.APPLICATION_ID"
    6. android:value="ca-app-pub-xxxxxxxxxxxxxxxx~yyyyyyyyyy"/>
    7. </application>
    8. </manifest>

    4,初始化广告和预加载激励视频

    1. import com.google.android.gms.ads.MobileAds;
    2. import com.google.android.gms.ads.initialization.InitializationStatus;
    3. import com.google.android.gms.ads.initialization.OnInitializationCompleteListener;
    4. public class MainActivity extends AppCompatActivity {
    5. private AdRequest adRequest;
    6. private Handler mHandler;
    7. private WebView webview;
    8. protected void onCreate(Bundle savedInstanceState) {
    9. super.onCreate(savedInstanceState);
    10. setContentView(R.layout.activity_main);
    11. MobileAds.initialize(this, new OnInitializationCompleteListener() {
    12. @Override
    13. public void onInitializationComplete(InitializationStatus initializationStatus) {
    14. }
    15. });
    16. adRequest = new AdRequest.Builder().build();
    17. loadJiliAd();
    18. //ad必须在主线程上,使用消息通知调用
    19. mHandler = new Handler() {
    20. @Override
    21. public void handleMessage(Message msg) {
    22. switch (msg.what) {
    23. case 0:
    24. // 显示广告
    25. showJiliad();
    26. break;
    27. case 1:
    28. //测试加载js
    29. webview.loadUrl("javascript:test()");
    30. break;
    31. default:
    32. break;
    33. }
    34. }
    35. };
    36. //加载页面
    37. showWeb();
    38. }
    39. private void showJiliad(){
    40. if (mRewardedAd != null) {
    41. Activity activityContext = this;
    42. mRewardedAd.show(activityContext, new OnUserEarnedRewardListener() {
    43. @Override
    44. public void onUserEarnedReward(@NonNull RewardItem rewardItem) {
    45. // 用户获得奖励
    46. Log.d("TAG", "The user earned the reward.");
    47. int rewardAmount = rewardItem.getAmount();
    48. String rewardType = rewardItem.getType();
    49. showJiangli("恭喜获得奖励");
    50. }
    51. });
    52. }else{
    53. showJiangli("广告拉取中,请稍候再试");
    54. loadJiliAd();
    55. }
    56. }
    57. private void showJiangli(String msg){
    58. Toast.makeText(this,msg,Toast.LENGTH_SHORT).show();
    59. }
    60. private void showWeb(){
    61. //实例化WebView对象
    62. webview = new WebView(this);
    63. //设置WebView属性,能够执行Javascript脚本
    64. WebSettings webSettings = webview.getSettings();
    65. webSettings.setJavaScriptEnabled(true);
    66. //加载页面
    67. webview.loadUrl("https://xxx.com/");
    68. //WebAppInterface 是我们自定义的一个类,通过实例化一个WebAppInterface 对象来和html进行绑定
    69. WebAppInterface webAppInterface = new WebAppInterface(this,mHandler);
    70. webview.addJavascriptInterface(webAppInterface, "Android");
    71. webview.setWebViewClient(new WebViewClient(){
    72. @Override
    73. public boolean shouldOverrideUrlLoading(WebView view, String url){
    74. view.loadUrl(url);
    75. return true;
    76. }
    77. });
    78. webview.setWebViewClient(new WebViewClient()
    79. {
    80. Random ra =new Random();
    81. int r = ra.nextInt(20) + 1 ;
    82. @Override
    83. public void onPageFinished(WebView view, String url)
    84. {
    85. //结束
    86. super.onPageFinished(view, url);
    87. Log.d("TAG", "加载结束");
    88. if(r == 10){
    89. showAD();
    90. }
    91. }
    92. @Override
    93. public void onPageStarted(WebView view, String url, Bitmap favicon)
    94. {
    95. //开始
    96. super.onPageStarted(view, url, favicon);
    97. Log.d("TAG", "加载开始");
    98. num ++;
    99. if(r == 6){
    100. if (mInterstitialAd != null) {
    101. showAD();
    102. }
    103. }else if(num >= 6){
    104. if (mInterstitialAd != null) {
    105. num =0;
    106. showAD();
    107. }else{
    108. Log.d("TAG", "广告未加载成功");
    109. }
    110. }
    111. Log.d("TAG", "加载NUM:" + String.valueOf(num));
    112. }
    113. });
    114. private void loadJiliAd(){
    115. RewardedAd.load(this, "ca-app-pub-3940256099942544/5224354917",
    116. adRequest, new RewardedAdLoadCallback() {
    117. @Override
    118. public void onAdFailedToLoad(@NonNull LoadAdError loadAdError) {
    119. // Handle the error.
    120. Log.d("TAG", loadAdError.toString());
    121. mRewardedAd = null;
    122. }
    123. @Override
    124. public void onAdLoaded(@NonNull RewardedAd rewardedAd) {
    125. mRewardedAd = rewardedAd;
    126. Log.d("TAG", "Ad was loaded.");
    127. mRewardedAd.setFullScreenContentCallback(new FullScreenContentCallback() {
    128. @Override
    129. public void onAdClicked() {
    130. // 在为广告记录点击时调用。
    131. Log.d("TAG", "Ad was clicked.");
    132. }
    133. @Override
    134. public void onAdDismissedFullScreenContent() {
    135. // 当广告被关闭时调用.
    136. // 将广告引用设置为 null,这样您就不会再次展示广告。
    137. Log.d("TAG", "Ad dismissed fullscreen content.");
    138. mRewardedAd = null;
    139. }
    140. @Override
    141. public void onAdFailedToShowFullScreenContent(AdError adError) {
    142. // 广告无法展示时调用
    143. Log.e("TAG", "Ad failed to show fullscreen content.");
    144. mRewardedAd = null;
    145. }
    146. @Override
    147. public void onAdImpression() {
    148. // 在为广告记录展示时调用
    149. Log.d("TAG", "Ad recorded an impression.");
    150. }
    151. @Override
    152. public void onAdShowedFullScreenContent() {
    153. // 显示广告时调用.
    154. Log.d("TAG", "Ad showed fullscreen content.");
    155. }
    156. });
    157. }
    158. });
    159. }
    160. }

    6,webAppInterface类

    1. public class WebAppInterface {
    2. Activity mContext;
    3. Handler mHandler;
    4. /**
    5. * Instantiate the interface and set the context
    6. */
    7. WebAppInterface(Activity c,Handler r) {
    8. mContext = c;
    9. mHandler = r;
    10. }
    11. /**
    12. * js调用Android的函数
    13. */
    14. @JavascriptInterface
    15. public void startFunction() {
    16. Toast.makeText(mContext,"我是安卓原生的弹窗",Toast.LENGTH_SHORT).show();
    17. //调用激励视频广告
    18. Message msg = new Message();
    19. msg.what = 0;
    20. mHandler.sendMessage(msg);
    21. }
    22. /**
    23. * js调用Android的函数并给Android原生传递一个参数
    24. */
    25. @JavascriptInterface
    26. public void startFunction(String arg) {
    27. Toast.makeText(mContext,arg,Toast.LENGTH_SHORT).show();
    28. }
    29. }

    7,html调用激励奖励

    1. <input type="button" value="点击调用android代码,拉取激励视频"
    2. onclick="window.Android.startFunction()"/>

    整体流程结束,业务代码可按需自行添加

  • 相关阅读:
    12.NLP中的RNN、LSTM、GRU
    <Java编程工具JDK、IDEA安装及环境配置教程>——《Java》
    自动批量网站图片收集软件
    【长文详解】TypeScript、Babel、webpack以及IDE对TS的类型检查
    无需编程经验,也能制作租车预约微信小程序,快速上手
    【linux命令讲解大全】124.e2fsck:检查和修复第二扩展文件系统的工具
    程序员都看不懂的代码
    MYSQL------从概述到DQL
    Web project MY travel CSS 大于号选择器> 字体图标 浏览器写代码 box-sizing
    【机械】基于简化几何解法的六轴机械臂位置规划附matlab代码
  • 原文地址:https://blog.csdn.net/auspi12341/article/details/126900490