You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 05:34:25