首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GCM令牌验证

GCM令牌验证
EN

Stack Overflow用户
提问于 2013-09-25 05:50:31
回答 2查看 5.8K关注 0票数 4

我在验证GCM令牌时有点困惑。我使用Sencha框架在跨平台应用程序中工作,我的服务器端使用Java。我有一个关于如何验证注册ID (GCM令牌)的查询?是否有特定的API来验证GCM令牌?你能指导我如何在客户端或服务器端处理这个问题吗?我已经在服务器端完成了注册部分,用户可以在数据库中注册他们的GCM令牌。现在我需要验证这个注册令牌。

每两周注销一次应用程序是一种好方法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-10-01 09:45:21

用canonicalID 链接解决GCM验证问题的解决方案

代码语言:javascript
复制
 private void asyncSend(List<String> partialDevices) {
    // make a copy
    final List<String> devices = new ArrayList<String>(partialDevices);
    threadPool.execute(new Runnable() {

      public void run() {
        Message message = new Message.Builder().build();
        MulticastResult multicastResult;
        try {
          multicastResult = sender.send(message, devices, 5);
        } catch (IOException e) {
          logger.log(Level.SEVERE, "Error posting messages", e);
          return;
        }
        List<Result> results = multicastResult.getResults();
        // analyze the results
        for (int i = 0; i < devices.size(); i++) {
          String regId = devices.get(i);
          Result result = results.get(i);
          String messageId = result.getMessageId();
          if (messageId != null) {
            logger.fine("Succesfully sent message to device: " + regId +
                "; messageId = " + messageId);
            String canonicalRegId = result.getCanonicalRegistrationId();
            if (canonicalRegId != null) {
              // same device has more than on registration id: update it
              logger.info("canonicalRegId " + canonicalRegId);
              Datastore.updateRegistration(regId, canonicalRegId);
            }
          } else {
            String error = result.getErrorCodeName();
            if (error.equals(Constants.ERROR_NOT_REGISTERED)) {
              // application has been removed from device - unregister it
              logger.info("Unregistered device: " + regId);
              Datastore.unregister(regId);
            } else {
              logger.severe("Error sending message to " + regId + ": " + error);
            }
          }
        }
      }});
  }
票数 1
EN

Stack Overflow用户

发布于 2013-09-25 14:14:29

您在客户端从GCM注册到GCM并取消注册。这就是你从谷歌那里获得注册ID的地方。

一旦您有了注册ID,您应该认为它是有效的,直到:

  1. 您向Google发送带有注册ID的消息,并得到一个NotRegistered或InvalidRegistration错误。在这些情况下,您应该从DB中删除注册ID。
  2. 您向Google的GCM发送一条带有注册ID的消息,并获得一个成功的响应,但是响应包含一个规范的注册ID。在这种情况下,您应该将注册ID替换为规范的注册ID。
  3. 该应用程序从GCM显式取消注册,并通知服务器,在这种情况下,您应该删除注册ID从您的DB。

我认为每两周不注册一次应用程序是没有意义的。谷歌的代码示例只在安装了新版本的应用程序后才重新注册,即使在重新注册之前,它们也不会取消注册。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18997183

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档