android – 如何检测令牌是否已过期或未在应用服务器上注册firebase FCM通知?

我使用以下代码将FCM通知从服务器发送到设备:

    String fcmServerKey = externalConfig.getFcmServerKey();
            CloseableHttpClient httpclient = HttpClients.createDefault();
            HttpPost httpPost = new HttpPost(HTTPS_FCM_GOOGLEAPIS_COM_FCM_SEND);

            httpPost.setEntity(new StringEntity(message, ContentType.create("application/json")));
            httpPost.setHeader("Authorization", "key=" + fcmServerKey);

CloseableHttpResponse closeableHttpResponse= httpclient.execute(httpPost);

在上面的代码中,当我得到响应对象closeableHttpResponse时,如何检测用于发送此请求的fcm令牌是否已过期或未注册?

从firebase应用程序仪表板尝试使用其fcm令牌向设备发送通知时,从设备中删除应用程序后,我看到在firebase仪表板上失败,将光标悬停在Failed上我看到未注册的注册令牌.

如何从api响应对象closeableHttpResponse中检测未注册的注册令牌的上述错误情况?

最佳答案 使用 Server Reference API获取有关设备注册令牌的相关信息.如果响应为空,则表示令牌已过期或未注册.

示例GET请求

https://iid.googleapis.com/iid/info/nKctODamlM4:...clJONHoA?details=true
Authorization:key=AIzaSyZ-1u...0GBYzPu7Udno5aA

示例结果

HTTP 200 OK
  {
    "application":"com.iid.example",
    "authorizedEntity":"123456782354",
    "platform":"Android",
    "attestStatus":"ROOTED",
    "appSigner":"1a2bc3d4e5",
    "connectionType":"WIFI",
    "connectDate":"2015-05-12
    "rel":{
        "topics":{
          "topicname1":{"addDate":"2015-07-30"},
          "topicname2":{"addDate":"2015-07-30"},
          "topicname3":{"addDate":"2015-07-30"},
          "topicname4":{"addDate":"2015-07-30"}
                  }
           }   
  }
点赞