如果新的应用程序版本可用,如何触发更新(FROM GITHUB)

时间:2019-10-04 12:56:33

标签: java android github updates

在我的应用程序中,我想创建一个功能,该功能将在启动时检查是否有可用的新版本的应用程序。如果是,则显示带有“是/否”选项的警报。

我已经尝试使用这个人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 :(得分:0)

要快速回答您的问题-,您可以将发布存储在GitHub版本页面中,然后在应用程序中使用该解析器(或GitHub API)对指向该页面的链接进行硬编码),则可以获取应用下载链接。因此肯定可以手动进行。

但是,相反,我会尝试说服您不要这样做,我可以想到许多原因。您应始终使用Google Play或other alternatives之类的发行渠道。

  • 您可以免费获得网络稳定性,99.9%的可用性和完整的CDN访问权限,因为GitHub或其他存储选项可能在使用该应用程序的区域被阻止。如果您选择合适的分销商,您将永远不会遇到这个问题
  • 您的用于检查是否有更新的自定义逻辑..它可能存在错误:1.0.2-beta与1.0.2,哪个是更新的?默认情况下,您获得的排序算法很可能会为您提供beta(这是错误的)。在这种情况下,您还必须非常小心地正确命名您的发行版,并且要确保您在此没有记错是很多工作
  • 内部测试,自动背景更新,beta测试..没有发行商,所有这些几乎是不可能的
  • 再次分阶段推广,没有分销商几乎是不可能的
  • 分段下载,即仅将更新仅提供给特定人群,如果在托管您的应用的后端不支持此更新,则无法实现。如果您自己(在后端)开始实施此功能,则您将收集用户数据,并且后端将需要遵守GDPR或类似的隐私法
  • 您将来可能需要的任何下载指标,再也没有发行商了几乎不可能
  • 万一您决定将来切换到发行商,某些用户可能必须卸载该应用程序并重新安装它才能开始获取自动更新(这是错误的UX)
  • 就UX而言,您将阻止用户继续使用该应用程序,直到他们下载新版本为止(即使未阻止,这又是一个步骤)-如果给出了多少用户真正会点击“更新”一个选择?可能不是很多,所以无论如何您都不会从中得到太多
  • 从网络位置下载大型项目需要用户确认,尤其是在按流量计费的网络上……然后,您还需要检查它们是否在移动数据或WiFi上(以及是否对WiFi进行计量),因此-很多工作。如果连接中断,则需要重新开始下载,依此类推
  • 如果您只想在内部或仅向特定用户群分发应用程序(而不是公开发布),那么大多数商店都可以轻松做到这一点(例如,在Google Play中只需点击几下)
  • 如果由于某些协议或后端/ API更改而只想强制更新...,则不应在客户端上进行修复。后端需求永远是向后兼容的,这是涉及移动客户端时的基本要求之一。

是的,有很多理由不自己做。这只是我的脑袋(不知道您的问题背后的原因),但是可能还有很多要补充的地方。

当然,当您真的想手动强制更新时,可能会有一个非常狭窄的用例,但是无论如何,我建议您考虑沿此路径进行操作的后果。

更新:Google将发布(has released?)一个库,该库可让您检查更新,但即使那样,您也需要考虑提前强制更新-至少一个前面的版本。另请注意,Google服务并非在每台设备上都是最新的,并且在许多地区也不可用,因此也不是100%可靠的。