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 通知结果=[错误=未注册]的主要内容,如果未能解决你的问题,请参考以下文章