> 技术文档 > CocosCreator Android项目接入UnityAds 广告SDK_cocos creator android sdk 接入

CocosCreator Android项目接入UnityAds 广告SDK_cocos creator android sdk 接入


引擎: 3.8.1

语言: TypeScript、Java

工具: AndroidStudio

您好,我是鹤九日!

本篇文章的标题有些绕口,根据名字可能会让人有些无法理解。

请无需关注,我们只需要了解UnityAds在Android平台的接入即可。

官方文档: UnityAds Android开发者集成指南

简介


正式开始之前,先说下自己对广告SDK的理解,因个人的一些经历和职场经验来说,我有幸接触过两种不同广告的接入。

一、微信小游戏

CocosCreator Android项目接入UnityAds 广告SDK_cocos creator android sdk 接入

二、UnityAds

CocosCreator Android项目接入UnityAds 广告SDK_cocos creator android sdk 接入

两种不同平台下,以及对其他广告的理解,简要汇总下:

一、广告SDK平台众多,但广告的种类无非就是如下几种:

  1. 插屏广告:主要用于在项目中居中、底部页面的显示

  2. 奖励广告:主要以全屏广告的形式播放,指定时间内播放结束,有各种奖励道具

  3. 格子广告:类似于小方块,比如微信小游戏的左上方、右上方等显示的小方格。

二、不同种类的广告可能会有多个广告ID或者说多个广告单元,用于在不同页面展示不同的效果。

三、广告的接入是大致类似的,都需要我们先初始化,然后再调用不同的广告样式显示、隐藏等。

今天的文章便以UnityAds为题,讲解下在Android平台下的接入。

UnityAds后台


广告SDK的接入,终究是摆脱不了登陆广告后台进行设置的。

主要是为了获取Android或者IOS项目下的游戏ID,以及不同样式广告的ID。

注:登录UnityAds后台后,可通过左上角的用户的语言设置中文

注:不同样式的广告,通常允许开发者自定义增加、修改广告的播放时间、显示样式等

CocosCreator Android项目接入UnityAds 广告SDK_cocos creator android sdk 接入

这里注意一点:

UnityAds广告平台支持使用不同模式显示测试、真实广告。

注: 真正发布的时候注意关闭,否则很容易被一些平台判定为欺诈

请添加图片描述

Andorid环境配置


后台设置完成后,便是Android的配置了,官方文档的说明还是很详细的:参考

这里简要汇总下,Android Gradle 插件版本必须至少为 4.2.0 或更高。

确保build.gradle 文件中指定了以下内容:

  • minSDKversion19 或更高版本

  • compileSdkVersion33 或更高版本

  • 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,便可完成初始化

二、将不同的广告单元由统一的管理类来控制

大致的文件如下:

文件名 用途 UnityAdsManager UnityAds的管理类,用于初始化,调用插屏、横幅、奖励广告及其他公用接口 UnityAdsInterstitialAd 插屏广告相关 UnityAdsBanner 横幅广告相关 UnityAdsRewardedAd 奖励广告相关

注:插屏、横幅、奖励广告的实现,官方文档中有着详细的代码说明。

这里就不做粘贴了,只对核心的点说明下。

UnityAdsManger的大致接口如下:

接口名 返回值 用途 showInterstitialAd() void 显示插屏广告 showRewardAd() void 显示奖励广告 isSupport() boolean 在当前平台上是否支持 isInitialized() boolean 是否初始化成功 version() String sdk版本

大致的实现代码如下:

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开源框架去独立开发一款小小的游戏!

您一定会了解并学习到更多…

文章内容有些浅显,但期待对您有用!

如果觉得文章不错,期待您的点赞和留言,感谢!

我是鹤九日,祝您生活愉快!