Как вызвать обновление, если доступна новая версия приложения (ОТ GITHUB) - PullRequest
0 голосов
/ 04 октября 2019

В моем приложении я хочу создать функцию, которая при запуске проверяла бы, доступна ли новая версия приложения. Если да, то показать предупреждение с опциями «Да / Нет».

Я уже пытался использовать библиотеку от этого парня GitHub . Я пытался сделать это через чистый GitHUB и через UpdateFrom.XML, но, похоже, ничего не работает.

У меня есть что-то вроде этого

override fun onCreate(savedInstanceState: Bundle?) {

        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_login)
        val toolbar: Toolbar = findViewById(R.id.toolbar)
        setSupportActionBar(toolbar)

        val policy: StrictMode.ThreadPolicy = StrictMode.ThreadPolicy.Builder().permitAll().build()
        StrictMode.setThreadPolicy(policy)


        val drawerLayout: DrawerLayout = findViewById(R.id.drawer_layout)
        val navView: NavigationView = findViewById(R.id.nav_view)
        val toggle = ActionBarDrawerToggle(
            this,
            drawerLayout,
            toolbar,
            R.string.navigation_drawer_open,
            R.string.navigation_drawer_close
        )
        drawerLayout.addDrawerListener(toggle)
        toggle.syncState()

        drawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED)

        navView.setNavigationItemSelectedListener(this)
        var updater = AppUpdater(this)
            .setUpdateFrom(UpdateFrom.XML)
            .setDisplay(Display.DIALOG)
            .setTitleOnUpdateAvailable("Nová verzia dostupná")
            .setContentOnUpdateAvailable("Stiahnite si prosím novú verziu aplikácie")
            .setTitleOnUpdateNotAvailable("Nová verzia nie je dostupná")
            .setContentOnUpdateNotAvailable("Nová verzia aplikácie  nie je dostupná. Skúste neskôr")
            .setButtonUpdate("Stiahnúť")
            .setButtonDismiss("Neskôr")
            .setIcon(R.drawable.ic_system_update_white_24dp)
            .setCancelable(false)
            .setUpdateXML("https://github.com/MyAccount/MyApp/tree/master/app/src/main/res/xml/provider_paths.xml")

        updater.start()
}

Как я уже говорил выше. Я хочу проверить версию приложения и, если есть более новая версия, чем загрузить ее и обновить текущую версию приложения.

1 Ответ

0 голосов
/ 04 октября 2019

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

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

  • Вы получаете стабильность сети, 99,9% доступности и полный доступ к CDN бесплатно, как GitHub или другие варианты храненияможет быть заблокирован в регионе, где используется приложение. Если вы выберете правильного дистрибьютора, у вас никогда не возникнет этой проблемы
  • Ваша пользовательская логика для проверки, есть ли обновление или нет .. возможно, есть ошибка: 1.0.2-бета против 1.0.2,какой из них новее? Алгоритмы сортировки, которые вы получаете по умолчанию, скорее всего, дадут вам бета-версию (что неверно). В этом случае вы также должны быть очень осторожны, чтобы правильно называть свои релизы, и очень много работы, чтобы убедиться, что вы не ошиблись здесь
  • Внутреннее тестирование, автоматические фоновые обновления, бета-тестирование. все это почти невозможно без дистрибьютора
  • Поэтапное развертывание, опять же, почти невозможно без дистрибьютора
  • Сегментирование загрузок, т. е. сделать обновление доступным только определенной группе людей, невозможно без поддержкидля этого на стороне сервера, где размещается ваше приложение. Если вы начнете реализовывать эту функцию самостоятельно (на бэкэнде), вы будете собирать пользовательские данные, и ваш бэкэнд должен будет соблюдать GDPR или аналогичный закон о конфиденциальности
  • Любой показатель загрузки, который вам может понадобиться в будущем, один разопять же, почти невозможно без распространителя
  • Если в будущем вы решите переключиться на распространителя, некоторым пользователям может понадобиться удалить приложение и переустановить его, чтобы начать получать автоматические обновления (это плохой UX)
  • С точки зрения UX, вы бы запретили пользователям переходить в приложение, пока они не загрузят новую версию (даже если она не блокирует, это еще один шаг) - сколько пользователей действительно нажмут на «обновить», еслидали выбор? Вероятно, не так много, так что вы все равно не получите от этого слишком много
  • Для загрузки больших объектов из сетевого расположения потребуется подтверждение пользователя, особенно в сети с измерением ... тогда вам также необходимо проверить,на мобильных данных или WiFi (и WiFi измеряется или нет), так что опять же - много работы. Если соединение разрывается, вам нужно перезапустить загрузку и т. Д.
  • Если вы хотите распространять свое приложение только внутри или только среди определенной группы пользователей (не делайте его общедоступным), это легко сделать с помощьюбольшинство магазинов (например, в Google Play это пара щелчков мыши)
  • Если вы просто хотите принудительно обновить обновление из-за какого-то изменения протокола или серверной части / API ... опять же, это не то, что вы должны исправить на стороне клиента,Ваш бэкэнд должен быть обратно-совместимым навсегда как одно из основных требований, когда задействованы мобильные клиенты

Так что да, множество причин не делать это самостоятельно. Это только из головы (и не зная причин, стоящих за вашим вопросом), но, вероятно, есть еще много моментов, которые нужно добавить.

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

Обновление : Google выпустит (имеетвыпустили?) библиотека, которая позволяла бы вам проверять наличие обновлений, но даже тогда вам нужно было бы заранее подумать о принудительном обновлении - по крайней мере, на одну версию впереди. Также обратите внимание, что сервисы Google не обновляются на всех устройствах, и они недоступны во многих регионах, так что это не на 100% надежно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...