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;
}

SharedPreferencesID が保存されていない場合、アプリのバージョンが変更された場合、または登録の有効期限が切れた場合は、空の文字列を返します。

そして、これら 3 つのケースすべてで、メソッドregisterBackground()が呼び出されます。このメソッドは Web サーバーに HTTP リクエストを送信し、サーバーは登録 ID をデータベースに保存します。

ただし、これが発生すると、バージョンの更新または登録の有効期限が切れるたびに、サーバー上の TABLE 内に新しい行が作成されます。

クライアント側で登録ID変更イベントがいつ発生するかを取得する方法はありますか? これが発生した場合、 TABLE の行を更新するためです。

4

2 に答える 2

1

コードを少し変更して、目的を達成することができます。

共有設定に保存されている古い登録 ID の有効期限が切れたら、それをどこかに保存します。次に、Google から新しい登録 ID を取得した後、古い ID と新しい ID の両方をサーバーに送信し、新しい行を作成する代わりに DB を更新します。

于 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 に答える