Flutter使用facebook_app_events报anonymousId未初始化错误如何解决?
错误产生原因
这个错误是facebook_app_events: ^0.12.0版本的底层实现缺陷和配置缺失共同导致的:
- 插件的Kotlin代码中将
anonymousId声明为lateinit延迟初始化变量,但没有做初始化完成校验,在Facebook SDK还没完成初始化的时候调用getAnonymousId()方法,就会直接抛出未初始化异常。 - 你只配置了Facebook应用ID的meta-data项,缺少了Facebook SDK强制要求的客户端令牌配置,导致SDK初始化延迟甚至失败,
anonymousId一直没有被赋值。
修复方案
- 首先补全AndroidManifest.xml的meta-data配置,客户端令牌可以在Facebook开发者后台的应用设置-高级页面获取:
<meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/facebook_app_id" /> <!-- 新增以下配置 --> <meta-data android:name="com.facebook.sdk.ClientToken" android:value="@string/facebook_client_token" />
- 调整埋点调用逻辑,如果业务不需要使用anonymousId的返回值,直接删除
var i = await facebookAppEvents.getAnonymousId();这行代码即可,logEvent方法不需要提前获取匿名ID,不会影响埋点正常上报,调整后代码如下:
void callFBEvent() async { try { await facebookAppEvents.setAdvertiserTracking(enabled: true); await facebookAppEvents.logEvent( name: "User_Selection_Screen", parameters: { "User_Selection": "User_Selection", }); print("facebook event success User_Selection_Screen"); }catch(e){ print(e); } }
- 如果业务必须要获取anonymousId,建议把调用时机延后到应用首页渲染完成后再触发,也可以给调用增加重试逻辑,捕获到异常后延迟2秒重试,最多重试3次即可。
- 可选升级方案:将
facebook_app_events依赖升级到最新稳定版,该初始化时序问题在后续版本已经被官方修复,新版本会自动等待SDK初始化完成后再返回anonymousId,不会直接抛出异常。
内容的提问来源于stack exchange,提问作者Ankur Shinde
相关产品推荐
相关产品推荐

