/ facebook instant game

【史上最全】Facebook Instant Game 小游戏广告接入指南

文档更新记录

  • 2021.1.28

1. 文档

2. 重要提示

重要提示1

Facebook官方开发文档中的代码有坑,仅作为功能参考和测试,不要直接用在实际项目中。

重要提示2

Facebook官方开发文档中的代码有坑,仅作为功能参考和测试,不要直接用在实际项目中。

重要提示3

Facebook官方开发文档中的代码有坑,仅作为功能参考和测试,不要直接用在实际项目中。

3. Facebook 广告实例(AdInstance)

Facebook 广告分为

  • 插屏广告 InterstitialAd
  • 激励视频广告 RewardedVideo

在使用Facebook的广告之前,需要先获取广告实例(AdInstance)。不同广告类型获取广告实例的接口不同。

  • 插屏广告 getInterstitialAdAsync
  • 激励视频 getRewardedVideoAsync

加载和播放广告的接口是一样的,都是对AdInstance的操作。

  • 加载 loadAsync
  • 播放 showAsync

3.1. Facebook 广告的业务流程

fbig-adinstance-process

Facebook广告的典型业务流程分为以下几个步骤

  • 1). 初始
  • 2). 获取广告实例
  • 3). 加载广告
  • 4). 播放广告
  • 5). 结束

3.2. 广告实例AdInstance 的生命状态

fbig-adinstance-life-status

一个广告实例的生命状态可以分为:

  • 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
fbig-adinstance-map

4.5. 加载广告时,错误 ADS_NO_FILL,详情 No fill

fbig-adinstance-not-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),然后重新获取新实例。
  • 参考代码
    fbig-adinstance-show

5. 其他事项

5.1. 一些开发与调试建议

  • 1). 尽量使用TypeScript,
    如果可以,优先用TypeScript的await/async语法,用try/catch来捕获错误。
    其次选择promise的then/catch。

  • 2). 尽量多打日志,监控广告的生命周期

  • 3). 如果开发人员的电脑始终无法加载或者播放广告,可以找运营人员配合调试,请提供带调试控制台的版本(vConsole)

5.2. 激励视频广告需要二次确认

Facebook广告要求为激励视频广告添加二次确认,请在播放广告之前,设置对话框确认。

fbig-adinstance-confirm

5.3. 使用稳定的VPN网络

最后

祝大家都赚钱~

有小游戏要发行到海外,赚美元,欢迎关注公众号,联系我。