【问题标题】:Firebase realtime DB events not triggered in APK, but are in editorFirebase 实时数据库事件未在 APK 中触发,但在编辑器中
【发布时间】:2017-03-13 08:24:44
【问题描述】:

我已经构建了一个需要监听数据库对象更新的 Unity 游戏。当我在 Unity 编辑器中运行游戏时,会触发实时 DB 更改事件,并且游戏会做出相应反应。但是,当我发布到我的 Android 设备时,这些事件似乎没有被注册。

当我检查 Unity 日志时,我看到的错误是:

InitializationException:Firebase 模块未能初始化:invites(缺少依赖项)、messaging(缺少依赖项)、remote_config(缺少依赖项)

虽然我显然已经导入了这些包。

有什么想法吗?

firebaseReference.GetValueAsync().ContinueWith(task => {
        if (task.IsFaulted) {
            // Handle the error...
            print ("failed watchers");
        }
        else if (task.IsCompleted) {
            DataSnapshot snapshot = task.Result;
            // Do something with snapshot...
            print ("set watchers");
        }
    });

    firebaseReference.ChildChanged += HandleChildChanged;

【问题讨论】:

  • 我在消息传递(我正在使用的唯一一个)中遇到相同的错误,但仅在我在三星设备中运行时才会发生;在 2 摩托罗拉、2 LG 和编辑器上,问题不会发生。我怀疑这与 Google Play 服务(或某种)有关。

标签: android unity3d firebase firebase-realtime-database


【解决方案1】:

此错误与 Google 服务有关;你有两个解决方案(我将只发布与消息相关的,这是我唯一使用的一个):
1) 检查依赖关系,使用 Firebase 插件,并向用户显示一条消息(插件为您完成)。
2) 尝试注册 Firebase 消息服务,捕获任何错误并静默失败(如果是这种情况);

这是解决方案 1 的代码:
PushNotificationManager.cs

using UnityEngine;
using Firebase;

public class PushNotificationManager : MonoBehaviour {
    DependencyStatus dependencyStatus = DependencyStatus.UnavailableOther;

    public void Start()
    {
        dependencyStatus = FirebaseApp.CheckDependencies();
        if (dependencyStatus != DependencyStatus.Available)
        {
            FirebaseApp.FixDependenciesAsync().ContinueWith(task =>
            {
                dependencyStatus = FirebaseApp.CheckDependencies();
                if (dependencyStatus == DependencyStatus.Available)
                {
                    InitializeFirebase();
                }
                else
                {
                    Debug.LogError("Could not resolve all Firebase dependencies: " + dependencyStatus);
                }
            });
        }
        else
        {
            InitializeFirebase();
        }    
    }


    protected void InitializeFirebase()
    {
        Firebase.Messaging.FirebaseMessaging.TokenReceived += OnTokenReceived;
        Firebase.Messaging.FirebaseMessaging.MessageReceived += OnMessageReceived;
    }
    public void OnTokenReceived(object sender, Firebase.Messaging.TokenReceivedEventArgs token)
    {
        Debug.Log(token.Token);
    }

    public void OnMessageReceived(object sender, Firebase.Messaging.MessageReceivedEventArgs e)
    {
        //Debug.Log("Received a new message from: " + e.Message.From + " / " + e.Message.Data.ToString());
    }
}

这是解决方案 2 的代码:
PushNotificationManager.cs

    using UnityEngine;
    using System;

    public class PushNotificationManager : MonoBehaviour {
        public void Start()
        {
            InitializeFirebase();
        }


        protected void InitializeFirebase()
        {
           try
           {
              Firebase.Messaging.FirebaseMessaging.TokenReceived += OnTokenReceived;
              Firebase.Messaging.FirebaseMessaging.MessageReceived += OnMessageReceived;
           }
           catch(Exception e)
           {
               Debug.LogError("Erro no Firebase: "+e);


           }
        }
 //   (...)
}

注意: 据我所知,到目前为止还没有解决方案,所以这只是为了防止您的应用程序崩溃。 更多信息在这里:Bugs reported [Firebase-Unity]

【讨论】:

    猜你喜欢
    • 2021-01-28
    • 1970-01-01
    • 2018-04-27
    • 2021-09-27
    • 1970-01-01
    • 2018-08-06
    • 2020-08-24
    • 2018-08-09
    • 1970-01-01
    相关资源
    最近更新 更多