1

GCMを調べていますが、アプリケーションの更新の場合に何をする必要があるのか​​わかりません。ドキュメントによると:

「アプリケーションが更新されると、新しいバージョンでの動作が保証されないため、既存の登録IDを無効にする必要があります。アプリケーションの更新時に呼び出されるライフサイクルメソッドがないため、この検証を実現する最善の方法は、保存することです。登録IDが保存されているときの現在のアプリケーションバージョン。次に、アプリケーションの起動時に、保存されている値を現在のアプリケーションバージョンと比較します。一致しない場合は、保存されているデータを無効にして、登録プロセスを再開します。」

それで、それはどのように見えるべきですか?何かのようなもの:

public class MyActivity extends Activity {

    @Override
    public void onCreate(...) {
        if (we are a new app version) {
            // calling register() force-starts the process of getting a new 
            // gcm token?
            GCMRegistrar.register(context, SENDER_ID);

            saveLastVersionUpdateCodeToDisk();
        }
    }

したがって、新しいアプリバージョンの場合に備えて、GCMRegistrar.register()を自分で再度呼び出す必要がありますか?

ありがとう

4

3 に答える 3

1

はい、GCMRegistrar.registerを再度呼び出す必要があります。また、ブロードキャストレシーバーで、サーバーを新しいIDで更新してください。

于 2012-07-09T19:08:40.583 に答える
1

この質問はかなり古いものですが、これはGCMRegistrar.getRegistrationId(Context context)ヘルパークラスのソースコードで見つけたコードです。

簡単な答え:GCMコードは、アプリが更新されているかどうかを確認します。このメソッドを呼び出し、このメソッドの戻り値が空白の場合はGCMに登録するための呼び出しを行う限り、心配する必要はありません。

public static String getRegistrationId(Context context) {
    final SharedPreferences prefs = getGCMPreferences(context);
    String registrationId = prefs.getString(PROPERTY_REG_ID, "");
    // check if app was updated; if so, it must clear registration id to
    // avoid a race condition if GCM sends a message
    int oldVersion = prefs.getInt(PROPERTY_APP_VERSION, Integer.MIN_VALUE);
    int newVersion = getAppVersion(context);
    if (oldVersion != Integer.MIN_VALUE && oldVersion != newVersion) {
        Log.v(TAG, "App version changed from " + oldVersion + " to " +
                newVersion + "; resetting registration id");
        clearRegistrationId(context);
        registrationId = "";
    }
    return registrationId;
}
于 2013-04-05T16:17:05.260 に答える
0

公式文書の例については、登録IDが現在のアプリバージョンで作成されているかどうかを確認する必要があります。アプリが古いバージョンで登録されている場合は、再度登録する必要があります。

http://developer.android.com/google/gcm/client.html

アプリが更新されると、登録IDが空として返されるため、アプリは再度登録されることに注意してください。

if (checkPlayServices()) {
    gcm = GoogleCloudMessaging.getInstance(this);
    regid = getRegistrationId(context);

    if (regid.isEmpty()) {
        registerInBackground();
    }
} else {
    Log.i(TAG, "No valid Google Play Services APK found.");
}

private String getRegistrationId(Context context) {
    final SharedPreferences prefs = getGCMPreferences(context);
    String registrationId = prefs.getString(PROPERTY_REG_ID, "");
    if (registrationId.isEmpty()) {
        Log.i(TAG, "Registration not found.");
        return "";
    }
    // Check if app was updated; if so, it must clear the registration ID
    // since the existing regID is not guaranteed to work with the new
    // app version.
    int registeredVersion = prefs.getInt(PROPERTY_APP_VERSION, Integer.MIN_VALUE);
    int currentVersion = getAppVersion(context);
    if (registeredVersion != currentVersion) {
        Log.i(TAG, "App version changed.");
        return "";
    }
    return registrationId;
}
于 2014-05-22T17:26:49.347 に答える