Как я могу проверить обновления в приложении в Android?

Недавно Google ввел "обновления в приложении" в Google I/O 2019.

Поэтому я пытаюсь использовать это.

val appUpdateManager = AppUpdateManagerFactory.create(this)
val appUpdateInfo = appUpdateManager.appUpdateInfo
appUpdateInfo.addOnCompleteListener {
    val result = it.result
    if (result.updateAvailability() == UpdateAvailability.UPDATE_AVAILABLE
            && result.isUpdateTypeAllowed(AppUpdateType.FLEXIBLE)) {

        info("should show update")
        appUpdateManager.startUpdateFlowForResult(
                        result,
                        AppUpdateType.FLEXIBLE,
                        this,
                        1)
    } else {
        info("This is already latest version: ${result.updateAvailability()}")
    }
}

Но "result.updateAvailability()" всегда является "UpdateAvailability.UPDATE_NOT_AVAILABLE".

Для этого я сделал apk с подписанным выпуском с кодом предыдущей версии. Но это не работает......

Согласно демоверсии на Keynote для разработчиков (16:40 ~)

Он делает это с помощью эмулятора. Похоже на режим отладки.

Как я могу сделать то же самое?

14 ответов

Тестирование с использованием внутреннего общего доступа к приложениям

Правильный способ протестировать обновление в приложении - использовать внутренний общий доступ к приложениям (не путать с внутренним тестированием).

  1. Сначала настройте свой внутренний общий доступ к приложениям с помощью этих инструкций. В отличие от Internal Testing Track, Internal App Sharing делает приложение доступным немедленно. Так что времени на ожидание нет.
  2. Подпишитесь на подписку приложений в Google Play. Это позволит Google Play подписывать apk, созданный для устройства из предоставленного вами пакета приложений. Подробности здесь.
  3. Создайте свой комплект приложений. Через командную строку это просто./gradlew bundleRelease или ./gradlew bundle<variant>.
  4. Перейдите на https://play.google.com/apps/publish/internalappsharing/ и загрузите созданныйaab файл, который находится в app/build/outputs/bundle/<variant>/. Дайте достойное имя, включающее код версии.
  5. Это предоставит ссылку для копирования. Используйте его для установки этого пакета на свое устройство.
  6. Увеличьте код версии в своем приложении build.gradleи создайте еще один пакет. Примечание: код версии - целое число, это значение должно увеличиваться. Название версии другое, и это не имеет значения.
  7. Точно так же загрузите этот новый пакет во внутренний общий доступ к приложениям. Назовите его кодом версии.
  8. Это предоставит еще одну ссылку. Откройте ссылку, откроется Google Play, и вы должны увидеть опцию "Обновить". Не нажимайте "Обновить"!
  9. Откройте свое приложение, и теперь вы должны увидеть запрос на обновление в приложении.

Если вы не видите приглашение и точно выполнили эти шаги, скорее всего, в вашем коде есть проблема. Добавьте журналирование, чтобы увидеть, что происходит в вашем коде.

В нашем тестировании следующее НЕ помогло протестировать обновления в приложении (которые предлагались в другом месте):

  • Повторная загрузка того же пакета /apk без увеличения кода версии
  • Уменьшение кода версии, чтобы он был ниже опубликованной версии

Тестирование с использованием Alpha (закрытый трек)

После успешного тестирования с помощью внутреннего совместного использования приложений я все же обнаружил некоторые проблемы с тестированием обновления в приложении через опубликованные версии. После некоторых испытаний я смог успешно протестировать через Альфа-трек. Я добавляю шаги здесь (я предполагаю, что вы знакомы с закрытым треком Alpha консоли Google Play и добавляете себя в список альфа-тестеров):

  1. Установите текущую версию приложения через Google Play. Это может быть рабочая версия, альфа- или бета-версия. В этой версии уже должна быть реализована функция обновления в приложении, так как ожидается, что в этой версии будет отображаться запрос на обновление в приложении.
  2. Убедитесь, что автоматическое обновление отключено только для вашего приложения. Вы можете сделать это через пункт меню на странице вашего приложения в Google Play. Мы отключаем автоматическое обновление, потому что мы действительно хотим обновлять приложение через обновление в приложении, а не Google Play, обновляющий приложение, когда ваше устройство заряжается.
  3. Опубликуйте новую версию (с увеличенным кодом версии, изменение названия версии не имеет значения) на альфа-трек.
  4. В настоящее время опубликованная версия появится в Google Play через некоторое время. Возможно, вам придется подождать несколько часов.
  5. Как только он появится в магазине Google Play, вы можете попробовать открыть свое приложение. Вам повезет, если появится запрос на обновление в приложении. Скорее всего, не будет. Обновление в приложении может не отображаться, даже если вы продолжали ждать еще несколько часов и продолжали перезапускать приложение. Выполнив оставшиеся шаги, мне не пришлось ждать.
  6. Полностью закройте ваше приложение.
  7. Полностью закройте приложение Google Play.
  8. Очистите кеш приложения Google Play. Я обнаружил, что очищать не нужно, только кеш.
  9. Откройте Google Play и перейдите в Мои приложения и игры на панели навигации.
  10. Теперь Google Play будет искать обновления. Должно появиться обновление вашего приложения. Конечно, НЕ обновляйте здесь.
  11. Откройте ваше приложение. Должен появиться запрос на обновление в приложении. Если нет, протестируйте внутреннее обновление приложения с помощью внутреннего совместного доступа к приложению (шаги в предыдущем разделе) и убедитесь, что с вашей реализацией нет проблем.

Думаю, аналогичный процесс должен работать и для бета-версий (открытый трек), и для производственных треков.

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

Это слишком поздно, но это может помочь другим разработчикам.

На сегодняшний день тестирование обновлений в приложении невозможно для отладочной сборки. Вам также не нужно помещать apk в PlayStore для тестирования. Лучший способ проверить - использовать.

Если вы выполните следующие шаги один за другим, вы сможете успешно протестировать.

  1. Чтобы протестировать приложение, тестировщик должен сначала включить общий доступ к внутреннему приложению в PlayStore, перейдите по этой ссылке, чтобы узнать, как включить общий доступ к внутреннему приложению для Android?
  2. Если вы достаточно смелы, чтобы понимать официальные документы, просто перейдите по этой ссылке, чтобы настроить in-app-updateтестирование на вашем устройстве, https://developer.android.com/guide/playcore/in-app-updates#internal-app-sharing

Здесь я напишу то же самое легкими словами.

Как только вы закончите настройку internal-app-sharing в Play-Store, убедитесь, что вам нужно загрузить 2 файла apks для внутреннего совместного использования приложений на Play-Consoleи, следовательно, сгенерируйте 2 ссылки. Оба apks будут подписаны с использованием одного и того же signing-key (не обязательно должен быть таким же, как тот, который вы используете для подписи в производственной среде, подойдет любой фиктивный ключ для подписи).

  1. Сначала вы загружаете apk с реализацией обновления в приложении с более низким VersionCode (скажем, 100) во внутренний общий доступ к приложению на игровой консоли.

Чтобы узнать, как загрузить apk для внутреннего совместного использования приложений на Play-Console, следуйте этому списку, https://support.google.com/googleplay/android-developer/answer/9844679?visit_id=637437125318137239-1277036129&amp;amp;rd=1

ПРИМЕЧАНИЕ: убедитесь, что вы удалили все предустановленные приложения с тем же именем пакета на вашем устройстве.

  1. Теперь вы копируете ссылку на приложение, которое вы загрузили, во внутренний доступ к приложению на игровой консоли и используете эту ссылку, чтобы установить приложение на свое устройство.

ПРИМЕЧАНИЕ. Перед установкой убедитесь, что адрес электронной почты, который вы используете в магазине воспроизведения, был добавлен в список рассылки при совместном использовании внутреннего приложения на игровой консоли.

  1. Теперь, когда вы установили приложение по ссылке. Теперь вам нужно снова создать новый подписанный apk с более высоким VersionCode (скажем, 101). И загрузите этот apk для внутреннего доступа к приложениям.

  2. Теперь скопируйте ссылку с более высоким VersionCode из внутреннего общего доступа к приложению. Нажмите на эту ссылку на своем устройстве, и вы перейдете в игровой магазин, но на этот раз update кнопка будет включена, а не install кнопку, поскольку приложение уже установлено на вашем устройстве с более низким VersionCode.

  3. Вам не нужно нажимать кнопку обновления в PlayStore. Вам просто нужно щелкнуть ссылку и, следовательно, открыть экран в PlayStore. Теперь закройте приложение PlayStore.

  4. Теперь вы можете запустить уже установленное приложение со своего устройства.

Если ваша реализация in-app-update в порядке, при запуске приложения появится диалоговое окно PlayStore для обновления.

Наконец, не забудьте проголосовать, если это вам хоть как-то поможет. Продолжайте кодировать!

Взгляните на документацию FakeAppUpdateManager

или попробуйте ниже предопределенный метод, который поможет вам проверить наличие обновлений приложения или нет.

FakeAppUpdateManager fakeAppUpdateManager = new FakeAppUpdateManager(this);
        fakeAppUpdateManager.setUpdateAvailable(1); // add app version code greater than current version.
        fakeAppUpdateManager.getAppUpdateInfo().addOnSuccessListener(new OnSuccessListener<AppUpdateInfo>() {
            @Override
            public void onSuccess(AppUpdateInfo appUpdateInfo) {
                if (appUpdateInfo.updateAvailability() == UpdateAvailability.UPDATE_AVAILABLE
                        && appUpdateInfo.isUpdateTypeAllowed(AppUpdateType.FLEXIBLE)) {
                    System.out.println("checkForAppUpdateAvailability");
                }
            }
        });

В качестве альтернативы вы можете использовать этот класс в качестве теста UNIT для моделирования обновлений в приложении.

FakeAppUpdateManager

У этого есть несколько предопределенных методов.

В моем случае я сделал следующие шаги:

  1. Удалите оригинальное приложение с устройства.
  2. Установите приложение из Google Play Store (у меня уже было мое приложение в магазине, но если у вас его нет, вы можете создать альфа- или бета-версию, не публиковать ее в магазине).
  3. Удалите приложение еще раз.
  4. Создайте подписанный apk с новой функцией с более низким кодом версии, чем версия Google Play
  5. Установите этот apk.

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

Я точно не знаю, каково это...

  1. Создайте подписанный пакет приложений с более низкой версией и загрузите его во внутренний общий доступ к приложениям с игровой консоли.
  2. Установите приложение на свое устройство по сгенерированной ссылке.
  3. Снова сгенерируйте пакет приложений с более высоким кодом версии и номером версии, чем предыдущий
  4. Загрузите его во внутренний общий доступ к приложению
  5. Откройте созданную ссылку, но не обновляйте приложение из магазина воспроизведения.
  6. Снова откройте старое приложение.
  7. Теперь вы будете в приложении, чтобы увидеть всплывающее окно с обновлением в вашем более старом установленном приложении.

ПРИМЕЧАНИЕ. Приложение, установленное с внутренним общим доступом, не может быть обновлено до действующего приложения, даже если его версия выше.

Я использую эту библиотеку обновлений в приложении для простоты.

Хм... Я нашел решение. Это не то же самое, что демонстрация на Google I/O 2019 - Developer Keynotes.

Я опубликовал подписанный релиз apk во внутренней версии для разработчиков. И это прекрасно работает.

Или вы можете опубликовать его в "Альфа / Бета тесте публикации".

Дорожки внутреннего тестирования в консоли Google Play - отличный инструмент для тестирования обновлений в приложении.

Не знаю, разобрались ли вы к этому времени, но после некоторого времени тестирования я понял, что уменьшение versionName это то, что мне нужно было сделать, чтобы проверить его должным образом, прежде чем я тестировал только уменьшение versionCode... Я думаю, что API должен уметь обрабатывать каждый раз, когда versionName или versionCode устарели, но, видимо, это не так.

Вы можете использовать FakeAppUpdateManager следующим образом:

      val appUpdateManager : AppUpdateManager
    if (BuildConfig.DEBUG) {
      appUpdateManager = FakeAppUpdateManager(baseContext)
      appUpdateManager.setUpdateAvailable(2)
    } else {
      appUpdateManager = AppUpdateManagerFactory.create(baseContext)
    }

При этом вы будете использовать AppUpdateManager из Play Store при запуске приложения и FakeAppUpdateManager при локальном тестировании.

Число 2 в setUpdateAvailable соответствует коду версии приложения. Это может быть любое число, если оно выше, чем код вашей версии, определенный в build.gradle.

Теперь, чтобы имитировать немедленное обновление:

      val fakeAppUpdate = manager as FakeAppUpdateManager
  if (fakeAppUpdate.isImmediateFlowVisible) {
    fakeAppUpdate.userAcceptsUpdate()
    fakeAppUpdate.downloadStarts()
    fakeAppUpdate.downloadCompletes()
    launchRestartDialog(manager)
  }

1. Удалите оригинальное приложение с устройства.

2. Установите приложение из Google Play Store (у меня уже было мое приложение в магазине, но если у вас его нет, вы можете выполнить поиск в любом приложении, скопировать имя пакета и добавить в свое тестовое приложение имя пакета, оба они одинаковы ).

3. Снова удалите приложение.

4. Перейдите в свой градиент и установите более низкий код версии, например 1.

5. синхронизация

6. Установить.

7.Теперь вы перейдете в приложение, чтобы увидеть всплывающее окно с обновлением в вашем более старом установленном приложении.

Я сделал следующие шаги для тестирования

-Установите оригинальное приложение из Google Play Store. просмотрите приложение и удалите его.

-Создать подписанное приложение с более низким кодом версии (новое функциональное приложение), чем в магазине Google Play.

-установите подписанное приложение. это запросит обновление приложения.

-Эти шаги сработали для меня.

Для меня последний шаг раздела "Устранение неполадок" в документации заставил его работать!

Как правило, после изменения версии приложения (название версии и код) сделайте следующее:

Убедитесь, что учетная запись соответствует требованиям и что кеш Google Play обновлен. Для этого, войдя в учетную запись Google Play Store на тестовом устройстве, выполните следующие действия:
Убедитесь, что вы полностью закрыли приложение Google Play Store.
Откройте приложение Google Play Store и перейдите на вкладку "Мои приложения и игры".
Если тестируемое приложение не отображается с доступным обновлением, убедитесь, что вы правильно настроили тестовые треки.

  1. Удалите оригинальное приложение с вашего устройства
  2. Загрузите это же приложение из игрового магазина.
  3. Уменьшить код версии в файле Gradle
  4. синхронизировать и установить
  5. Теперь вы проверите, работает код или нет.
Другие вопросы по тегам