CocosCreator Android项目接入UnityAds 广告SDK_cocos creator android sdk 接入
引擎: 3.8.1
语言: TypeScript、Java
工具: AndroidStudio
您好,我是鹤九日!
本篇文章的标题有些绕口,根据名字可能会让人有些无法理解。
请无需关注,我们只需要了解UnityAds在Android平台的接入即可。
官方文档: UnityAds Android开发者集成指南
简介
正式开始之前,先说下自己对广告SDK的理解,因个人的一些经历和职场经验来说,我有幸接触过两种不同广告的接入。
一、微信小游戏
二、UnityAds
两种不同平台下,以及对其他广告的理解,简要汇总下:
一、广告SDK平台众多,但广告的种类无非就是如下几种:
-
插屏广告:主要用于在项目中居中、底部页面的显示
-
奖励广告:主要以全屏广告的形式播放,指定时间内播放结束,有各种奖励道具
-
格子广告:类似于小方块,比如微信小游戏的左上方、右上方等显示的小方格。
二、不同种类的广告可能会有多个广告ID或者说多个广告单元,用于在不同页面展示不同的效果。
三、广告的接入是大致类似的,都需要我们先初始化,然后再调用不同的广告样式显示、隐藏等。
今天的文章便以UnityAds为题,讲解下在Android平台下的接入。
UnityAds后台
广告SDK的接入,终究是摆脱不了登陆广告后台进行设置的。
主要是为了获取Android或者IOS项目下的游戏ID,以及不同样式广告的ID。
注:登录UnityAds后台后,可通过左上角的用户的语言设置中文。
注:不同样式的广告,通常允许开发者自定义增加、修改广告的播放时间、显示样式等
这里注意一点:
UnityAds广告平台支持使用不同模式显示测试、真实广告。
注: 真正发布的时候注意关闭,否则很容易被一些平台判定为欺诈
Andorid环境配置
后台设置完成后,便是Android的配置了,官方文档的说明还是很详细的:参考
这里简要汇总下,Android Gradle 插件版本必须至少为 4.2.0 或更高。
确保build.gradle
文件中指定了以下内容:
-
minSDKversion
为19
或更高版本 -
compileSdkVersion
为33
或更高版本 -
Java 8 针对 Unity Ads SDK 4.7.0 及更高版本
AndroidStudio下,打开: native\\engine\\android\\bundle.gradle 添加内容:
dependencies { implementation \'com.unity3d.ads:unity-ads:4.7.0\'}
打开 native\\engine\\android\\app\\proguard-rules.pro 添加内容:
-dontwarn android.adservices.AdServicesState-dontwarn android.adservices.measurement.MeasurementManager-dontwarn android.adservices.topics.GetTopicsRequest$Builder-dontwarn android.adservices.topics.GetTopicsRequest-dontwarn android.adservices.topics.GetTopicsResponse-dontwarn android.adservices.topics.Topic-dontwarn android.adservices.topics.TopicsManager
如上便是基本的环境配置了。
Java接口
上面的基本环境配置,类似于添加UnityAds的包模块,接下来便是使用Java编写项目要使用的接口了。
在前面的内容上,我们提到过:广告的种类有插屏、横幅、奖励广告等。
为了方便管理、维护和拓展,我们这样来操作:
一、将不同的广告单元构建为类,只需要传入广告的ID,便可完成初始化
二、将不同的广告单元由统一的管理类来控制
大致的文件如下:
注:插屏、横幅、奖励广告的实现,官方文档中有着详细的代码说明。
这里就不做粘贴了,只对核心的点说明下。
UnityAdsManger
的大致接口如下:
大致的实现代码如下:
public class UnityAdsManager { private static volatile UnityAdsManager instance = null; private String adsGameId = \"1234567\"; // 游戏ID private Boolean adstestMode = false; // 是否开启测试模式 private UnityAdsRewardedAd rewardedAd; // 奖励广告实例 // ... public static UnityAdsManager getInstance() { if (instance == null) { synchronized (UnityAdsManager.class) { if (instance == null) { instance = new UnityAdsManager(); } } } return instance; } // 初始化 public void init(Context context) { boolean isSupport = isSupport(); boolean isInitialized = isInitialized(); if (!isInitialized && isSupport) { rewardedAd = new UnityAdsRewardedAd(context, adstestMode); UnityAds.initialize(context, adsGameId, adstestMode, new UnityAdsInitialize(adstestMode)); } else { Log.e(\"UnityAdsInit\", \"当前平台不支持显示Unity Ads\"); } } // 显示奖励广告 public static void showRewardAd() { getInstance().loadRewardAd(); } // 在当前平台上是否支持 public static boolean isSupport() { return UnityAds.isSupported(); } // 是否初始化成功 public static boolean isInitialized() { return UnityAds.isInitialized(); } // sdk版本 public static String version() { if (!isSupport()) { return \"\"; } return UnityAds.getVersion(); } // ----------------------------- private ----------------------------- // // 加载显示奖励广告 private void loadRewardAd() { boolean isSupport = isSupport(); boolean isInitialized = isInitialized(); if (!isSupport || !isInitialized) { String content = \"广告未初始化或不支持平台, isSupport: \" + isSupport + \" isInitialized:\" + isInitialized; return; } Log.i(\"UnityAds\", \"showRewardAd ...\"); this.rewardedAd.loadRewardedAd(); }}
这里说明下:
一、此管理类,仅展示了奖励广告的初始化、显示等,其他广告与之类似,便不再粘贴了!
二、奖励的广告的显示有两个接口,static是为了方便跨平台的使用,而private是为了调用内部实例化对象。
// Cocos引擎提供的JavaScript调用java方法,只支持staticimport { native } from \'cc\'; var o = native.reflection.callStaticMethod(...);
注:关于Java和JavaScript/TypeScript的相互调用,我们下篇文章再详细说明!
编写的Java接口搞定后,我们只需要按照官方文档所言,在项目启动时完成对UnityAds的初始化即可。
// AppActivty.java@Override protected void onCreate (Bundle savedInstanceState) { super.onCreate (savedInstanceState); setContentView (R.layout.activity_main); // Initialize the SDK: UnityAdsManager.getInstance().init(getApplicationContext());
注:到此阶段后,可以运行下项目,检测UnityAds是否初始化成功!
Creator
Java的接口添加完成后,便是通过客户端来调用了,Cocos引擎提供的主要接口便是:callStaticMethod
import { native } from \'cc\'; var o = native.reflection.callStaticMethod( className, // java的类名,比如com.cocos.demo methodName, // java的方法名,比如showRewardAd methodSignature, // 签名,主要是参数、返回值的类型简写 parameters // 参数数据);
这里简单编写下示例:
// 显示奖励广告public showRewardAd() { if (sys.os == sys.OS.ANDROID && sys.isNative) { native.reflection.callStaticMethod(\"com.cocos.demo.UnityAdsManager\", \"showRewardAd\", \"()V\"); }}// UnityAds是否初始化成功public isInitialized(): boolean { if (sys.os == sys.OS.ANDROID && sys.isNative) { native.reflection.callStaticMethod(\"com.cocos.demo.UnityAdsManager\", \"isInitialized\", \"()Z\"); }}
注:
sys.os
用于判断当前运行系统;sys.isNative
用于判断是否为原生平台!
最后
关于UnityAds在Android平台下的简单使用,到这里就结束了!
鉴于篇幅关系,关于JavaScript/TypeScript 同Java的详细交互,将放到下一篇文章讲解!
这里废话下:刚开始了解广告SDK的时候,因为未知,所以恐惧,想象的很难,真正了解后,才发现自己想多了!
另外,我推荐看到本篇文章的朋友们:可借助oops-framework开源框架去独立开发一款小小的游戏!
您一定会了解并学习到更多…
文章内容有些浅显,但期待对您有用!
如果觉得文章不错,期待您的点赞和留言,感谢!
我是鹤九日,祝您生活愉快!