我正在尝试使用新的 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.register
或 GoogleCloudMessaging.unregister
。
关于android - 对应新GCM中的GCMRegistrar.isRegistered(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20492268/