我正在尝试使用新的googlecloudmessaging api实现gcm。
我想检查设备是否已在云上注册,这是以前使用gcmregistar.is registered()检查过的。
我有没有办法用新的api来完成这个检查?
编辑:我知道我可以将注册ID保存在我的应用程序中,但我想知道我的设备在云上的状态—它是否已注册。
最佳答案
不推荐使用的GCMRegistrar
只是一个helper客户机类,它将registrationid本地存储在设备上。GCMRegistrar.isRegistered()
从未调用gcm服务器来查找设备是否已注册(因为没有这样的api)。它只是检查以前接收到的注册ID是否本地存储在特定应用程序的设备上(并在某些情况下(如应用程序版本更改时)使存储的注册ID无效)。
实际上,您可以看到gcmregistarhere的代码:
/**
* 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/