FCM 404“未找到请求的实体”错误代码:“未注册”

时间:2018-08-21 15:17:20

标签: firebase firebase-cloud-messaging

我在项目中使用WebPush,并且在大多数情况下效果很好。但是,有时-通常在长时间的使用后-用户会收到以下JSON响应的404错误:

{
  "error": {
    "code": 404,
    "message": "Requested entity was not found.",
    "status": "NOT_FOUND",
    "details": [
      {
        "@type": "type.googleapis.com/google.firebase.fcm.v1.FcmError",
        "errorCode": "UNREGISTERED"
      }
    ]
  }
}

似乎正在发生的事是令牌即将到期。函数onTokenRefresh()在很多场合都被引用,但是很少有关于如何实现的文档,当然也没有关于如何测试的文档。一些用户报告说清除缓存将强制刷新令牌。对我来说不是这种情况。

这个问题我已经有将近6个月了,并定期检查以查看文档是否有所改进,但是没有明确的解决方案。

任何测试的解决方案将不胜感激。我确信还有其他人在使用文档不足的WebPush通知,并且存在类似问题。

1 个答案:

答案 0 :(得分:0)

onTokenRefresh()(现已弃用。使用onNewToken(String s)实现FirebaseMessagingService,检查其他答案FirebaseInstanceIdService is deprecated)是在每次安装的应用程序获得新令牌时调用的,无论原因(例如,如果用户转到“应用程序” android配置菜单选项,选择您的应用程序并按“清除数据”,但这只是原因之一)。

您必须使用此方法来调用后端并更新存储先前令牌的位置,以使后端不再使用该令牌,因为它已过期就不再向其发送任何消息(从而抛出该令牌)。 NOT_FOUND / UNREGISTERED错误)。

请不要忘记按照文档中的说明在AndroidManifest.xml中添加以下内容:

  

在清单中包括以下内容:

<service android:name=".YourFirebaseMessagingService">
    <intent-filter>
        <action android:name="com.google.firebase.MESSAGING_EVENT" />
   </intent-filter>
     

FirebaseMessagingService的文档:

https://firebase.google.com/docs/reference/android/com/google/firebase/messaging/FirebaseMessagingService