Как я могу проверить обновления в приложении в 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 ответов
Тестирование с использованием внутреннего общего доступа к приложениям
Правильный способ протестировать обновление в приложении - использовать внутренний общий доступ к приложениям (не путать с внутренним тестированием).
- Сначала настройте свой внутренний общий доступ к приложениям с помощью этих инструкций. В отличие от Internal Testing Track, Internal App Sharing делает приложение доступным немедленно. Так что времени на ожидание нет.
- Подпишитесь на подписку приложений в Google Play. Это позволит Google Play подписывать apk, созданный для устройства из предоставленного вами пакета приложений. Подробности здесь.
- Создайте свой комплект приложений. Через командную строку это просто
./gradlew bundleRelease
или./gradlew bundle<variant>
. - Перейдите на https://play.google.com/apps/publish/internalappsharing/ и загрузите созданный
aab
файл, который находится вapp/build/outputs/bundle/<variant>/
. Дайте достойное имя, включающее код версии. - Это предоставит ссылку для копирования. Используйте его для установки этого пакета на свое устройство.
- Увеличьте код версии в своем приложении
build.gradle
и создайте еще один пакет. Примечание: код версии - целое число, это значение должно увеличиваться. Название версии другое, и это не имеет значения. - Точно так же загрузите этот новый пакет во внутренний общий доступ к приложениям. Назовите его кодом версии.
- Это предоставит еще одну ссылку. Откройте ссылку, откроется Google Play, и вы должны увидеть опцию "Обновить". Не нажимайте "Обновить"!
- Откройте свое приложение, и теперь вы должны увидеть запрос на обновление в приложении.
Если вы не видите приглашение и точно выполнили эти шаги, скорее всего, в вашем коде есть проблема. Добавьте журналирование, чтобы увидеть, что происходит в вашем коде.
В нашем тестировании следующее НЕ помогло протестировать обновления в приложении (которые предлагались в другом месте):
- Повторная загрузка того же пакета /apk без увеличения кода версии
- Уменьшение кода версии, чтобы он был ниже опубликованной версии
Тестирование с использованием Alpha (закрытый трек)
После успешного тестирования с помощью внутреннего совместного использования приложений я все же обнаружил некоторые проблемы с тестированием обновления в приложении через опубликованные версии. После некоторых испытаний я смог успешно протестировать через Альфа-трек. Я добавляю шаги здесь (я предполагаю, что вы знакомы с закрытым треком Alpha консоли Google Play и добавляете себя в список альфа-тестеров):
- Установите текущую версию приложения через Google Play. Это может быть рабочая версия, альфа- или бета-версия. В этой версии уже должна быть реализована функция обновления в приложении, так как ожидается, что в этой версии будет отображаться запрос на обновление в приложении.
- Убедитесь, что автоматическое обновление отключено только для вашего приложения. Вы можете сделать это через пункт меню на странице вашего приложения в Google Play. Мы отключаем автоматическое обновление, потому что мы действительно хотим обновлять приложение через обновление в приложении, а не Google Play, обновляющий приложение, когда ваше устройство заряжается.
- Опубликуйте новую версию (с увеличенным кодом версии, изменение названия версии не имеет значения) на альфа-трек.
- В настоящее время опубликованная версия появится в Google Play через некоторое время. Возможно, вам придется подождать несколько часов.
- Как только он появится в магазине Google Play, вы можете попробовать открыть свое приложение. Вам повезет, если появится запрос на обновление в приложении. Скорее всего, не будет. Обновление в приложении может не отображаться, даже если вы продолжали ждать еще несколько часов и продолжали перезапускать приложение. Выполнив оставшиеся шаги, мне не пришлось ждать.
- Полностью закройте ваше приложение.
- Полностью закройте приложение Google Play.
- Очистите кеш приложения Google Play. Я обнаружил, что очищать не нужно, только кеш.
- Откройте Google Play и перейдите в Мои приложения и игры на панели навигации.
- Теперь Google Play будет искать обновления. Должно появиться обновление вашего приложения. Конечно, НЕ обновляйте здесь.
- Откройте ваше приложение. Должен появиться запрос на обновление в приложении. Если нет, протестируйте внутреннее обновление приложения с помощью внутреннего совместного доступа к приложению (шаги в предыдущем разделе) и убедитесь, что с вашей реализацией нет проблем.
Думаю, аналогичный процесс должен работать и для бета-версий (открытый трек), и для производственных треков.
Я думаю, что даже после того, как обновление будет доступно через Google Play, конечные пользователи увидят обновление в приложении, это может занять некоторое время (дни!). У Google Play есть свои запутанные способы. Удачи.
Это слишком поздно, но это может помочь другим разработчикам.
На сегодняшний день тестирование обновлений в приложении невозможно для отладочной сборки. Вам также не нужно помещать apk в PlayStore для тестирования. Лучший способ проверить - использовать.
Если вы выполните следующие шаги один за другим, вы сможете успешно протестировать.
- Чтобы протестировать приложение, тестировщик должен сначала включить общий доступ к внутреннему приложению в PlayStore, перейдите по этой ссылке, чтобы узнать, как включить общий доступ к внутреннему приложению для Android?
- Если вы достаточно смелы, чтобы понимать официальные документы, просто перейдите по этой ссылке, чтобы настроить
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
(не обязательно должен быть таким же, как тот, который вы используете для подписи в производственной среде, подойдет любой фиктивный ключ для подписи).
- Сначала вы загружаете apk с реализацией обновления в приложении с более низким VersionCode (скажем, 100) во внутренний общий доступ к приложению на игровой консоли.
Чтобы узнать, как загрузить apk для внутреннего совместного использования приложений на Play-Console, следуйте этому списку, https://support.google.com/googleplay/android-developer/answer/9844679?visit_id=637437125318137239-1277036129&amp;rd=1
ПРИМЕЧАНИЕ: убедитесь, что вы удалили все предустановленные приложения с тем же именем пакета на вашем устройстве.
- Теперь вы копируете ссылку на приложение, которое вы загрузили, во внутренний доступ к приложению на игровой консоли и используете эту ссылку, чтобы установить приложение на свое устройство.
ПРИМЕЧАНИЕ. Перед установкой убедитесь, что адрес электронной почты, который вы используете в магазине воспроизведения, был добавлен в список рассылки при совместном использовании внутреннего приложения на игровой консоли.
Теперь, когда вы установили приложение по ссылке. Теперь вам нужно снова создать новый подписанный apk с более высоким VersionCode (скажем, 101). И загрузите этот apk для внутреннего доступа к приложениям.
Теперь скопируйте ссылку с более высоким VersionCode из внутреннего общего доступа к приложению. Нажмите на эту ссылку на своем устройстве, и вы перейдете в игровой магазин, но на этот раз
update
кнопка будет включена, а неinstall
кнопку, поскольку приложение уже установлено на вашем устройстве с более низким VersionCode.Вам не нужно нажимать кнопку обновления в PlayStore. Вам просто нужно щелкнуть ссылку и, следовательно, открыть экран в PlayStore. Теперь закройте приложение PlayStore.
Теперь вы можете запустить уже установленное приложение со своего устройства.
Если ваша реализация 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 для моделирования обновлений в приложении.
У этого есть несколько предопределенных методов.
В моем случае я сделал следующие шаги:
- Удалите оригинальное приложение с устройства.
- Установите приложение из Google Play Store (у меня уже было мое приложение в магазине, но если у вас его нет, вы можете создать альфа- или бета-версию, не публиковать ее в магазине).
- Удалите приложение еще раз.
- Создайте подписанный apk с новой функцией с более низким кодом версии, чем версия Google Play
- Установите этот apk.
Когда он запускается, он проверяет новую версию в Google Play Store и показывает помощника для ее обновления. Если это решение работает на одном устройстве, но не работает на другом, попробуйте войти в систему с той же учетной записью Google и повторите 5 шагов на этом устройстве. Затем вы можете снова использовать свою исходную учетную запись. По какой-то безумной причине кажется, что Google Play "активирует" контроль версий и возвращает, что версия снова доступна на остальных устройствах.
Я точно не знаю, каково это...
- Создайте подписанный пакет приложений с более низкой версией и загрузите его во внутренний общий доступ к приложениям с игровой консоли.
- Установите приложение на свое устройство по сгенерированной ссылке.
- Снова сгенерируйте пакет приложений с более высоким кодом версии и номером версии, чем предыдущий
- Загрузите его во внутренний общий доступ к приложению
- Откройте созданную ссылку, но не обновляйте приложение из магазина воспроизведения.
- Снова откройте старое приложение.
- Теперь вы будете в приложении, чтобы увидеть всплывающее окно с обновлением в вашем более старом установленном приложении.
ПРИМЕЧАНИЕ. Приложение, установленное с внутренним общим доступом, не может быть обновлено до действующего приложения, даже если его версия выше.
Я использую эту библиотеку обновлений в приложении для простоты.
Хм... Я нашел решение. Это не то же самое, что демонстрация на 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 и перейдите на вкладку "Мои приложения и игры".
Если тестируемое приложение не отображается с доступным обновлением, убедитесь, что вы правильно настроили тестовые треки.
- Удалите оригинальное приложение с вашего устройства
- Загрузите это же приложение из игрового магазина.
- Уменьшить код версии в файле Gradle
- синхронизировать и установить
- Теперь вы проверите, работает код или нет.