为使用Xamarin.Forms

时间:2019-04-25 19:06:06

标签: c# android xamarin xamarin.forms auto-update

我最近开始使用跨平台的Xamarin.Forms工具包来构建移动应用程序,但是我很难为它实现某种自动更新机制。

更具体地说,我的应用程序具有一些XML文件以及存储在资产文件夹中的图像,所有图像都打包在apk文件中,并发布到Google Play。

我想要的是编辑和更新这些xml和资产,而不在Play商店中发布新版本的APK 。但我也知道,一旦打包成apk,除非用户通过商店手动下载和更新应用,否则这些内容将无法更改。

因此,我目前采用这样的漫游方式:

  1. 我将要更新的所有内容(例如XML文件或图像)放在服务器上,然后制作一个 API 用于指定其版本并提供可下载的项目。
  2. 在我的应用程序中,我有一个代表资产当前版本的值。该应用启动后,将有一个后台进程调用服务器的API,并检查该版本值是否与服务器上的版本值匹配。
  3. 然后,如果版本不匹配,它将自动从服务器下载内容并存储在用户设备的内部存储中。
  4. 然后有一种方法使应用程序使用内部存储中的那些新资产或图像来替换其当前资产。

问题在于我的这种绕行太笨拙且难以实施。有什么想法可以为我提供更清洁或更合适的解决方案吗?谢谢您,如果我误解了更新移动应用程序的任何基本逻辑,因为我对移动编程有点陌生。

1 个答案:

答案 0 :(得分:1)

您的逻辑是正确的...如果您正在APK的外部的“版本”资产,则需要跟踪本地资产与基于服务器的资产的“版本” |基于远程的资产并在远程资产较新时下载/缓存新资产...

您可以使用APK扩展(* .obb)文件将“资产”与.apk捆绑包分开捆绑。但是,每当您需要更改.obb(即使它是基于补丁的.obb)时,应用程序版本也必须更改,因此您必须上载具有新版本的.apk即使商店中的其他任何东西都没有改变。

re:APK Expansion Files

新的.aab格式(替换为.apk)使您可以修改应用程序的各个组件,从而使用户获得安装内容与新更改之间的差异的真实差异。导致更新大小很小。与.obb一样,该应用的版本也需要更改,因此必须上载新的.aab

注意:Xamarin当前不支持.aab捆绑包的直接构建(就像Android Studio一样),但是它们可以通过MSBuild工件“手工制作”。

re:Android App Bundles

对于像您这样的情况,我个人只使用单个版本的.zip,其中包含可以在应用程序级别版本之间进行动态更改的所有文件,因此仅跟踪该单个文件(下载后解压缩到本地应用程序缓存中) )。服务器上的版本文件(或仅文件哈希)包含zip文件的最新版本和URL,而zip文件本身包含匹配的版本文件。没有缓存的文件,下载并解压缩文件。检查应用程序更新后,将缓存中的版本文件与服务器版本进行比较,并在需要时下载/解压缩。 (注意:我什至不使用单独的“语义版本”,而是使用zip文件的SH1哈希)。