繁体   English   中英

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

[英]How to trigger update if the new app version is available ( FROM GITHUB )

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

我已经尝试使用这个家伙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()
}

正如我上面所说。 我想检查应用程序的版本,以及是否有比下载更新的版本并更新应用程序的当前版本。

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

但相反,我会尝试说服你不要这样做,我能想到的原因有很多。 您应该始终使用 Google Play 等分销渠道或其他替代渠道。

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

所以,是的,有很多理由不自己做。 这只是我的想法(不知道你的问题背后的原因),但可能还有很多要补充的点。

当然,当您真的想手动强制更新时,可能有一个非常狭窄的用例,但无论如何我建议您考虑走这条路的后果。

更新:谷歌将发布(已经发布?)一个库,可以让你检查更新,但即便如此,你也需要提前考虑强制更新——至少提前一个版本。 另请注意,Google 服务并非在每台设备上都是最新的,并且它们在许多地区都不可用,因此这也不是 100% 可靠的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM