android - 对应新GCM中的GCMRegistrar.isRegistered()

标签 android push-notification google-cloud-messaging

我正在尝试使用新的 GoogleCloudMessaging API 实现 GCM。

我想检查设备是否在云端注册,之前使用 GCMRegistrar.isRegistered() 检查过。

有什么方法可以使用新的 API 实现此检查吗?
编辑:我知道我可以将注册 ID 保存在我的应用中,但我想知道我的设备在云上的状态 - 无论它是否已注册。

最佳答案

已弃用的 GCMRegistrar 只是一个帮助客户端类,用于在设备本地存储 RegistrationID。 GCMRegistrar.isRegistered() 从未调用 GCM 服务器来查找设备是否已注册(因为没有此类 API)。它只是检查之前收到的 RegistrationID 是否本地存储在特定应用程序的设备上(并在某些情况下使存储的 RegistrationId 无效,例如当应用程序版本更改时)。

其实你可以看到GCMRegistrar的代码here :

/**
 * Gets the current registration id for application on GCM service.
 * <p>
 * If result is empty, the registration has failed.
 *
 * @return registration id, or empty string if the registration is not
 *         complete.
 */
public static String getRegistrationId(Context context) {
    final SharedPreferences prefs = getGCMPreferences(context);
    String registrationId = prefs.getString(PROPERTY_REG_ID, "");
    // check if app was updated; if so, it must clear registration id to
    // avoid a race condition if GCM sends a message
    int oldVersion = prefs.getInt(PROPERTY_APP_VERSION, Integer.MIN_VALUE);
    int newVersion = getAppVersion(context);
    if (oldVersion != Integer.MIN_VALUE && oldVersion != newVersion) {
        Log.v(TAG, "App version changed from " + oldVersion + " to " +
                newVersion + "; resetting registration id");
        clearRegistrationId(context);
        registrationId = "";
    }
    return registrationId;
}

/**
 * Checks whether the application was successfully registered on GCM
 * service.
 */
public static boolean isRegistered(Context context) {
    return getRegistrationId(context).length() > 0;
}

因此,如果您将注册 ID 存储在应用中,您将获得与使用 GCMRegistrar 时完全相同的功能。在客户端应用中确定设备是否已注册到 GCM 的唯一方法是调用 GoogleCloudMessaging.registerGoogleCloudMessaging.unregister

关于android - 对应新GCM中的GCMRegistrar.isRegistered(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20492268/

相关文章:

Android:以编程方式 ImageButton 的非按下状态颜色

android - 将 exoplayer 与 MediaSessionCompat 连接

java - 获取RadioButton的值

在模拟器上使用 PushPlugin 的 Android PushNotifications

android - 无法在 Android Studio 中解析符号 'GCMBroadcastReceiver'

iOS 锁定事件委托(delegate)?

android - 谷歌云消息推送通知

c# - Xamarin C# - 代码更改不会改变程序的工作

android - Firebase token 错误 TOO_MANY_REGISTRATIONS

android - 如果应用程序在某些设备中关闭,GCM 推送通知将不起作用