当我第一次接触Unity手机游戏广告接入时,我感觉前方道路大雾弥漫,时常令我搞不清方向。
我想把这段时间学到的在Unity手机游戏中进行广告接入的经历记录下来。由于我也还在广告接入过程中摸索,如有说得不对的地方非常欢迎指正。
国内有多家广告平台,如穿山甲、优量汇、百度、快手等。这些广告平台都可以单独接入,比如,我想在我的游戏中接入穿山甲平台的广告,那在我这个游戏中就只会弹出穿山甲的广告。
有一种叫作聚合广告的平台,如TopOn、Adtiming等,它们各自可以将多家单独的广告平台(如穿山甲、优量汇、百度、快手等)整合到一起作为统一的广告输出。比如,我可以在TopOn这个聚合广告平台上加入穿山甲、优量汇、百度、快手等这些广告平台,这样我就可以在我的游戏中根据TopOn的一种广告筛选机制,在不同的时间,弹出不同广告平台的广告。
我想讲的是Unity手机游戏广告接入的大致思路,并不是某一种广告的接入流程和细节,不会有代码的部分。因为每家广告平台的接入流程和细节很可能会有不同,所以不太可能照本宣科似的进行广告接入。
接下来说说Unity手机游戏广告接入流程的大致思路:
在接入广告以前,要先了解自己要接入的是哪个平台的广告,是单独的广告平台,还是聚合广告平台?如果是单独的广告平台,如穿山甲,只需要在穿山甲广告平台的官网上查询帮助文档,创建应用id、设置代码位、通过帮助文档中的接入教程接入广告。如果是聚合广告平台就需要在所有接入到聚合广告平台的单独的广告平台上都创建应用id、设置代码位,然后把各自单独广告平台的应用id、代码位设置到聚合广告平台上对应的应用id、代码位上,这样的话,接入广告要用到的应用id和代码位就只需要使用该聚合广告平台上的应用id和代码位,帮助文档的话,主要还是看聚合广告平台的,其它单独的广告平台的帮助文档可以在需要特殊需求的时候再看。
需要注意的是,不论是单独的广告平台,还是聚合广告平台,它们接入广告的方式大致相同。所以这两种接入方式的思路可以一起讲,下面会用“广告平台”来统称这两种广告。
在接入广告以前,可以在该广告平台的官网先下载广告接入的demo作为参考,可以先用demo在苹果手机或者安卓手机上运行查看实际效果,有个大致的概念。sdk的选择一般会有3种,Unity Sdk、Android Sdk和iOS Sdk,而有些广告平台只提供了Android Sdk和iOS Sdk。如果广告平台用的是Unity Sdk,那基本上根据广告平台官网上的操作设置就能导出Android的apk包或Android工程;iOS则导出xcode工程。用Unity Sdk的好处就是接入广告比较简单,导入Unity Sdk到Unity中以后,会有Android和iOS的相关文件和配置,只需要将广告的调用接口写好并在要弹出广告的地方调用就行。至于要怎么写调用的接口,这里不作赘述,广告平台的官网上都会详细的教程。Android Sdk和iOS Sdk的接入需要分别导出Android工程和xcode工程,并在各自的工程中写入原生代码,然后在Unity中使用C#对各自的原生代码进行调用,如:C#调用Java(Android)、C#调用oc(iOS)。
一般接入的广告类型有5种,分别是:开屏广告、横幅广告、原生广告(或者叫信息流广告,或者叫模板广告)、插屏广告(或者叫全屏广告)、激励视频广告。这5种之外的广告类型这里不会提及,不过如果能弄懂这5种广告类型,其它的广告类型应该也不是难事。
不论游戏里接入的是哪几种广告,在要加载这些广告以前,都必须先对广告sdk进行初始化,只有sdk初始化了以后才能对不同的广告类型进行加载、显示和关闭。
想知道是否有加载好的广告可供弹出,只要在广告加载成功的回调方法中打印日志就行。
开屏广告:
这是在游戏启动以前弹出的广告,一般开屏广告只能通过Unity导出成Android工程或xcode工程进行接入,因为开屏广告是在游戏启动之前弹出,所以在Android工程或xcode工程中进行开屏广告的初始化速度会比较快。还有一种开屏广告是可以直接在广告平台上设置开启以后就会有开屏广告,不需要写入开屏广告的代码,如,小米的系统开屏,设置开启就行,在游戏审核通过后才会看到开屏广告效果。开屏广告一般会占满整个屏幕,不会去设置尺寸。
开屏广告一般只需要有调用初始化的方法就能弹出。
横幅广告:
这种广告是以长方形横条的形式出现的,多出现在屏幕的底部或顶部,出现在底部会更多一些。横幅广告出现的位置要注意不要遮挡到游戏的主要内容,或者与玩家交互的操作 ,如,UI按钮、滑动操作区域等。要设置横幅广告的尺寸,可以去广告平台的官网上查看帮助文档进行设置。有些广告平台的横幅广告尺寸是固定大小,无法设置尺寸。
横幅广告需要提供加载、显示和关闭的方法。
原生广告:
又叫信息流广告,或者模板广告。原生广告是屏幕上的一块指定大小的广告区域,大小可以根据广告平台的官网上的帮助文档进行设置。它的位置可以根据实际情况在代码中进行设置,可以根据屏幕的宽高比例,对不同的手机屏幕尺寸进行适配。原生广告也需要注意不要遮挡到游戏的主要内容,或者与玩家交互的操作 ,如,UI按钮、滑动操作区域等。
原生广告需要提供加载、显示和关闭的方法。
插屏广告:
又叫全屏广告。插屏广告弹出时会占满整个屏幕,不需要设置屏幕尺寸。插屏广告一般只是弹出播放,不会像激励视频广告那样在广告视频播放完成时要给与奖励,在弹出插屏广告时要禁用游戏中的音乐,在插屏广告的关闭回调方法中要将游戏中的音乐启用,否则游戏里的声音和广告的声音会重叠到一起。
插屏广告需要提供加载和显示的方法,不需要提供关闭的方法,它有自己的关闭按钮。
激励视频广告:
该广告会占满整个屏幕,不需要设置屏幕尺寸。激励视频广告要在广告视频播放完成时通过回调方法给与奖励。还需要在弹出激励视频广告时禁用游戏中的音乐,在激励视频广告的关闭回调方法中要将游戏中的音乐启用,否则游戏里的声音和广告的声音会重叠到一起。
激励视频广告需要提供加载和显示的方法,不需要提供关闭的方法,它有自己的关闭按钮。
所有广告,特别是插屏广告和激励视频广告,有些广告平台的回调方法运行在Unity的子线程,如果碰到这种情况,并且用的是Unity Sdk,可以网上搜索一个叫Loom的插件,它就只有一个类,用这个插件可以让回调方法中的代码运行在Unity的主线程。如果用的是Android Sdk或者iOS Sdk也有回调方法没有运行在主线程的情况,要根据各自手机平台寻找让回调方法里的代码运行在主线程的方法。
打包:
不论是打Android包,还是iOS包,包名都必须与广告平台上填写的包名一致。有些包名有特殊的格式要求,如,小米广告的包名要以.mi结尾。
如果从一个unity项目中将mainTemplate文件迁移至另一个unity项目中,需要检查mainTemplate文件,这个文件里面有可能会自动添加一些代码导致导出的Android工程无法正常运行。
目前能写的就这么多,后续如果有发现漏掉的会及时更新。