GCM 通知结果=[错误=未注册]

Posted

技术标签:

【中文标题】GCM 通知结果=[错误=未注册]【英文标题】:GCM notification results=[error=NotRegistered] 【发布时间】:2016-07-19 12:02:38 【问题描述】:

我正在使用 Node GCM。

通知在我客户的某些设备上运行良好。有些手机会出现这样的问题,即他们在一定时间后没有收到通知。

检查日志后,我在一些调用中看到了以下错误。

"multicast_id":7040074623564131000,"success":0,"failure":1,"canonical_ids":0,"results":["error":"NotRegistered"]

对于此响应或之前的任何响应,我没有得到 1 或更高的 canonical_ids。

我按照Canonical Registration ID and message ID format 中提到的步骤操作,但在响应中没有得到任何规范的 ID。

在某些手机中,GCM 工作得很好,所以我不确定如何从这里开始以及在哪里进行调试。

【问题讨论】:

检查此SO thread 关于您的错误,它可能会提供一些见解。 【参考方案1】:

NotRegistered - 是一条消息,表示没有任何 GCM 设备使用传递的 id 注册。只需检查 id。

您必须仅在设备上发送推送通知,这些设备已在 GCM 和您的应用中注册(通过开发者控制台)。

您可以使用不同的 Rest 客户端(例如 postman)对其进行测试。只需使用 json 在特殊 url 上发送您的数据。

【讨论】:

我注意到它在安装应用程序的一开始就可以工作(这是我们从 GCM 获得新令牌的时候),并且在某些设备上的某个时间点后停止工作。 您确定设备以后不会获得新令牌吗? 很遗憾没有。我没有得到 1 或更高的 canonical_ids。甚至按照***.com/questions/12808959/…中提到的步骤 正如我的导师所说:“尝试逐步调试”......只是,在这种情况下我可以给你什么建议。【参考方案2】:

如果您的设备令牌未正确注册,通常会发生这种情况,可能是由于存储长度..所以请始终使用文本而不是 varchar,如果使用 varchar,则将大小设置为 200 以上 .. .. 谢谢

【讨论】:

【参考方案3】:

我花了几天时间试图弄清楚如何解决类似的问题,当我尝试一些我认为愚蠢的事情时,它奏效了。在 android 中,生成令牌时,我将范围从“GCM”更改为“”,之后我不再收到 NotRegistered。

变化:

String token = instanceID.getToken(getString(R.string.gcm_defaultSenderId),
         GoogleCloudMessaging.INSTANCE_ID_SCOPE, null);

收件人:

String token = instanceID.getToken(getString(R.string.gcm_defaultSenderId),
         "", null);

我不知道为什么,但它对我有用。

【讨论】:

以上是关于GCM 通知结果=[错误=未注册]的主要内容,如果未能解决你的问题,请参考以下文章

gcm推送通知:先成功,后IOS未注册

推送示例android gcm,已注册设备但未收到推送通知

GCM'错误:未注册'

设备令牌已过期或应用程序未从通知中注册

卸载应用时 GCM 未取消注册设备

Android GCM“错误”:“未注册”