【史上最全】Facebook Instant Game 小游戏广告接入指南
文档更新记录
- 2021.1.28
1. 文档
-
Facebook 小游戏 SDK
https://developers.facebook.com/docs/games/instant-games/sdk -
目前的最新版本 6.3
https://developers.facebook.com/docs/games/instant-games/sdk/fbinstant6.3 -
广告变现指南
https://developers.facebook.com/docs/games/instant-games/guides/ads-monetization
2. 重要提示
重要提示1
Facebook官方开发文档中的代码有坑,仅作为功能参考和测试,不要直接用在实际项目中。
重要提示2
Facebook官方开发文档中的代码有坑,仅作为功能参考和测试,不要直接用在实际项目中。
重要提示3
Facebook官方开发文档中的代码有坑,仅作为功能参考和测试,不要直接用在实际项目中。
3. Facebook 广告实例(AdInstance)
Facebook 广告分为
- 插屏广告 InterstitialAd
- 激励视频广告 RewardedVideo
在使用Facebook的广告之前,需要先获取广告实例(AdInstance)。不同广告类型获取广告实例的接口不同。
- 插屏广告 getInterstitialAdAsync
- 激励视频 getRewardedVideoAsync
加载和播放广告的接口是一样的,都是对AdInstance的操作。
- 加载 loadAsync
- 播放 showAsync
3.1. Facebook 广告的业务流程
Facebook广告的典型业务流程分为以下几个步骤
- 1). 初始
- 2). 获取广告实例
- 3). 加载广告
- 4). 播放广告
- 5). 结束
3.2. 广告实例AdInstance 的生命状态
一个广告实例的生命状态可以分为:
- 1). 无效(初始为null或者undefined)
- 2). 有效未加载
- 3). 有效加载中
- 4). 有效已加载
- 5). 有效播放中
特别提示
- 1). 注意处理**“有效加载中”**的状态,广告预加载的过程会比较慢,容易出现这种中间状态,这时候既不要重新获取实例(可能出现实例过多),也不要再次加载(可能会提示加载中,或者频繁请求)。
- 2). 注意处理**“有效播放中”**,在播放过程中的广告,不要进行其他操作。
- 3). 已经播放过的广告实例,无论结果如何,都应舍弃,重新获取新的实例。
4. 常见错误
4.0. 网络与VPN问题
如果VPN 太慢,容易出现各种奇怪的问题,例如相同的游戏,有的人可以播放广告,有的人不能播放。
所以,出现这类问题请先尝试使用一个稳定的VPN。
特别是免费VPN,由于使用的人太多,容易出问题。
4.1. 广告类型错误
Facebook 广告分为插屏广告(InterstitialAd) 和 激励视频广告(RewardedVideo),每种广告都有一组相应的API,如果广告ID与广告接口不匹配,会提示相应错误。
接口参考
- FBInstant.getInterstitialAdAsync
- FBInstant.getRewardedVideoAsync
4.2. 获取广告实例时,错误 CLIENT_UNSUPPORTED_OPERATION
- 解释
客户端不支持这个操作 - 原因
有的电脑浏览器不支持广告功能。 - 解决方法
1). 提前检查是否支持该操作(FBInstant.getSupportedAPIs())。
2). 忽略该错误。
4.3. 获取广告实例时,错误 ADS_TOO_MANY_INSTANCES
- 解释
太多的广告实例。 - 原因
每种类型的广告(插页institential或者激励视频rewarded video)各只能保存3个广告实例AdInstance。 - 解决方法
1). 对于已经成功获取的广告实例AdInstance 预加载失败以后,可以继续重新加载,不需要重新获取。
2). 如果加载成功,未进行播放的话,不要直接丢弃。
3). 注意处理“有效未加载”的状态,广告预加载的过程会比较慢,容易出现这种状态,这时候不要立即重新获取新实例。
4.4. 加载插屏广告时,错误 ADS_NO_FILL,详情 Instant Game does not pass Minimum Performance Standards
"code":"ADS_NO_FILL",
"message":"Instant Game does not pass Minimum Performance Standards."
-
解释
该游戏未通过Facebook月活考核标准。 -
原因
只有通过Facebook的月活考核标准的游戏,才能正常使用插屏广告。 -
解决方法
1). 对于新游戏或者未达标游戏,这个错误是正常的,一般可以忽略。
2). 如果已经达标,需要跟Facebook申诉。 -
月活考核标准
目前的月活考核标准(MAP)是,游戏在
- 1). 过去28天中
- 2). 至少3000名玩家
- 3). 游戏时长超过30分钟。
在小游戏后台可以查看当前的MAP值:Instant Games -> Launch Status -> Monthly Active Players
4.5. 加载广告时,错误 ADS_NO_FILL,详情 No fill
-
解释
广告未填充,无法从Facebook获取广告。 -
原因
1). 广告版位没有审核通过,此时需要添加测试设备id才可以进行测试,建议先审核广告。
2). 广告版位审核通过,但是游戏未上线,填充率会比较低,如果没有其他错误,这是正常情况。
3). 广告版位审核通过,而且已经上线,则需要到后台查看填充率的原因,检查因为违反了Facebook的广告政策被限制。
4). 客户端网络问题,可能被限制广告获取。 -
解决方法
1). 在广告后台检查广告是否已经审核通过,或者添加测试设备id。
2). 检查客户端VPN,尽量不要用免费VPN,或者蓝灯之类服务器经常更换的VPN
3). 广告版位审核通过,而且已经上线,如果后台查看整体的填充率比较低,可查看填充率详情,检查是否因为违反了Facebook的广告政策被限制。
4). 特别的,对于未上线游戏,如果其他设备能正常使用广告功能,可以暂时忽略该错误,等上线后再观察。
4.6. 加载广告时,错误 ADS_FREQUENT_LOAD
- 解释
广告加载太频繁 - 原因
预加载的频率太高 - 解决方法
不要过于频繁加载广告。
注意 是否正确处理了广告实例**“有效加载中”**的状态。(参考3.2. 广告实例状态)
4.7. 播放广告时,错误 Invalid Ad Instance
- 解释
错误的广告实例 - 原因
广告实例一旦进行了播放操作(show),无论结果如何,都已经失效,不能再次操作(load或者show)。 - 解决方法
应该舍弃已经播放过的广告实例,(设置为null或者undefined),然后重新获取新实例。 - 参考代码
5. 其他事项
5.1. 一些开发与调试建议
-
1). 尽量使用TypeScript,
如果可以,优先用TypeScript的await/async语法,用try/catch来捕获错误。
其次选择promise的then/catch。 -
2). 尽量多打日志,监控广告的生命周期
-
3). 如果开发人员的电脑始终无法加载或者播放广告,可以找运营人员配合调试,请提供带调试控制台的版本(vConsole)
- 1). cocos游戏可以直接输出带vConsole的测试版本
- 2). 其他引擎可以参考 https://github.com/Tencent/vConsole/blob/dev/doc/tutorial_CN.md
5.2. 激励视频广告需要二次确认
Facebook广告要求为激励视频广告添加二次确认,请在播放广告之前,设置对话框确认。
5.3. 使用稳定的VPN网络
最后
祝大家都赚钱~
有小游戏要发行到海外,赚美元,欢迎关注公众号,联系我。
扫一扫关注微信公众号:耿直的IT男阿斌
聊一聊IT男眼中的世界