繁体   English   中英

Firebase FCM 错误:“无效注册”

[英]Firebase FCM error: 'InvalidRegistration'

我目前正在尝试在Firebase Cloud Functions的帮助下使用FCMPushNotification发送到Device Group ,但是一旦发送通知,它会返回代码200但失败:

SUCCESS response= {
multicast_id: 8834986220110966000,
success: 0,
failure: 1,
canonical_ids: 0,
results: [ { error: 'InvalidRegistration' } ] 
}

这是我用来发送此通知的代码......我错过了什么?

const options = {
    method: 'POST',
    uri: 'https://fcm.googleapis.com/fcm/send',
    headers: {
       'Authorization': 'key=' + serverKey,
    },
    body: {
       to: groupId,
       data: {
        subject: message
       },
       notification: {
         title: title,
         body: body,
         badge: 1,
        },
       content_available: true
    },
    json: true
};

return rqstProm(options)
    .then((parsedBody) => {
        console.log('SUCCESS response=', parsedBody);
    })
    .catch((err) => {
        console.log('FAILED err=', err);
    });

其中 JSON 值title , body , subject , messageString

就我而言,我正在向主题(“ topics/my-topic ”)发送通知。 我在主题开始时缺少前置/ ,所以我遇到了同样的问题。 SO 主题应该是/topics/my-topic

可能这有帮助!!

有一种更简单的方法可以从 Cloud Function 向设备组发送消息。 使用admin.messaging().sendToDeviceGroup() 本指南中提供了示例代码和说明。

我认为您当前的方法失败了,因为groupId提供的组通知键有问题。 它应该是创建设备组时返回的字符串键值。 此表中列出了错误代码。 对于 200/InvalidRegistration,它说:

检查您传递给服务器的注册令牌的格式。 确保它与客户端应用从注册 Firebase 通知时收到的注册令牌匹配。 不要截断或添加其他字符。

这个 InvalidRegistration 错误让我失去了理智。

最终问题是我将我的设备订阅到"example" ,但将通知 json 发送to: "example"

但我们实际上需要发送到"/topics/example"

浪费了我生命中的2个小时..

注册令牌与特定的发件人组相关联。 当客户端应用程序注册 FCM 时,它必须指定允许哪些发件人发送消息。 在向客户端应用程序发送消息时,您应该使用这些发件人 ID 之一。

您需要做的就是添加一个带有您的发件人 ID 的 http 标头“project_id”。

我收到了InvalidRegistration

基本含义:您使用了错误的令牌。 为什么? 当您在onNewToken ( docs ) 中获得新的registrationToken时,可能会发生这种情况,但由于某种原因,您使用的是旧令牌。 这可能发生在:

  • 您使用的是不同的推送通知库,它记住令牌(将其存储在本地某处)并且您没有使用新令牌更新该库。

  • 您的应用程序(或其他库依赖项)实现了另一个FirebaseMessagingService ,并且它们发生冲突。 当向 FirebaseMessaging Android 库提供新令牌时,只有一个服务可以接受(响应)它发送的操作。 您可以通过在 Android Studio 中打开AndroidManifest.xml并选择选项卡底部的Merged Manifest选项卡来仔细检查这一点。 您还可以在您使用的每个库中的每个服务中放置调试器。 您会看到只有一个服务的onNewToken被调用。

    当它们发生冲突时,不会得到正确的令牌,而注册的 FCM 注册令牌将是错误的。 向错误的注册发送消息,您将获得InvalidRegistration

我在发送群组消息时收到此错误。 问题是,而不是使用notification_key我用的是notification_key_name 因此,使用:

to: "<notification_key>" 

不是

to: "<notification_key_name>" 

对我来说,我从我的模型中传递一个Id而不是用户的令牌是一个错误

InvalidRegistration仅表示令牌无效或已过期。 您可以卸载该应用程序,然后重新安装并获取新令牌,然后尝试使用该令牌。 这绝对可以解决您的问题。

您可以在此处阅读更多内容。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM