Правильный способ реализации автообновления для приложения Android, созданного с помощью Xamarin.Forms - PullRequest
0 голосов
/ 25 апреля 2019

Я недавно начал создавать свое мобильное приложение с использованием кроссплатформенного инструментария Xamarin.Forms, и мне трудно реализовать какой-то механизм автоматического обновления для него.

В частности, в моем приложении есть несколько файлов XML, а также изображения, хранящиеся в папке активов. Все они упакованы в файл apk, опубликованный в Google Play.

Мне нужно отредактировать и обновить эти xml и ресурсы без публикации новой версии apk в магазине воспроизведения. Но также я знаю, что после упаковки в apk их нельзя изменить, если пользователь не загрузит и не обновит приложение вручную через магазин.

Итак, я в настоящее время хожу с такой прогулкой:

  1. Я помещаю все вещи, такие как XML-файлы или изображения, которые я хочу обновить , на свой сервер , а затем создаю API для указания их версии, а также для предоставления загружаемых элементов.
  2. Внутри моего приложения у меня есть значение, представляющее текущую версию ресурсов. Когда приложение запускается, оно будет иметь фоновый процесс, вызывающий API сервера, и проверять, совпадает ли это значение версии со значением на сервере.
  3. Затем, если версия не совпадает, она автоматически загрузит материалы с сервера и сохранит их во внутреннем хранилище пользовательского устройства .
  4. И затем есть метод make app, который использует эти новые ресурсы или образ из внутреннего хранилища для замены его текущих.

Проблема в том, что мой обход слишком неуклюж и труден для реализации. Какие-нибудь идеи, которые могут помочь мне с более чистым или более правильным решением? Спасибо и извините, если я неправильно понимаю основную логику обновления мобильного приложения, потому что я немного новичок в мобильном программировании.

1 Ответ

1 голос
/ 25 апреля 2019

Ваша логика верна ... если вы "управляете версиями" активов за пределами APK, вам нужно отслеживать "версию" локальных ресурсов по сравнению с сервером | удаленными ресурсами изагружать / кэшировать новые ресурсы, когда удаленные ресурсы более новые ...

Вы можете использовать файлы расширения APK (* .obb) для объединения ваших "активов" отдельно от пакета .apk.Но в любое время вам нужно изменить .obb (даже если это основанная на патче .obb) версия приложения должна измениться, и, следовательно, вы должны загрузить .apk с новой версией в магазин, даже если ничего другогов нем изменилось.

re: Файлы расширения APK

Новый формат .aab (замена .apk) позволяет изменять отдельные компоненты приложения.и, таким образом, пользователь получает истинную разницу между установленными им изменениями и новыми изменениями, приводящими к очень маленьким размерам обновлений.Как и в случае .obb, версия приложения должна измениться, и, таким образом, должна быть загружена новая .aab.

Примечание. В настоящее время Xamarin не поддерживает прямое создание пакетов .aab (как это делает Android Studio), но их можно «изготовить вручную» из артефактов MSBuild.

re: Пакеты приложений Android

Лично для сценариев, подобных вашему, я просто использую одну версию .zip, которая включает все файлы, которые могут динамически изменяться между уровнями приложенияversion | Release и, таким образом, отслеживает только этот файл (распаковка в локальный кеш приложения при загрузке).Файл версии (или просто хэш-файл) на сервере содержит последнюю версию и URL-адрес zip-файла, а сам zip-файл содержит соответствующий файл версии.Нет кэшированных файлов, скачайте и распакуйте файл.После проверки обновления приложения сравните файл версии в кэше с версией сервера и, при необходимости, загрузите / распакуйте.(Примечание: я не даже использую отдельную "семантическую версию", я просто использую хэш SH1 zip-файла).

...