Android 将在GCMinentService类中调用OnUnregistered()方法时

Android 将在GCMinentService类中调用OnUnregistered()方法时,android,android-intent,android-c2dm,google-cloud-messaging,Android,Android Intent,Android C2dm,Google Cloud Messaging,我已经成功地在我的android应用程序中实现了推送通知的GCM框架。但是我对谷歌在gcminentservice类中覆盖的功能有点困惑 @Override protected void onUnregistered(Context context, String registrationId) { //Do whatever you want } 何时调用此方法?使用从GCM服务器注销后,将调用此方法 如文件中所述: 在注销设备后调用 您还应该查看文档,因为它描述了设备注销的两种方式:手动

我已经成功地在我的android应用程序中实现了推送通知的
GCM
框架。但是我对谷歌在
gcminentservice
类中覆盖的功能有点困惑

@Override
protected void onUnregistered(Context context, String registrationId) {

//Do whatever you want
}


何时调用此方法?

使用从GCM服务器注销后,将调用此方法

如文件中所述:

在注销设备后调用


您还应该查看文档,因为它描述了设备注销的两种方式:手动和自动。

来自官方java文档:

要从GCM注销,请执行以下操作:

类似于注册 请求时,异步发送此意图,响应如下 a com.google.android.c2dm.intent.REGISTRATION intent

一个用例可能是调用服务器上的web服务,以便它可以从其已注册设备列表中删除该设备

onUnregistered(Context context, String regId):
从GCM注销设备后调用。通常,您应该将regid发送到服务器,以便服务器注销设备。 发现您可以在即将卸载应用程序之前取消注册。不知道,但希望如此,这是唯一的方法

在即将卸载应用程序之前调用活动,请使用以下意图筛选器添加活动::
取消对该设备的注册。希望一定有更好的方法来解决这些问题。

我从Android开发者网站上得到了我所期望的解决方案。实际上,根据谷歌在开发者网站上的描述,在卸载应用程序时,应该自动调用该功能。但是,这个过程不会立即发生,因为Android不提供卸载回调。请检查下面提到的链接:


感谢大家的支持。

要从GCM注销android设备,请在代码中要注销的位置添加此行

GCMRegistrar.unregister(this);

我明白你的意思,对此我已经有了一个想法,但我的问题是什么时候执行这件事。是在卸载应用程序时,还是在应用程序自动脱离网络时??哦,很抱歉错过了这一点。。。您是否尝试从GCM服务中注销。根据doc,当设备从GCM服务注销时,应该调用它,以便可以向第三方服务器通知未注册的ID。卸载时不会调用它,它是从GCM服务器注销时触发的回调。何时可以从GCM服务器注销。从GCM取消注册的必要性是什么。@pyus13请参阅上面我的回答。您可以随时从GCM服务器注销。您可能希望给用户一个pref来执行此操作,或者您可以根据任何其他条件执行此操作。从GCM注销将意味着停止接收消息。如果您检查文档,这在技术上是不正确的。在这种情况下不会调用该函数,因为应用程序将被卸载,因此无法触发回调。应用程序将从GCM注销是,但是你询问的回叫将不会被调用。@selsine请浏览我曾经共享的链接,谷歌也说了同样的事情,他们将要这样做,但到目前为止,它还没有发生,这就是为什么我感到困惑。否决答案的人能告诉我为什么它被否决,以便我可以改进我的答案吗这个答案是关于何时调用onUnregistered()回调方法的问题。当应用程序使用unregister()方法从GCM注销时,将调用该方法。但这不会发生在卸载应用程序时,如果这有意义的话。@selsine实际上我已经知道了,因为名称本身说明了这一点,但我认为当应用程序被安装时,这会自动调用,我已经在函数中写了一个日志,但是loag没有出现,所以我很困惑。。但是谢谢你的帮助。但是到目前为止,我认为自动功能不会工作,因为android没有提供卸载回调。我说得对吗?会的,但只有在你发送多条消息之后。由于没有卸载回调,GCM仅在尝试向其发送消息时才知道您的应用程序已被卸载。然后,当您的服务器尝试发送另一条消息时,GCM会让您的服务器知道应用程序已从该设备上卸载。你的服务器会处理它。在这种情况下,不调用未注册的回调。
 <activity
    android:name=".UninstallIntentActivity"
    android:label="@string/app_name" >

    <intent-filter>
        <action android:name="android.intent.action.VIEW" />
        <action android:name="android.intent.action.DELETE" />
        <category android:name="android.intent.category.DEFAULT" />
        <data android:scheme="package" android:pathPattern="com.testpack.yourapp" />
    </intent-filter>



</activity>
 onUnregistered(Context context, String regId):
GCMRegistrar.unregister(this);