UNITY 华为Ad SDK 及Analytics SDK接入填坑

最近项目需求,需要接入华为的广告及分析SDK,结果华为没有封装UNITY的插件,所以需要手动进行相关封装。这里面的坑实在过多,所以写了这篇文章分享给大家,我遇到过的坑希望能帮大家解决一下。


Ads-Lite的封装

1.主要封装工具:Android Studio

首先贴一下他们的文档吧:https://developer.huawei.com/consumer/cn/doc/development/HMS-Guides/ads-sdk-version-update-v3

我在进行封装时,参考的是IronSource以及AdTiming在UNITY层进行的封装方法。他们的封装确实十分优秀,一套流程接下来绝对能够对UNITY与Android层的交互有更加深刻的理解。

由于我们的项目需要的是Banner、Interstitial以及RewardAd 这几种广告,所以接入的是Ads-lite,关于库及依赖的引入可以根据他们的文档来操作。需要注意的是需要自定义Activity以实现Unity的调用。BridgeActiviy类将作为我们的主线程存在,需要注意的是在调用广告在layer层AddView的一切操作都需要在主线程中进行,网上有很多关于这部分的内容,我是通过Handler来传递参数实现的。

自定义BridgeActivity以替换Unity默认的Activity

华为广告的初始话方法不需要传递AppKey这些参数,只需要根据当前的Context来进行初始化即可,所以可以在onCreate函数中,我们获取当前Context来进行广告模块的初始化

此时我们新建一个HuaWeiBridge.java的类来实现其广告加载以及回调函数等相关方法,这部分内容相对比较流程化,比较关键的只有一个函数回调以及出现错误时的相关方法设计。

UnityPlayer.UnitySendMessage就是在封装过程中使用最为频繁的一个UNITY与Android层的交互方法

Ads-Lite的封装在理解UNITY与Android层的交互过后还是相对比较容易进行封装的。

但是,坑爹的是如果想上架华为,必须接入华为高级分析服务


Analytics封装

打点的方法还是比较好接的,毕竟只发送数据。需要注意的是初始化必须放在主线程,另外!Analytics的依赖是在华为HMS-Core,需要在App加载时手动读取一个叫做AgConnect-services.json的文件,如果是纯Android开发这个比较好解决,但是!如果是Unity的话,现在我们又必须自定义Application去替代Unity的默认Application。这个我查了很久不确定是否能进行自定义,尝试了一下发现可以,最后我会贴出Unity工程中的manifest文件中需要替换的部分

HuaWeiCustomApplication是我们自定义的Application

这里我贴出整个方法:

完整方法,主要目的是启动时最优先读取json文件

Android基本搞定之后,就是Unity这边的操作了,gradle文件按照需求解析配置即可,主要是AndroidManifest文件需要更改几个地方:


最主要的就是要把默认的Application和Activity替换成我们自定义的

再填个坑,华为广告的主要业务在欧洲,欧洲对于广告的推送有一个限制是部分区域需要向玩家展示协议并获取其同意与否,而且要允许玩家可以随时查看协议并重新确认取消与否。这部分本身是放在了高级设置中,本身并没有要求是必须项,但是就像我说的,华为广告的主要业务区域在欧洲,所以,不接不行......另外这个东西也是巨坑无比:

1.因为华为并没有提供标准化的展示界面以及展示内容推送,所以所有UI界面是需要重新拼的,跳转逻辑也需要自定义。

2.这部分内容也直接影响广告推送的内容,所以逻辑上是与广告SDK紧密联系的。

需要指出来的一点是,他们的文档里这部分:

这个方法里的参数类型是int,所以这个用法是错的,参照API,应该是NonPersonalizedAd.ALLOW_NON_PERRSONALIZED

最近被华为折磨的十分痛苦,随手把遇到的坑先记了下来,之后再有什么我再补充

你可能感兴趣的:(UNITY 华为Ad SDK 及Analytics SDK接入填坑)