Внутреннее обновление приложения: clientVersionStalenessDays() возвращает null при тестировании с внутренним совместным использованием приложения
Библиотеки:
implementation 'com.google.android.play:core:1.7.3'
implementation 'com.google.android.play:core-ktx:1.7.0'
Дополнительная информация:
Все остальное, что касается обновлений приложений и внутреннего совместного использования приложений, у меня работает, я получаю диалоговое окно с упомянутым обновлением, если я не использую условие для daysAvailable в моих состояниях if.
1.) Я внедряю обновления приложений в соответствии с документацией, найденной здесь.
// Returns an intent object that you use to check for an update.
val appUpdateInfoTask = appUpdateManager.appUpdateInfo
// Checks whether the platform allows the specified type of update,
// and checks the update priority.
appUpdateInfoTask.addOnSuccessListener { appUpdateInfo ->
val daysAvailable = appUpdateInfo.clientVersionStalenessDays() ?: 0
Toast.makeText(this, "Update availbable for $daysAvailable days", Toast.LENGTH_LONG).show()
if (appUpdateInfo.updateAvailability() == UpdateAvailability.UPDATE_AVAILABLE
&& daysAvailable >= DAYS_FOR_FLEXIBLE_UPDATE
&& appUpdateInfo.isUpdateTypeAllowed(AppUpdateType.FLEXIBLE)) {
startUpdate(appUpdateInfo, appUpdateManager, AppUpdateType.FLEXIBLE, REQUEST_CODE_UPDATE_FLEXIBLE)
} else if (appUpdateInfo.updateAvailability() == UpdateAvailability.UPDATE_AVAILABLE
&& daysAvailable > DAYS_FOR_IMMEDIATE_UPDATE
&& appUpdateInfo.isUpdateTypeAllowed(AppUpdateType.IMMEDIATE)) {
startUpdate(appUpdateInfo, appUpdateManager, AppUpdateType.IMMEDIATE, REQUEST_CODE_UPDATE_IMMEDIATE)
}
}
Чтобы попробовать это в Google Play, я использую внутренний метод совместного использования приложений. Итак, у меня на самом деле есть 3 версии приложения, загруженные во внутренний общий доступ к приложениям. Итак, я нажимаю на первый apk с номером версии v200, затем нажимаю ссылку для версии 201, но, согласно руководству, я не нажимаю установить. Я жду 1 или 2 дня, ноappUpdateInfo.clientVersionStalenessDays()
по-прежнему возвращает null, даже через пару дней с тех пор, как я щелкнул ссылку apk второй версии (v201). Мой первый вопрос: почему этот метод всегда возвращает мне значение null, даже если он знает, что доступно более новое обновление?
2.) Мой второй вопрос касаетсяappUpdateInfo.clientVersionStalenessDays()
сам. Допустим, сегодня понедельник, и у пользователя установлена версия 200, а мы выпускаем версию 201, и она доступна для него во вторник. Теоретически в четвергappUpdateInfo.clientVersionStalenessDays()
должен вернуть 2 (как в течение 2 дней для этого пользователя доступно обновление). Но он все равно не решил обновляться. А затем в пятницу мы выпускаем версию 202, и она будет доступна ему в субботу. Что должен вернуть в воскресенье метод? 1 или 5? ** Итак, мой второй вопрос: сбрасывается ли этот счетчик метода, когда пользователю доступна более новая версия, сбрасывается ли он, когда мы выпускаем версию v202? (будет ли этот метод проверять, сколько времени ему доступна версия 202, или просто обновится вообще?).
Дайте мне знать, если мне нужно предоставить дополнительную информацию о моих проблемах.
2 ответа
На вопросы до сих пор нет ответов, поэтому я задаюсь вопросом о поведенииappUpdateInfo.clientVersionStalenessDays()
метод. Кроме того, я нашел более простой способ провести некоторое тестирование. На первый взгляд мне не понравился внутренний метод совместного использования приложений, поэтому я попытался найти лучший метод. Я просто уменьшил код версии своего приложения, чтобы он был меньше, чем тот, который доступен в Play Market, и установил его в эмулятор. Но таким образом я получил эту ошибку:
Приложение не принадлежит ни одному пользователю на этом устройстве. Приложение считается «принадлежащим», если оно было приобретено из Play.
Это означает, что исходное приложение не было установлено из Google Play Market. Итак, следующее, что я делаю, я удаляю существующее приложение, захожу в Play Market и устанавливаю текущее. После этого я снова пытаюсь собрать и установить тестовое приложение из Android Studio. Но версия этой сборки меньше, она уже установлена с Play Market, поэтому AS просит меня удалить существующую версию, чтобы установить текущую сборку. После того, как я согласился, у меня не возникает ошибок при полученииappUpdateInfo
иclientVersionStalenessDays()
наконец, возвращает не ноль, а число - ноль (хотя это может занять некоторое время, возможно, даже перезапустить эмулятор). Сейчас этот метод возвращает 0, поэтому я ожидаю увидеть, увеличится ли он со временем возвращаемое значение на тестовом устройстве.
Он не работает во внутреннем совместном использовании приложений и возвращает ноль. Вы можете проверить версию сборки, и если версия сборки равна отладке, используйте издевательское значение.