【问题标题】:Firebase success but no notification receivedFirebase 成功但未收到通知
【发布时间】:2017-09-15 00:06:51
【问题描述】:

所以我开始运行我的应用程序并且通知工作正常。但过了一会儿,它就停止了。

我尝试通过 Firebase 控制台发送并返回成功,但应用程序未收到任何通知。应用程序在后台运行,它运行得更早,应用程序或服务器端都没有更改任何代码。

如果我重新安装应用程序(获取新令牌),通知将恢复正常(按预期工作),但如果令牌过期,Firebase 控制台不应该返回错误(注册令牌错误或其他东西)吗?

而且我使用该应用程序才几天,那么为什么令牌会过期(文档说令牌将在 6 个月后过期)? 而且我知道每次用户运行我的应用程序时实际上强制刷新令牌是一种不好的方法。

那我做错了吗?因为如果我调试我的应用程序一切正常。得到令牌,得到通知。

是的,通过 FCM 控制台和服务器发送通知会产生相同的结果;成功,但没有通知。

onTokenRefresh 代码如下所示:

  namespace FCMClient
{
    [Service]
    [IntentFilter(new[] { "com.google.firebase.INSTANCE_ID_EVENT" })]
    public class MyFirebaseIIDService : FirebaseInstanceIdService
    {
        const string TAG = "MyFirebaseIIDService";
        public override void OnTokenRefresh()
        {
            var refreshedToken = FirebaseInstanceId.Instance.Token;
            Log.Debug(TAG, "Refreshed token: " + refreshedToken);
            SendRegistrationToServer(refreshedToken);
        }
        void SendRegistrationToServer(string token)
        {
            //a post request to my server 

        }
    }
}

感谢您的任何见解。

【问题讨论】:

  • 嗨苏莱曼。如果没有看到任何代码 sn-ps(可能在onTokenRefresh() 或至少一个示例有效负载中)就很难确定任何东西。另外,您能否指出您在文档中看到“文档所说令牌的位置” 6 个月后到期”?
  • 我的 onTokenrefresh 和这里的完全一样:developer.xamarin.com/guides/android/application_fundamentals/… 以及我在某处看到的文档......我会再查一下。上
  • OnTokenRefresh 很少被调用:它用于在以下情况下更新令牌: 安装或卸载应用程序时。当用户删除应用数据时。当应用程序删除实例 ID 时。当令牌的安全性受到损害时。根据 Google 的实例 ID 文档,FCM 实例 ID 服务将请求应用定期(通常每 6 个月)刷新其令牌。这是根据:developer.xamarin.com/guides/android/application_fundamentals/…
  • 我非常了解这种行为。我要建议的是仔细检查您是否真的将刷新的令牌发送到您的应用服务器?我看到了 //a post request to my server 评论,但你能在服务器端收到它吗?
  • 是的 @AL 我能够获得令牌。并且该通知已多次使用该令牌。然后在客户端或服务器中没有任何代码更改它停止工作。即使我通过firebase控制台直接使用令牌,我也无法收到任何通知。 (我无法确定确切的时间,firebase 控制台返回成功但没有通知)。但如果我清除应用数据(获取新令牌),它将再次工作,我可以再次收到通知。

标签: android firebase xamarin firebase-cloud-messaging


【解决方案1】:

这总是发生在我身上,这是一种错误或其他东西,我每次都必须清理和重建,这不会在发布时发生,您可以删除 firebase 实例并在每次运行应用程序时获取新令牌正在调试。

你可以在创建时写下这个

Task.Run(() => {  
var instanceid = FirebaseInstanceId.Instance;  
instanceid.DeleteInstanceId();  
Log.Debug("TAG", "{0} {1}", instanceid.Token, instanceid.GetToken(this.GetString(Resource.String.gcm_defaultSenderId), Firebase.Messaging.FirebaseMessaging.InstanceIdScope)); });

【讨论】:

    【解决方案2】:

    在 Firebase 控制台中添加调试指纹似乎可以解决问题。

    【讨论】:

      猜你喜欢
      • 2019-05-15
      • 2020-04-25
      • 2020-10-11
      • 1970-01-01
      • 2023-03-09
      • 2019-12-06
      • 2021-11-20
      • 1970-01-01
      • 2020-02-17
      相关资源
      最近更新 更多