在新的 Google Cloud Messaging 上取消注册

Posted

技术标签:

【中文标题】在新的 Google Cloud Messaging 上取消注册【英文标题】:Unregister on new Google Cloud Messaging 【发布时间】:2013-07-18 11:42:58 【问题描述】:

我正在使用新的谷歌云消息传递

(GoogleCloudMessaging gcm =
           GoogleCloudMessaging.getInstance (context);)

我正在遵循这个例子,它非常好并且完美地工作:

https://github.com/commonsguy/cw-omnibus/tree/master/Push/GCMClient2

通过这个示例,我可以在 GCM 中注册,但我尝试取消注册失败。

在文档中表明您应该使用以下意图:

com.google.android.c2dm.intent.UNREGISTER

并按如下方式使用:

    

 Intent unregIntent = new Intent ("com.google.android.c2dm.intent.UNREGISTER");
     unregIntent.putExtra ("app", PendingIntent.getBroadcast (this, 0, new Intent (), 0));
     StartService (unregIntent);

不工作...

正如我所说,注册工作正常,但不知道如何取消注册。

我必须做的不仅仅是意图吗?我做错了什么?

感谢您的帮助

感谢和问候

【问题讨论】:

非常好的教程tech-papers.org/… 【参考方案1】:

如果您使用新的GoogleCloudMessaging 类,则不需要使用com.google.android.c2dm.intent.UNREGISTER 意图。只需使用GoogleCloudMessaging.unregister()。

public void unregister()

注销应用程序。调用 unregister() 会停止来自服务器的任何消息。这是一个阻塞调用——你不应该从 UI 线程调用它。您应该很少(如果有的话)需要调用此方法。它不仅在资源方面很昂贵,而且会使您的注册 ID 无效,而您的注册 ID 永远不应进行不必要的更改。更好的方法是让您的服务器停止发送消息。仅当您希望您的应用程序永久停止使用 GCM,或者您有令人信服的理由回收您的注册 ID 时,才使用取消注册。 投掷 如果我们无法连接到服务器以取消注册,则会出现 IOException。

【讨论】:

我可以在应用未安装时调用它吗?如果是怎么办? @Fahim 不,卸载应用时无法运行逻辑。 @Fahim 卸载应用时无需注销设备。 GCM 为您自己做,正如这个 SO 答案中提到的 - ***.com/a/28057615/3913366 。【参考方案2】:

取消注册最多可能需要 5 分钟才能传播。

https://developer.android.com/google/gcm/adv.html#unreg-why

【讨论】:

虽然此链接可能会回答已发布的问题,但您最好包含其中的一些摘录,可能包含一些代码 sn-ps,因为该页面将来可能无法使用。 欢迎来到未来。【参考方案3】:

旧方式(已弃用):

公共同步无效unregister()

新方式(替代使用):

InstanceID.deleteToken();

InstanceID.deleteInstanceID();

注销应用程序。调用 unregister() 停止任何消息 从服务器。这是一个阻塞调用——你不应该从 用户界面线程。您应该很少(如果有的话)需要调用此方法。 它不仅在资源方面很昂贵,而且它使所有 您从 register() 或 subscribe() 返回的注册 ID。这 不应不必要地进行。更好的方法是简单地拥有 您的服务器停止发送消息。

【讨论】:

以上是关于在新的 Google Cloud Messaging 上取消注册的主要内容,如果未能解决你的问题,请参考以下文章

在新的 Google 地图中嵌入参数

如何在新的 Google 表格中将持续时间格式化为 HH:mm

如何在新的 Google Play Console 中管理 Instant App?

如何在新的 Google Play 控制台中停用所有旧版本的 APK?

Chrome_01_点击 Google搜索结果在新的页面打开

使用新的 Google Cloud 日志记录 jar 时,日志未显示在 Google Cloud Platform Stackdriver 中