对GCM服务器的HTTP Post请求始终返回“NotRegistered”

时间:2015-09-02 04:39:17

标签: node.js google-cloud-messaging

 var options = 
    { 
        method: 'POST',
        uri: 'https://android.googleapis.com/gcm/send',
        headers: {
            'Content-Type': 'application/json',
            'Authorization':'key=VALUE'
        },
        body: JSON.stringify({
        "to" : gcmId,
        "data" : {
            message: message
        },
        })
    }
    request(options, function (error, response, body) {
        if(error) console.log(error);
        console.log("RESPONSE STATUS: " + response.statusCode)
        console.log("BODY: " + body);
        });

我将注册ID(gcmId)放在正确的位置吗?我好像总是收到:

{"multicast_id":9098772304322316557,"success":0,"failure":1,"canonical_ids":0,"results":[{"error":"NotRegistered"}]}

开始认为这是一个后端问题。

2 个答案:

答案 0 :(得分:0)

-2,147,483,648 to 2,147,483,647

答案 1 :(得分:0)

引用official docs ...

  

如果是NotRegistered,您应该从服务器数据库中删除注册ID,因为该应用程序是从设备中卸载的,或者客户端应用程序未配置为接收消息。

这恰当地回答了你的问题。

此处GCM中的all possible error code列表再次显示以下 NotRegistered错误

  

现有的注册令牌可能在许多情况下停止有效,包括:

  • 如果客户端应用程序取消注册GCM。 如果客户端应用程序自动取消注册,则可能会在用户卸载应用程序时发生。例如,在iOS上,如果APNS反馈服务将APNS令牌报告为无效。
  • 如果注册令牌过期(例如,Google可能决定刷新注册令牌,或者iOS设备的APNS令牌已过期)。
  • 如果客户端应用程序已更新,但新版本未配置为接收消息。 对于所有这些情况,请从应用服务器中删除此注册令牌,然后停止使用它来发送消息。