Vuzix Blade设备上Firebase Unity SDK的OnTokenReceived未触发问题
解决Vuzix Blade(Android 5)Unity项目中Firebase Messaging OnTokenReceived未触发的问题
我之前在Android 5设备上遇到过类似的Firebase令牌获取失败的情况,结合你的场景,给你几个针对性的排查和解决方向:
1. 优先检查Google Play服务的版本兼容性
Android 5(API 21)对Google Play服务的版本有严格限制,最高只支持19.0.0左右的版本。你虽然安装了Google Play服务,但如果版本过高,会和Firebase SDK 5.7.0以及Android 5系统出现兼容性问题,导致令牌生成流程静默失败(无报错但回调不触发):
- 卸载当前设备上的Google Play服务,安装对应API 21的兼容版本(比如19.0.0系列)
- 重启设备后再重新测试
2. 确保回调绑定在主线程执行
你在Awake()里用ContinueWith处理依赖检查,但这个方法默认会在后台线程执行,而Firebase的回调绑定操作最好放在主线程中完成。改成ContinueWithOnMainThread试试:
private void Awake() { Firebase.FirebaseApp.CheckAndFixDependenciesAsync().ContinueWithOnMainThread( task => { var dependencyStatus = task.Result; if ( dependencyStatus == Firebase.DependencyStatus.Available ) { m_kFirebaseApp = Firebase.FirebaseApp.DefaultInstance; Firebase.Messaging.FirebaseMessaging.TokenRegistrationOnInitEnabled = true; Firebase.Messaging.FirebaseMessaging.TokenReceived += OnTokenReceived; Firebase.Messaging.FirebaseMessaging.MessageReceived += OnMessageReceived; } else { Debug.LogError(string.Format("Could not resolve all Firebase dependencies: {0}", dependencyStatus ) ); } } ); }
3. 手动触发令牌获取,排查静默失败原因
如果自动初始化的回调没触发,可以尝试主动调用令牌获取方法,同时捕获可能的异常:
// 在依赖检查通过后添加这段代码 Firebase.Messaging.FirebaseMessaging.GetTokenAsync().ContinueWithOnMainThread(task => { if (task.IsCompletedSuccessfully) { m_kToken = task.Result; Debug.Log("Manually received Registration Token: " + m_kToken); } else { Debug.LogError("Failed to get token: " + task.Exception); } });
这种方式能帮你看到是否有隐藏的异常被抛出,而自动流程中可能没输出日志。
4. 确认AndroidManifest.xml的配置完整性
虽然同一APK在OnePlus 5上正常,但Vuzix Blade作为特殊设备,可能需要确认Firebase的配置是否正确注入:
- 检查Manifest中是否包含
com.google.firebase.iid.FirebaseInstanceIdReceiver广播接收器,以及对应的C2DM权限 - Unity打包时Firebase SDK通常会自动注入这些配置,但可以手动解压APK,查看
AndroidManifest.xml确认以下内容是否存在:
<uses-permission android:name="android.permission.WAKE_LOCK" /> <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" /> <permission android:name="${applicationId}.permission.C2D_MESSAGE" android:protectionLevel="signature" /> <uses-permission android:name="${applicationId}.permission.C2D_MESSAGE" /> <receiver android:name="com.google.firebase.iid.FirebaseInstanceIdReceiver" android:exported="true" android:permission="com.google.android.c2dm.permission.SEND"> <intent-filter> <action android:name="com.google.android.c2dm.intent.RECEIVE" /> <action android:name="com.google.android.c2dm.intent.REGISTRATION" /> <category android:name="${applicationId}" /> </intent-filter> </receiver>
5. 排查设备网络和Google服务状态
Vuzix Blade作为智能眼镜,网络环境可能有特殊性:
- 确保设备能正常访问
https://fcm.googleapis.com,可以用设备自带的浏览器测试 - 确认Google Play商店已登录有效账号,并且服务能正常同步(比如尝试更新一个应用验证)
先从Google Play服务版本和主线程绑定这两个点入手,这是Android 5设备上最常见的触发原因,之后再逐步排查其他因素。
内容的提问来源于stack exchange,提问作者Hovering
相关产品推荐
相关产品推荐

