【问题标题】:GCM: Android widgets. Generate token based on WidgetIDGCM:Android 小部件。根据 WidgetID 生成令牌
【发布时间】:2016-04-05 09:29:19
【问题描述】:

我是 Android 应用程序开发的新手,想知道是否有人可以帮助我解决问题。

我正在创建一个如下形式的小部件 [ 文本视图 ] [ + ] [ - ]

文本视图显示一个数字,按 + 按钮增加,按 - 按钮减少。

加号和减号按钮与我的服务器交互,该服务器发回一个显示在文本视图中的计数值。

这个小部件可以安装在多部安卓手机上,并且在任何时候计数都应该是最新的。

为了实现这一点,我集成了 Google Cloud 消息传递,以向所有注册的小部件发送带有计数值的推送通知。

当小部件安装在不同的手机上时,一切正常。

但是,如果我在同一部手机上安装两个小部件,我从 Google 收到的令牌是相同的。附上相关代码

 try {
        tokenPerWidgetId.put(appWidgetId, instanceId.getToken(getString(R.string.gcm_defaultSenderId),
             GoogleCloudMessaging.INSTANCE_ID_SCOPE, null));
        Log.v("RegisterationToken", registerToken);
      } catch (IOException ie) {
        Log.v("RegisterationToken", "Failed");
        setViewsOnError(views, " Could not register with Google.  Please re-install");
                }

我理解为什么会发生这种情况,因为根据 Google Docs,getToken 第一次从服务器获取令牌,其他时候返回令牌。

但是,如何根据 AppWidgetId 生成令牌?

【问题讨论】:

    标签: android google-cloud-messaging android-widget


    【解决方案1】:

    我没有尝试创建小部件,但使用 GCM,您必须为每个小部件拥有 2 个注册令牌。如果您能够在创建小部件时调用instanceId.getToken,并将它们分开存储,那么它看起来可以工作。

    【讨论】:

    • 您好,感谢您的回复。但是,我对实例 ID 和令牌感到困惑。看起来谷歌处理实例 ID,当小部件安装在同一台手机上时,我得到了相同的令牌。让我看看。
    • 我刚刚测试并打印了实例 ID。在同一个手机上,调用这个接口,InstanceID instanceId = InstanceID.getInstance(this);给了我相同的实例 ID,因此也给了我相同的令牌
    猜你喜欢
    • 1970-01-01
    • 2013-03-31
    • 1970-01-01
    • 1970-01-01
    • 2014-11-01
    • 1970-01-01
    • 2018-08-29
    • 2010-12-20
    • 2021-07-29
    相关资源
    最近更新 更多