我正在看GCM,我不确定在应用程序更新的情况下我们需要做什么。医生说:
“当应用程序更新时,它应该使其现有的注册ID无效,因为它不能保证与新版本一起使用。因为在更新应用程序时没有调用生命周期方法,所以实现此验证的最佳方法当存储注册ID时,存储当前的应用程序版本。然后当应用程序启动时,将存储的值与当前的应用程序版本进行比较。如果它们不匹配,则使存储的数据无效并再次开始注册过程。“< / p>
那应该是什么样子?类似的东西:
public class MyActivity extends Activity {
@Override
public void onCreate(...) {
if (we are a new app version) {
// calling register() force-starts the process of getting a new
// gcm token?
GCMRegistrar.register(context, SENDER_ID);
saveLastVersionUpdateCodeToDisk();
}
}
所以我们需要确保自己再次调用GCMRegistrar.register(),以防我们成为新的应用版本?
由于
答案 0 :(得分:1)
是的,您应该再次致电GCMRegistrar.register,并在广播接收器中确保使用新ID更新您的服务器。
答案 1 :(得分:1)
这个问题相当陈旧,但这是我在帮助程序类源代码中为GCMRegistrar.getRegistrationId(Context context)
找到的代码。
简短回答:GCM代码会检查应用是否已更新。只要您调用此方法并调用此方法的返回值为空白,就不必担心它。
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;
}
答案 2 :(得分:0)
关于官方文件&#39;例如,应检查是否在当前应用版本中创建了注册ID。如果app已在旧版本中注册,则必须再次注册。
http://developer.android.com/google/gcm/client.html
请注意,如果更新了应用,则注册ID将返回为空,因此将再次注册应用:
if (checkPlayServices()) {
gcm = GoogleCloudMessaging.getInstance(this);
regid = getRegistrationId(context);
if (regid.isEmpty()) {
registerInBackground();
}
} else {
Log.i(TAG, "No valid Google Play Services APK found.");
}
private String getRegistrationId(Context context) {
final SharedPreferences prefs = getGCMPreferences(context);
String registrationId = prefs.getString(PROPERTY_REG_ID, "");
if (registrationId.isEmpty()) {
Log.i(TAG, "Registration not found.");
return "";
}
// Check if app was updated; if so, it must clear the registration ID
// since the existing regID is not guaranteed to work with the new
// app version.
int registeredVersion = prefs.getInt(PROPERTY_APP_VERSION, Integer.MIN_VALUE);
int currentVersion = getAppVersion(context);
if (registeredVersion != currentVersion) {
Log.i(TAG, "App version changed.");
return "";
}
return registrationId;
}