8

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

(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);

不工作...

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

我要做的不仅仅是意图吗?我究竟做错了什么?

我很感激任何帮助

谢谢并恭祝安康

4

3 回答 3

16

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

公共无效注销()

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

于 2013-07-18T14:28:11.120 回答
1

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

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

于 2014-06-12T10:20:39.270 回答
0

旧方式(已弃用):

公共同步无效注销()

新方式(代替使用):

InstanceID.deleteToken();

或者

InstanceID.deleteInstanceID();

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

于 2016-05-23T09:11:54.910 回答