Подтвердить что ты не робот

Почему gcm docs рекомендуют аннулировать регистрацию при обновлении приложения?

Из GCM docs:

Когда приложение обновляется, оно должно аннулировать существующее регистрационный идентификатор, так как он не гарантирует работу с новой версией. Поскольку метод жизненного цикла не вызван, когда приложение обновленный, лучший способ добиться этой валидации - это сохранить текущая версия приложения, когда сохраняется идентификатор регистрации. затем когда приложение запущено, сравните сохраненное значение с текущая версия приложения. Если они не совпадают, аннулируйте сохраненные данные и снова запустить процесс регистрации.

Когда в документах указано, что "он не гарантированно работает с новой версией", это ограничение GCM или они размышляют о потенциальных изменениях в поведении моего приложения от версии к версии?

Со стороны приложения я могу более или менее гарантировать, что последующие версии будут корректно работать в отношении GCM и любого конкретного формата сообщений, которые я придумываю. Нужно ли еще перерегистрироваться?

Если да, то какой я должен использовать для обнаружения "новой версии": код версии или имя версии? Я понимаю, что это "бесплатная форма", и разработчик приложений устанавливает их на любые значения, которые он выбирает. Итак, что, если я поставлю обновление приложения в хранилище, но не изменяю versionName или versionCode; мне нужно перерегистрироваться в GCM?

Похоже, что GCM на самом деле хочет, чтобы приложение перерегистрировалось каждый раз, когда новая установка запускается в первый раз (и каждый раз, когда она запускается до тех пор, пока регистрация не будет завершена), независимо значений в versionName и versionCode. Это точная формулировка?

4b9b3361

Ответ 1

Я не помню, где мы его читали, но мы обратили внимание, что когда устройство получает push, пока приложение не установлено, Google аннулирует идентификатор регистрации.

Это имеет смысл, если приложение действительно удалено, но если устройство было на самом деле посередине обновления, оно быстро удаляет и переустанавливает, поэтому Google может ошибочно считать, что регистрация должна быть недействительной.

Решение похоже на повторную регистрацию при первом запуске после обновления, чтобы гарантировать, что ваш идентификатор регистрации приложения активен.

Код версии - действительно свободно выбранный номер, но вы должны увеличить его на каждой новой версии, которую вы публикуете, на игру Google, поэтому вы можете проверить, изменился ли этот номер, и знать, что ваше приложение было обновлено, и вам нужно обновить регистрация.

EDIT:

Это также относится к C2DM преемнику GCM, с гораздо большим количеством документов, объясняющих это поведение и как правильно писать код.

Смотрите: http://developer.android.com/google/gcm/client.html со всеми подробностями.

В частности, этот код, где getRegistrationId возвращает пустую строку в случае изменения кода версии, заставляя клиента зарегистрироваться еще раз:

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

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

Ответ 2

Я бы использовал код версии для обнаружения обновления приложения. Код версии вынужден меняться каждый раз, когда вы отправляете новую версию в магазин Google Play, поэтому вы можете положиться на нее, чтобы определить версию приложения.