0
public class GCMIntentService extends GCMBaseIntentService {

    NotificationManager mNotificationManager;
    Context cc;

    @Override
    protected void onRegistered(Context context, String regId) {
        Intent intent = new Intent(Constants1.ACTION_ON_REGISTERED);
        intent.putExtra(Constants1.FIELD_REGISTRATION_ID, regId);
        context.sendBroadcast(intent);
    }

    @Override
    protected void onUnregistered(Context context, String regId) {
        Log.i(Constants1.TAG, "onUnregistered: " + regId);
        AlertDialog.Builder alert = new AlertDialog.Builder(
                getApplicationContext());

        alert.show();

    }

    @Override
    protected void onMessage(Context context, Intent intent) {

        /**
         * You can get the Extras from TaxMann server
         * 
         * Bundle _bundle = intent.getExtras();
         */

        String msg = intent.getStringExtra("payload");
        mNotificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
        BackgroundAlert bg = new BackgroundAlert(mNotificationManager, msg);
        bg.onReceive(getApplicationContext(), intent);
    }

    @Override
    protected void onError(Context context, String errorId) {

    }
}

这是我的 gcm 代码,当我向所有注册设备 ID 发送通知时,我的数据库中有大约 15000 个注册设备 ID 用于通知,然后它显示 10000 个成功和 6000 个不成功。我想从我们的数据库中删除所有 6000 个注册设备 ID,以便它需要收到通知的时间更少。

4

2 回答 2

1

你不需要在 android 代码中做任何事情。GCM 足够聪明来处理它。因此,一旦我们的应用程序被卸载,GCM 将负责从 GCM 中删除该注册 ID。但是,我们必须从我们的服务器数据库中删除该注册 ID,一旦我们从 GCM 获得“未注册”的响应,我们必须从我们的数据库中删除该特定注册 ID。

以下是事件的顺序。

  1. 最终用户卸载应用程序。
  2. 第 3 方服务器向 GCM 服务器发送消息。
  3. GCM 服务器将消息发送到设备。
  4. GCM 客户端收到消息并询问包管理器是否有配置接收它的广播接收器,返回 false。
  5. GCM 客户端通知 GCM 服务器应用程序已卸载。
  6. GCM 服务器将注册 ID 标记为删除。
  7. 第 3 方服务器向 GCM 发送消息。
  8. GCM 向第 3 方服务器返回 NotRegistered 错误消息。一旦我们收到来自 GCM 的此类响应,我们必须从数据库中删除该特定注册 ID。
于 2014-12-29T12:44:55.947 回答
0

按照该链接可能会为您使用完整

Google Cloud Messaging 注册 ID 过期

于 2013-10-21T07:53:31.200 回答