2

我在这里阅读文档: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;
}

当应用程序中没有保存 idSharedPreferences或版本更改或注册过期时,它返回空字符串。

在所有这三种情况下,registerBackground()都会调用一个方法。此方法向我的 Web 服务器发出 HTTP 请求,服务器将注册 ID 存储在数据库中。

但如果发生这种情况,每次版本更新或注册到期都会在我的服务器上的 TABLE 内创建一个新行。

有没有办法在客户端发生注册ID更改事件时获得?因为如果发生这种情况,我将更新 TABLE 中的行。

4

2 回答 2

1

您可以稍微更改代码以实现您想要的。

当共享首选项中存储的旧注册 ID 过期时,将其存储在某个地方。然后,在从 Google 获取新的注册 ID 后,将旧 ID 和新 ID 发送到您的服务器,并更新数据库而不是创建新行。

于 2013-06-09T10:19:53.923 回答
0

如果注册 id 为 null,它会给出 nullPointerException。因为你想获得长度。.

if (registrationId==null) {
        Log.v(TAG, "Registration not found.");
        return "";
    }
else
{
  // try to do 
}
}
于 2013-06-09T07:30:58.337 回答