CocosCreator接入GoogleAdMob激励广告

2023-11-16

我们的App需要通过接入广告的方式来赚取收入,其中GoogleAdMob就是比较简单容易实现的一种。

我在文章中接入GoogleAdmob的方式是通过AndroidStudio原生来接入的。

 

一、前提条件

 

二、广告类型

横幅广告是在应用布局中占据一处位置的矩形图片或文字广告。用户与应用互动时,这类广告会停留在屏幕上,并且可在一段时间后自动刷新。如果您刚开始接触移动广告,建议从横幅广告着手。

插页式广告

插页式广告是全屏广告,它会覆盖整个应用界面,直到用户将其关闭。在应用执行流程的自然停顿点,例如游戏的不同关卡之间,或一项任务完成后,最适合投放这类广告。

原生广告

原生广告是一种基于组件的广告格式,可让您自由地自定义素材资源(如标题和号召性用语)在应用中的呈现方式。通过自行选择字体、颜色和其他详细信息,您可以呈现出自然而不突兀的广告展示效果,进而提供更丰富的用户体验。

目前,原生广告尚处于封闭测试阶段,仅面向部分发布商提供。

激励广告

激励视频广告是一种全屏视频广告,用户可选择使用全屏模式观看,以换取应用内奖励。

下面,我们将开展激励广告的接入方式。

 

三、初始化全局SDK

1.在app文件夹外部build.gradle文件中增加这两行

allprojects {
    repositories {
        google()
        jcenter()
    }
}

当然,如果有了就不用加了。

2.在app文件夹内部build.gradle文件中增加这一行

implementation 'com.google.android.gms:play-services-ads:17.2.0'

输入这行后同步一下:

3.在AndroidManifest.xml里增加以下内容:

<manifest>
    <application>
        <!-- Sample AdMob App ID: ca-app-pub-3940256099942544~3347511713 -->
        <meta-data
            android:name="com.google.android.gms.ads.APPLICATION_ID"
            android:value="YOUR_ADMOB_APP_ID"/>
    </application>
</manifest>

其中的YOUR_ADMOB_APP_ID就是上图中你的AdMob账号中的“应用ID”

4.初始化MobileAds

加载广告之前,请先使用AdMob“应用ID”调用MobileAds.initialize(),以便让应用初始化移动广告SDK。此操作仅需要执行一次,最好是在应用启动时执行。

在AppActivity.java中加入以下代码:

package ...
import ...
import com.google.android.gms.ads.MobileAds;

public class MainActivity extends AppCompatActivity {
    ...
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // Sample AdMob app ID: ca-app-pub-3940256099942544~3347511713
        MobileAds.initialize(this, "YOUR_ADMOB_APP_ID");
    }
    ...
}

至此,初始化已经完成了,如果要接入不同类型的广告,就可以直接接入。

 

四、接入激励广告SDK

当我们接到需要接入广告的需求的时候,可能我们App功能还没开发完成,还没上线到商店里,这样也可以接入广告测试吗?

答案当然是可以。

GoogleAdMob提供了测试广告ID:

广告格式 示例广告单元 ID
横幅广告 ca-app-pub-3940256099942544/6300978111
插页式广告 ca-app-pub-3940256099942544/1033173712
插页式视频广告 ca-app-pub-3940256099942544/8691691433
激励视频广告 ca-app-pub-3940256099942544/5224354917
原生高级广告 ca-app-pub-3940256099942544/2247696110
原生高级视频广告 ca-app-pub-3940256099942544/1044960115

在这里,我们首先初始化激励广告的SDK功能:

1.在AppActivity.java中加入以下代码

public class AppActivity extends Cocos2dxActivity {

    private RewardedVideoAd mRewardedVideoAd;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // Workaround in https://stackoverflow.com/questions/16283079/re-launch-of-activity-on-home-button-but-only-the-first-time/16447508
        if (!isTaskRoot()) {
            // Android launched another instance of the root activity into an existing task
            //  so just quietly finish and go away, dropping the user back into the activity
            //  at the top of the stack (ie: the last state of this task)
            // Don't need to finish it again since it's finished in super.onCreate .
            return;
        }
        // DO OTHER INITIALIZATION BELOW
        
        SDKWrapper.getInstance().init(this);
        CAAgent.enableDebug(false);

        // Sample AdMob app ID:
        MobileAds.initialize(this, "不能说");


        // Use an activity context to get the rewarded video instance.
        mRewardedVideoAd = MobileAds.getRewardedVideoAdInstance(this);
        mRewardedVideoAd.setRewardedVideoAdListener(this);

        loadRewardedVideoAd();
    }

    private void loadRewardedVideoAd() {
        mRewardedVideoAd.loadAd("ca-app-pub-3940256099942544/5224354917",
                new AdRequest.Builder().build());
    }

    @Override
    public void onRewarded(RewardItem reward) {
        Toast.makeText(this, "onRewarded! currency: " + reward.getType() + "  amount: " +
                reward.getAmount(), Toast.LENGTH_SHORT).show();
        // Reward the user.
    }

    .....
}

2.实现RewardedVideoAdListener接口

public class AppActivity extends Cocos2dxActivity implements RewardedVideoAdListener
    @Override
    public void onRewarded(RewardItem reward) {
        Toast.makeText(this, "onRewarded! currency: " + reward.getType() + "  amount: " +
                reward.getAmount(), Toast.LENGTH_SHORT).show();
        // Reward the user.
    }

    @Override
    public void onRewardedVideoAdLeftApplication() {
        Toast.makeText(this, "onRewardedVideoAdLeftApplication",
                Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onRewardedVideoAdClosed() {
        Toast.makeText(this, "onRewardedVideoAdClosed", Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onRewardedVideoAdFailedToLoad(int errorCode) {
        Toast.makeText(this, "onRewardedVideoAdFailedToLoad", Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onRewardedVideoAdLoaded() {
        Toast.makeText(this, "onRewardedVideoAdLoaded", Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onRewardedVideoAdOpened() {
        Toast.makeText(this, "onRewardedVideoAdOpened", Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onRewardedVideoStarted() {
        Toast.makeText(this, "onRewardedVideoStarted", Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onRewardedVideoCompleted() {
        Toast.makeText(this, "onRewardedVideoCompleted", Toast.LENGTH_SHORT).show();
    }

3.反复播放广告

把上面的onRewardedVideoAdClosed方法修改一下:

@Override
public void onRewardedVideoAdClosed() {
    // Load the next rewarded video ad.
    loadRewardedVideoAd();
}

然后再在我们需要弹出广告的地方调用以下方法:

if (mRewardedVideoAd.isLoaded()) {
    mRewardedVideoAd.show();
}

注意:我们需要在广告加载完成,也就是isLoaded()为true的时候调用。

至此,我们调用广告的功能就完成了!!!。。。。

4.做一个优化:有用的回调

要将父级 Activity 的生命周期事件转发给 RewardedVideoAd 对象,可在父级 Activity 的 onResume()onPause() 和 onDestroy() 方法中分别调用 resume()pause() 和 destroy() 方法。

@Override
public void onResume() {
    mRewardedVideoAd.resume(this);
    super.onResume();
}

@Override
public void onPause() {
    mRewardedVideoAd.pause(this);
    super.onPause();
}

@Override
public void onDestroy() {
    mRewardedVideoAd.destroy(this);
    super.onDestroy();
}

这一个生命周期的回调有挺大的用处的,大家可以思考一下这个用处是什么。

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CocosCreator接入GoogleAdMob激励广告 的相关文章

  • BitmapFactory 解码 BMP 图像

    我在用这段代码 http android developers blogspot com 2010 07 multithreading for performance html从 Android 开发者博客下载 BMP 文件 例如this
  • SpinnerAdapter 中 getView 和 getDropDownView 的区别

    当你实现 SpinnerAdapter 时 你会得到获取下拉视图 http developer android com reference android widget SpinnerAdapter html getDropDownView
  • Android 从图库中选择图像显示内存错误

    我正在编写一个代码示例 我必须从图库中选择一个图像 该代码正在运行 但是在从图库中选择图像后 我得到了内存不足错误 in my 活动结果时 我可以获得小图像 但大图像会产生问题 这是我的代码 try Uri selectedImageUri
  • 相机预览的有效模糊

    到目前为止我尝试过的 将每一帧转换为位图 然后用library https github com wasabeef Blurry并将其放入ImageView这是在相机预览前 显然太慢了 就像1 fps 然后我开始使用渲染脚本这会模糊每一帧
  • 如何在android中使用Mediaprojection库捕获屏幕并转换为mp4文件?

    从 android 5 0 开始 他们提供了媒体投影库来捕获屏幕内容 但他们提供的示例演示应用程序尚不清楚 你可以找到示例应用程序here https github com googlesamples android ScreenCaptu
  • 我无法从 Android 模拟器中删除日语 IME

    我已经多次看到这个问题 但答案总是 从 语言和键盘设置 菜单中取消选中 IME 问题是那里没有复选框 选择菜单 自定义区域设置 en US 菜单 设置 语言和键盘 选择语言 选择 英语 美国 菜单 设置 语言和键盘 日语输入法是唯一的输入法
  • 删除所有(子)片段的正确方法

    我在父级片段线性布局 fragmentContainer 中动态加载一堆子级片段 然后当用户单击按钮时 我需要将它们全部删除并添加新的 我不知道每次会添加多少碎片 这是我一次性删除所有碎片的方法 LinearLayout ll Linear
  • Android - 在通知栏中使用外部个人资料图像,如 Facebook

    我知道您可以在推送通知参数中发送信息 例如消息 标题 图像 URL 等 Facebook 如何在通知区域中显示您的个人资料图片和消息 我想在通知区域中使用外部图像 因此当您将其下拉时 您会看到带有消息的个人资料图像 现在 我的仅显示可绘制文
  • 这个错误从何而来?错误:com.facebook.FacebookException:无法获取应用程序名称

    我无法弄清楚这一点 我已将我的密钥哈希和所有内容添加到 Facebook 网页 但我无法找出此错误 11 12 19 51 27 744 D HelloFacebook 5188 Error com facebook FacebookExc
  • Android 操作系统上的 NFC 堆栈

    有人可以帮助我了解 NFC Android 堆栈的当前状态吗 随着OS 2 3发布了小型 NFC 支持 仅限于 NXP 标签读取 后来 Google 增强了 API 所以在OS 2 3 3支持更广泛的标签 并且还可以使用 p2p 我的问题是
  • 在 Android 中完成一项活动?

    我有一些活动 Home Activity gt Activity 1 gt Activity 2 gt Activity 3 gt HomeActivity finish finish finish Home Activity gt Act
  • 在 Android Studio 中使用预构建的共享库

    我需要在我的 android 项目中使用自定义的预构建共享库 在独立 ndk 上构建为 libdynamic so 我在路径 src main 中创建了一个文件夹 jniLibs 然后在其中创建了 4 个文件夹 即 armeabi arme
  • 如何使用android ndk r9b为Android编译FFMPEG

    我想设计一个Android应用程序 可以通过FFMPEG命令播放和编辑视频 但我不知道如何在Android上使用FFMPEG 我尝试过从Google搜索到的许多方法 但它们太旧了 无法实现 现在 FFMPEG的最新版本是2 1 1 Andr
  • 没有 Listview 的 Android 导航抽屉

    我想创建一个像导航抽屉一样的滑动菜单 但是将会有文本视图和图像视图 就像半活动一样 有可能做到这一点吗 您可以使用NavigationDrawer来自支持库 包括一个FrameLayout作为一个孩子DrawerLayout并使androi
  • Kotlin 协程阻塞 Android 中的主线程

    我是 Kotlin 和协程的新手 我有一个fun在我的活动及其内部 检查User用户名和密码 如果为真 则返回Users object 一切都好 但是当我按下按钮时 我的活动被阻止并等待响应Users login 我用这个有趣的 priva
  • Buildozer Numpy RuntimeError:工具链损坏:无法链接简单的 C 程序

    用 Python 编写我的第一个 Android 应用程序并使用 Buildozer 对其进行打包 因为稍后在项目中需要使用numpy 所以我尝试打包以下测试代码 import numpy import kivy kivy require
  • 如何在打开导航抽屉时使背景 Activity 变小?

    我想做我的背景Activity打开时稍微小一点Navigation Drawer 模拟存在的效果Airbnb应用 我想最好的解释是截图 但重点不是让 View 变小 而是让它成为与 Drawer 打开 关闭动画同步的动画 因此 如果您开始打
  • Android:如何停止监听电话监听器? [复制]

    这个问题在这里已经有答案了 可能的重复 Android 为什么 PhoneCallListener 在活动完成后仍然存在 https stackoverflow com questions 11666853 android why phon
  • 设置 LinearLayout 的最大宽度

    如何设置水平线的最大宽度LinearLayout 因此 如果内容较短 例如某些文本 布局会缩小 如果内容较长 则布局不会扩展超过某个最大宽度值 我更喜欢在 XML 级别执行此操作 这就是我所需要的超出了之前答案中的建议 https stac
  • Android Wear Overlay 传递触摸事件

    我有一个 Android Wear 应用程序 其中我使用透明的覆盖视图来接收触摸事件 我需要能够接收屏幕上任何位置发生的所有触摸事件 并且还能够看到它们的坐标 我发现的所有研究都表明我无法接收所有触摸事件并将其传递 然而 and 都在做这样

随机推荐

  • 机器学习原来这么有趣 Part3: 深度学习与卷积神经网络

    最近看了Adam Geitgey的机器学习系列文章 寻思着闲着也是闲着 干脆翻译以下 顺便学习下英语啥的哈哈哈 第一次做这种事 有不到位的地方欢迎指教噢 前言 你是否已经厌倦了在查阅了无数有关深度学习的文章之后仍然不能参透其中深意的无力感
  • python PyQt5学习笔记 事件和信号 有注释 p2

    事件和信号 事件 所有的应用都是事件驱动的 事件大部分都是由用户的行为产生的 当然也有其他的事件产生方式 比如网络的连接 窗口管理器或者定时器等 调用应用的exec 方法时 应用会进入主循环 主循环会监听和分发事件 在事件模型中 有三个角色
  • opencv实现人脸识别(c++实现)

    1 说明 本文章基于opencv VS2015 实现人脸检测 2 效果 可以直接打开摄像头对人脸进行识别 这些标识框也会跟随你的人脸移动 隐私问题 我这里对图片进行了识别 3 相关类及函数介绍 opencv中文文档 3 1 cv Video
  • redux react ajax,使用React + Redux实现的组件间实时数据绑定同步

    JavaScript 语言 JaveScriptBabelCoffeeScript 确定 Browser Level React Redux Action function changeGreeting text return type C
  • [JDBC]Exception in thread “main“ java.lang.ClassNotFoundException: com.mysql.cj.jdbc.Driver[我的报错日常]

    问题描述 Java项目连接MySQL数据库时报错 Exception in thread main java lang ClassNotFoundException com mysql jdbc Driver java 问题分析 找不到驱动
  • 华南农业大学数据结构oj 8580 合并链表

    include
  • 初级 - 如何搭建一个Java Web项目 - 记录

    目录 序言 一 使用 Spring Initializr 创建创建一个Java 项目基本框架的方法 1 新建项目时 安装依赖理解 Developer Tools 选项 Web 选项 其他选项具体详情请最下面的参考链接 这里就不一一列举了 只
  • splines

    当变量之间存在非线性关系时 线性回归就不再适用 这时可以转而使用其他非线性模型 但是 线性回归毕竟是统计建模的基础 通过本篇的介绍 可以看到即使是非线性关系有时也可以通过变换然后使用线性回归进行建模 1 多项式回归 多项式回归即是在模型中加
  • yml文件的全局注释和全局取消注释

    yml文件的全局注释和全局取消注释 最近在写微服务的配置文件的时候需要将所有的代码进行注释 手动一行行的添加 来注释实在过于麻烦 经过在网上百度后发现其实是有快捷键的 全局注释 对于 Mac 的话是 Command 对于 Linux 或 W
  • 面向对象(OOP)基础+进阶

    面向对象 OOP 基础 进阶 1 类 类是对现实生活中一类具有共同属性和行为的事物的抽象 类 是对事物 也就是对象的一种描述 可以将类理解为一张设计圈 根据设计圈 可以创建出具体存在的事物 类的组成 1 属性 该事物的各种特征 例如我的属性
  • Python学习经典书籍完整书单整理!!!

    一 Python 基础 01 Python编程 从入门到实践 第2版 本书是针对所有层次Python读者而作的Python入门书 让你可以快速学会Python编程 通过这本书 你将会学到各种Python库和工具 NumPy Pygal等 制
  • 初学gitlab上传代码实践

    初学Gitlabs上传代码实践 1 登录gitlab web页面 2 新建一个项目 可以默认系统的选项 点击创建 成功 3 回到window桌面上 右击选git bash here 前提你已经安装了git本地软件 这个作用是创建密钥 4 c
  • Spring IOC容器初始化主体流程

    文章目录 Spring IOC容器初始化主体流程 Spring IOC的容器体系 Bean生命周期关键时机点 SpringIOC容器初始化主流程 BeanFactory创建流程 获取BeanFactory子流程 BeanDefinition
  • zabbix自动发现,端口 url检测

    一 自动发现 1 开启自动发现 配置自动发现 修改自动发现的网段 启用自动发现 2 配置自动发现的动作 配置自动发现的动作 添加动作的IP地址 添加自动发现的操作 启用动作 3 检验 二 自动注册 1 修改agent配置 所有agent机器
  • nginx反向代理配置

    一 Nginx是什么 1 Nginx engine x 是一个高性能的HTTP和反向代理web服务器 同时也提供了IMAP POP3 SMTP服务 2 Nginx是一款轻量级的Web 服务器 反向代理服务器及电子邮件 IMAP POP3 代
  • Redis学习总结之zset类型

    sorted set是set的一个升级版本 在set的基础上增加了一个顺序属性 这一属性在添加修改元素的时候可以指定 每次指定后 zset会自动重新按新的值调整顺序 可以理解为有两列的mysql表 一列存value 一列存顺序 操作中key
  • 用vue+element实现表格键盘上下键单选中行效果

    使用element的table组件 如果还想要实现上下键选中行效果的话 可以试试以下方法 主要是通过监听键盘事件实现的 如果还需要表格上下键时保持被选中行一直在视野中的话 可以在监听事件中根据当前行的位置动态设置表格的滚动距离实现 现在先不
  • 根据平台不同,运行不同的代码,设置不同的参数

    根据平台不同 运行不同的代码 设置不同的参数 方法一 os name 方法二 platform system python根据平台不同 运行不同的代码 设置不同的参数 方法一 os name os name字符串指示你正在使用的平台 比如对
  • mysql设置远程连接账号密码方法

    GRANT ALL PRIVILEGES ON TO myuser IDENTIFIED BY mypassword WITH GRANT OPTION
  • CocosCreator接入GoogleAdMob激励广告

    我们的App需要通过接入广告的方式来赚取收入 其中GoogleAdMob就是比较简单容易实现的一种 我在文章中接入GoogleAdmob的方式是通过AndroidStudio原生来接入的 一 前提条件 使用 Android Studio 1