首页 > 解决方案 > FCM 404“未找到请求的实体”错误代码:“未注册”

问题描述

WebPush在我的项目中使用它,它在大多数情况下运行良好。但是,偶尔(通常在长时间使用后)用户会收到 404 错误,并带有以下 JSON 响应:

{
  "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类似问题的文档不足的通知。

标签: firebasefirebase-cloud-messaging

解决方案


onTokenRefresh()(现在已弃用。使用onNewToken(String s)implementation 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


推荐阅读