1

我想让用户切换以选择是否要在他们的设备上接收通知,我可以使用网络服务调用从我的服务器中删除 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>
4

1 回答 1

5

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

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

您不必通知 GCM 服务器。因为您的服务器不会再向此手机发送任何内容。如果用户仍然得到,那是你的服务器错误。

后来,如果用户决定再次接收。只需再次将 gcm id 通知给您的推送服务器。


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

1) 通过发出注销 Intent 从 gcm 注销您的应用程序。请参阅此URL的第一部分。

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


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

于 2013-04-02T08:38:30.690 回答