我按照Google GcmClient应用中给出的步骤生成了存储在我的SharedPrefs中的registrationId。 这样,只有在更改appVersion时才会重新生成register-id。
此reg-id发送到我的服务器(基于Rails),通知通过GCM gem(https://github.com/spacialdb/gcm)发送到Android设备。
问题:有时服务器会收到“未注册”的响应,尽管相同的register-id在失败前几分钟就已经工作了。
当发生这种情况时,我试图“清除数据”,新生成的reg-id与上一个不同... 注册ID是否可能在未更新应用程序的情况下过期(当然我不会取消注册)?
我阅读了有关类似问题的帖子并对其进行了搜索,但仍无法确定所有这些问题的常见原因。 当我从GoogleStore(生产中)下载应用程序而不更新应用程序时,也出现了这个问题。
注册到GCM的主要方法:
public static void register(Context context, IGcmRegisterationListener listener) {
try {
MyLog.v("GcmClient: Registering for GCM...");
Context appContext = context.getApplicationContext();
// Check device for Play Services APK. If check succeeds, proceed with
// GCM registration.
if (checkPlayServices(appContext)) {
MyLog.v("GcmClient: Looking for GCM regId locally");
String currentRegId = getRegistrationIdFromPrefs(appContext);
if (currentRegId == null) {
MyLog.v("GcmClient: GCM regId not found.");
registerInBackground(appContext, listener);
}
else {
MyLog.v("GcmClient: GCM regId found: " + currentRegId);
listener.onGcmRegistered(context, currentRegId);
}
} else {
MyLog.i("GcmClient: No valid Google Play Services APK found.");
listener.onGcmRegistrationFailed();
}
} catch (Exception ex) {
MyLog.i("GcmClient: GCM registration failed: " + Log.getStackTraceString(ex));
listener.onGcmRegistrationFailed();
}
}