如何直接从Google的GCM服务器取消注册用户的设备?

Ari*_*eem 1 android google-cloud-messaging

我想让用户切换以选择他们是否想要在他们的设备上接收通知,我能够使用Web服务调用从我的服务器中删除deviceID,但是设备仍然会收到通知,所以我发现deviceID仍然生活在GCM服务器上,我尝试使用GCMRegistrar.unregister(context);但它没有效果,我仍然收到通知.

有人可以帮我这个,我不知道如何关闭接收通知,还有其他方法吗?

这是我的 BroadcastReceiver

  <receiver
            android:name="com.google.android.gcm.GCMBroadcastReceiver"
            android:permission="com.google.android.c2dm.permission.SEND" >
            <intent-filter>

                <!-- Receives the actual messages. -->
                <action android:name="com.google.android.c2dm.intent.RECEIVE" />
                <!-- Receives the registration id. -->
                <action android:name="com.google.android.c2dm.intent.REGISTRATION" />

                <category android:name="com.dfdsf.fdsf" />
            </intent-filter>
        </receiver>
Run Code Online (Sandbox Code Playgroud)

Cal*_*vin 5

它可以通过以下方式轻松控制:

  1. 用户选择"我不想再收到通知"
  2. 应用程序通知您的推送服务器.
  3. 您的服务器删除数据库中的GCM ID记录.

您不必通知GCM服务器.因为你的服务器不再向这款手机发送任何东西了.如果用户仍然得到,这是您的服务器错误.

之后,如果用户决定再次收到.只需再次将gcm id告知您的推送服务器.


要在客户端阻止消息,有两种方法:

1)通过发出取消注册意图从gcm取消注册您的应用程序.请参阅此URL的第一部分.

2)每当收到推送消息时,请检查您的应用设置.如果设置为ON,则执行消息,例如显示通知.如果设置为OFF,请忽略该消息.


服务器端阻塞的优点是您可以严格控制哪些用户可以接收消息.例如,订阅到期,您将希望直接从服务器删除记录,而不是依赖客户端阻止.