4

Работая с Lollipop, у меня есть устройство-владелец устройства, установленное с NFC в момент времени.
Теперь мне нужно обрабатывать автоматические обновления для своего приложения из Google Play, чтобы полагаться на стандартную систему обновления Android-приложений ...Установите приложение GooglePlay из NFC

До сих пор я могу представить два способа сделать это, но не знаю, как справиться с любым из них:

  1. в моей NFC установить постоянную EXTRA Provisioning DEVICE ADMIN ПАКЕТ СКАЧАТЬ РАСПОЛОЖЕНИЕ установить приложение непосредственно из Play Store, вместо URL на моем собственном сервере Dev.
    Тем не менее, эта константа должна обрабатывать URL-адрес файла apk, и я не нашел никакого официального способа получить apk прямо из Play Маркета. (так как это будет быть производственным приложением в будущем Меня не интересуют хаки)
  2. продолжайте установку apk с сервера dev, но затем разрешите App обновить себя своим младшим братом, расположенным в Play Маркете с таким же именем пакета.
    Чтобы сказать это по-другому: можно ли установить v1 apk из пользовательского местоположения, а затем поместить v2 в PlayStore ... и позволить волшебству сбыться?

Я был бы рад узнать, может ли кто-нибудь поделиться опытом в отношении таких процедур. Спасибо за прочтение!


EDIT после @Stephan Branczyk предложения я мог бы сделать еще несколько испытаний, вот что я сделал, и результаты:

1 - В предоставлении NFC я заменил URL с АПК Snep: // моими. app.packagename без везения; он просто дает ошибку без особого объяснения.

2 - я заменил этот адрес по такой ссылке PlayStore: https://play.google.com/store/apps/details?id=my.app.packagename но дает ошибку контрольной суммы, используется ли я контрольная сумма локально вычислен, или контрольная сумма с учетом на деталях GooglePlay APK. Он выглядит не так далеко от цели, но я не мог заставить его работать.

3 - Наконец-то я вернулся на мое первое решении, в самопринятом APK версированном 1 ... но на этот раз я пытался поставить на PlayStore более новую версии 2 приложения с точно такой же PackageName. .. это привело меня странные вещи:

  • в первый мой App не появлялся где-нибудь в местном PlayStore App, , но когда я искал его в Google Play, он появился с зеленым «установлен «Значок, и он предложил мне сделать обновление ... Так и я.
  • Затем, после этого первое обновление вручную, приложение находится в v2, приятно, и лучше: оно хорошо отображается в моей PlayStore.
  • Оптимистично, я загрузил v3 приложения ... просто чтобы узнать, будет ли мой PlayStore автоматически обновлять мое приложение (как это делается для всех других), но, к сожалению, не повезло: даже если мое приложение все еще перечисленные в игровом магазине , и предлагая кнопку «Обновить» ...это никогда не будет обновлений само по себе, как должно; Мне все еще нужно щелкнуть по нему вручную.

Это не странное поведение? Если у кого-то есть идеи об этом, мне действительно нужно будет полагаться на функциональность Play Store, но пока не повезло, и я не могу поверить, что дистрибутив приложений Device-Owner несовместим с PlayStore?


Только в случае, FYI здесь вид инициализации кода я использую:

try { 
      Properties p = new Properties(); 

      p.setProperty(
        DevicePolicyManager.EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_NAME, 
        "my.app.packagename"); 
      p.setProperty(
        DevicePolicyManager.EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_DOWNLOAD_LOCATION, 
        "http://www.example.com/myDeviceOwnerApp.apk"); 
      p.setProperty(
        DevicePolicyManager.EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_CHECKSUM, 
        "U55o3fO0cXQtUoQCbQEO9c_gKrs"); 

      ByteArrayOutputStream bos = new ByteArrayOutputStream(); 
      OutputStream out = new ObjectOutputStream(bos); 
      p.store(out, ""); 
      final byte[] bytes = bos.toByteArray(); 

      NdefMessage msg = new NdefMessage(NdefRecord.createMime(
        DevicePolicyManager.MIME_TYPE_PROVISIONING_NFC, bytes)); 
      return msg; 
     } catch (Exception e) { 
      throw new RuntimeException(e); 
     } 

ответ

0

Напишите свое имя пакета в качестве AAR record в теге.

Чтобы убедиться, что эта функциональность работает, используйте этот app, чтобы написать тег.

+0

Thanx для вашего ввода. В настоящее время тесты с PlayStore, задержки публикации замедляют работу. Однако, даже если это привело меня дальше, ни одно из ваших 2 решений не работало; первая ссылка работает, но есть контрольные суммы ошибок; второй, интересный один snep: // не работает вообще печально ... Я скоро вернусь и отредактирую свой вопрос с результатами тестов, чтобы вы знали, что я пробовал. – JBA

+0

Прошу прощения, прошло некоторое время с тех пор, как я сделал NFC. Я только что обновил свой ответ. Этот метод работает только с Android 4.x и выше. –

+0

Является ли запись AAR уже тем, что я пишу на теге NFC? (_MIME_TYPE_PROVISIONING_NFC_ и т. Д.). Я также обновил свой вопрос, чтобы дать результаты тестов, которые я мог бы сделать ... – JBA

0

Вы должны установить кодировку Base64 SHA1 или SHA256 (с М вперед) из APK в

EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_CHECKSUM

поле при инициализации с помощью NFC в противном случае устройство не предусмотренное будет принимать URL для загрузки.

Также см. Это answer для правильной кодировки контрольной суммы.

Смежные вопросы