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

Nic*_*ick 5 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"
      }
    ]
  }
}
Run Code Online (Sandbox Code Playgroud)

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

我已经有近6个月的时间遇到​​此问题,并定期检查以查看文档是否有所改进,但是尚无明确的解决方案。

任何测试的解决方案将不胜感激。我确信还有其他人在使用未记录的WebPush类似问题的通知。

gma*_*jon 3

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

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

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

在清单中包含以下内容:

<service android:name=".YourFirebaseMessagingService">
    <intent-filter>
        <action android:name="com.google.firebase.MESSAGING_EVENT" />
   </intent-filter>
Run Code Online (Sandbox Code Playgroud)

新的文档FirebaseMessagingService

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