我正在阅读这里的文档:http://developer.android.com/google/gcm/gs.html
请参阅此方法:
private String getRegistrationId(Context context) {
final SharedPreferences prefs = getGCMPreferences(context);
String registrationId = prefs.getString(PROPERTY_REG_ID, "");
if (registrationId.length() == 0) {
Log.v(TAG, "Registration not found.");
return "";
}
// check if app was updated; if so, it must clear registration id to
// avoid a race condition if GCM sends a message
int registeredVersion = prefs.getInt(PROPERTY_APP_VERSION, Integer.MIN_VALUE);
int currentVersion = getAppVersion(context);
if (registeredVersion != currentVersion || isRegistrationExpired()) {
Log.v(TAG, "App version changed or registration expired.");
return "";
}
return registrationId;
}
如果SharedPreferences
中没有保存ID,或者应用版本已更改或注册已过期,则返回空字符串。
在所有这三种情况下,调用方法registerBackground()
。
此方法向我的Web服务器发出HTTP请求,服务器将注册ID存储在数据库中。
但如果发生这种情况,每次版本更新或注册过期都会在我的服务器上的TABLE中创建一个新行。
当客户端发生注册ID更改事件时,有没有办法获得?因为如果发生这种情况,我将更新表中的行。
答案 0 :(得分:1)
您可以稍微更改代码以达到您想要的效果。
当存储在共享首选项中的旧注册ID到期时,将其存储在某处。然后,在从Google获取新的注册ID后,将旧的和新的ID发送到您的服务器,并更新数据库而不是创建新行。
答案 1 :(得分:0)
如果注册id为null,则给出nullPointerException。因为你想要获得长度。
if (registrationId==null) {
Log.v(TAG, "Registration not found.");
return "";
}
else
{
// try to do
}
}