应用前提条件

  • 使用 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 的依赖项添加到您的模块的应用级 Gradle 文件,通常为 app/build.gradle:

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

3,将您的 AdMob 应用 ID(可在 AdMob 界面中找到)添加到应用的 AndroidManifest.xml 文件中。为此,请添加包含 android:name="com.google.android.gms.ads.APPLICATION_ID" 的 <meta-data> 代码。您可以在 AdMob 界面中找到您的应用 ID。对于 android:value,请插入您自己的 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("https://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()"/>

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

H5页面调用admob激励视频,用户获取奖励的更多相关文章

  1. 在Angular.js中的H5页面调用Web api时跨域问题处理

    /// <summary> /// 被请求时 /// 在Angular.js中的H5页面调用Web api时跨域问题处理 /// </summary> /// <para ...

  2. 前端如何在h5页面调用微信支付?

    在微信服务号开发的时候经常会遇到微信支付的功能实现,通过实际经验自己总结了一下,前端在H5页面调起微信支付有两种办法,一是利用内置对象,二是通过引用微信的js sdk,亲测都能支付成功,从写法上来看用 ...

  3. 微信h5页面调用第三方位置导航

    微信h5页面拉起第三方导航应用 需要准备的: 通过微信认证的公众号有备案过的域名 背景:微信公众号点击菜单栏跳到h5页面,需要用到导航功能 需求:当用户点击导航按钮时,跳转到第三方app进行导航 参考 ...

  4. Webview之H5页面调用android的图库及文件管理

    h5页面打开图片管理器 一般页面在pc打开文件管理器是用 type="file"的代码,可是这在android的webview是无效的,必须为webview设定WebChromeC ...

  5. 混合app开发,h5页面调用ios原生APP的接口

    混合APP开发中,前端开发H5页面,不免会把兼容性拉进来,在做页面的兼容性同事,会与原生app产生一些数据交互: 混合APP开发,安卓的兼容性倒是好说,安卓使用是chrome浏览器核心,已经很好兼容H ...

  6. h5页面 video暂停播放 视频控件 以及当前页面只有一个可以播放效果

    <!DOCTYPE html> <html> <head> <meta name="viewport" content="wid ...

  7. H5页面调用手机打电话功能

    <head>里面加上: <meta name="format-detection" content="telephone=yes"/> ...

  8. h5页面调用摄像头(简易版)

    <input type="button" value="OpenVideo" id="btnOpenVideo" /> < ...

  9. h5页面调用相机功能

    //accept:表示要打开的文件类型 capture:表示可以捕获到系统默认的设备 <input type="file" accept="image/*" ...

随机推荐

  1. 配置svn,httpd启动报错 Job for httpd.service failed because the control process exited with error code. See "systemctl status httpd.service" and "journalctl -xe" for details.

    查看httpd的状态,发现80端口被占用,因为我的nginx的80端口. systemctl status httpd.service  解决: 把Apache的端口该成别的端口 vi /etc/ht ...

  2. NC20032 [HNOI2003]激光炸弹

    NC20032 [HNOI2003]激光炸弹 题目 题目描述 一种新型的激光炸弹,可以摧毁一个边长为R的正方形内的所有的目标. 现在地图上有 \(n\) (\(N ≤ 10000\))个目标,用整数 ...

  3. pyflink的安装和测试

    pyflink安装 安装前提:python3.6-3.8 参考:Installation | Apache Flink Python version (3.6, 3.7 or 3.8) is requ ...

  4. Elasticsearch深度应用(下)

    Query文档搜索机制剖析 1. query then fetch(默认搜索方式) 搜索步骤如下: 发送查询到每个shard 找到所有匹配的文档,并使用本地的Term/Document Frequer ...

  5. 记一次 Druid 超时配置的问题 → 引发对 Druid 时间配置项的探究

    开心一刻 一天在路边看到一个街头采访 记者:请问,假如你儿子娶媳妇,给多少彩礼合适呢 大爷:一百万吧,再给一套房,一辆车 大爷沉思一下,继续说到:如果有能力的话再给老丈人配一辆车,毕竟他把女儿养这么大 ...

  6. 当mysql表从压缩表变成普通表会发生什么

    前言 本文章做了把mysql表从压缩表过渡到普通表的实验过程,看看压缩表变成普通表会发生什么?本文针对mysql5.7和mysql8分别进行了实验. 1.什么是表压缩 在介绍压缩表变成普通表前,首先给 ...

  7. 【新人福利】使用CSDN 官方插件,赠永久免站内广告特权 >>电脑端访问:https://t.csdnimg.cn/PVqS

    [新人福利]使用CSDN 官方插件,赠永久免站内广告特权 >>电脑端访问:CSDN开发助手 [新人福利]使用CSDN 官方插件,赠永久免站内广告特权 >>电脑端访问:https ...

  8. 【我的面试-01】Web前端开发实习岗-面试题总结

    简单开头 首先技术面试官会根据简历里所写的项目和个人掌握技术栈提问(我不知道已经改过多少次简历了,因为前期投简历是真的是沉在茫茫大海,捞漂流瓶都捞不到的那种) 我的技术栈:(Vue还在苦苦的自学当中, ...

  9. 新建 Microsoft Office Word 文档 来源:牛客网

    题目 链接:https://ac.nowcoder.com/acm/contest/28886/1015 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其 ...

  10. Linux入门操作介绍

    Linux 是由unix衍生而来(小知识:mac也是使用unix核心),由全世界的程序员一起开发的开源系统.如今基于linux已经有了很多版本,我们后面使用的就是衍生版本之一的Ubuntu. Ubun ...