取消在新的Google Cloud Messaging上注册

8

我正在使用新的Google云消息传递服务。

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

不起作用...

正如我所说,注册功能正常,但不知道如何注销。

我需要做的比意图还多吗?我做错了什么?

非常感谢任何帮助。

谢谢和问候。


这里有非常好的教程:http://tech-papers.org/google-cloud-messaging-gcm-for-android-and-push-notifications-2/ - Balwinder SIngh
3个回答

16
如果您正在使用新的GoogleCloudMessaging类,则无需使用com.google.android.c2dm.intent.UNREGISTER意图。只需使用GoogleCloudMessaging.unregister()即可。

public void unregister ()

注销应用程序。调用unregister()会停止服务器发送的任何消息。这是一个阻塞调用--不应该从UI线程中调用它。您很少需要(如果有)调用此方法。它不仅在资源方面昂贵,而且会使您的注册ID失效,除非必要,否则它不应该改变。更好的方式是让您的服务器停止发送消息。只有在想永久停止使用GCM的应用程序或有充分理由重复使用您的注册ID时才使用注销。 Throws IOException 如果我们无法连接到服务器以注销。


我可以在应用程序卸载的时候调用这个吗?如果可以,怎么做? - Fahim
@Fahim 不,无法在卸载应用程序时运行逻辑。 - Eran
@Fahim 当您的应用程序被卸载时,您不需要注销设备。正如在此SO答案中提到的那样,GCM会自动为您完成- https://dev59.com/pF4c5IYBdhLWcg3wUI4N#28057615。 - Shubham A.

1

3
虽然这个链接可能回答了发布的问题,但最好包括一些摘录和代码片段,因为该页面将来可能无法访问。 - Phantômaxx
欢迎来到未来。 - Felix

0

旧方法(已弃用):

public synchronized void unregister()

新方法(请使用):

InstanceID.deleteToken();

或者

InstanceID.deleteInstanceID();

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接