处理GCM客户端中的注册ID更改

时间:2013-06-09 07:15:26

标签: android push-notification google-cloud-messaging

我正在阅读这里的文档: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更改事件时,有没有办法获得?因为如果发生这种情况,我将更新表中的行。

2 个答案:

答案 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 
}
}