从NFC安装位于GooglePlay的应用

JBA*_*JBA 5 android nfc google-play android-5.0-lollipop device-owner

使用Lollipop时,我有一个设备所有者应用程序,该设备所有者应用程序在供应时随NFC一起安装。
我现在需要的是处理我的App的自动更新,从Google Play依靠标准的Android App更新系统...

到目前为止,我可以想象完成此任务的2种方法,但是不知道如何处理它们:

  1. 在我的NFC中,安装常量EXTRA PROVISIONING DEVICE ADMIN PACKAGE DOWNLOAD LOCATION,直接从Play商店安装该应用程序,而不是在我自己的开发服务器上安装该URL。
    但是,此常量需要处理apk文件的网址,我没有找到任何直接从Play商店直接获取apk安装的正式方法?(因为将来它将成为生产应用程序,所以我对黑客不感兴趣)
  2. 继续从开发服务器上安装apk,但随后允许该应用使用位于Play商店中具有相同软件包名称的小弟弟进行更新。
    换句话说:是否可以在自定义位置安装v1 apk,然后将v2放在PlayStore上,让魔术成真?

我很高兴听到有人能分享有关此类程序的经验。谢谢阅读!


@Stephan Branczyk建议后进行编辑,我可以再进行一些测试,这是我的工作和结果:

1-在NFC设置中,我用snep://my.app.packagename替换了apk网址,但是没有运气;它只是给出了一个错误而没有太多解释。

2-我用一个PlayStore链接替换了该网址:https : //play.google.com/store/apps/details? id = my.app.packagename, 但是无论我使用本地计算的校验和还是它都会产生校验和错误。 GooglePlay apk详细信息中提供的校验和。它看起来离目标不远,但我无法使其实现。

3-终于我回到了第一个解决方案,一个自托管的apk版本1 ...但是这次,我尝试将PlayPack的应用程序2更新版本,其包名完全相同...这导致我奇怪的事情:

  • 最初,我的应用程序没有出现在本地PlayStore应用程序中的任何位置,但是当我在Google Play中搜索它时,它显示为绿色的“已安装”徽章,并建议我进行更新...我也是。
  • 然后,在第一次手动更新后,该应用程序将在v2中运行,并且更好,更好:它在我的PlayStore中列出的很好。
  • 乐观的说,我上传了v3版本的应用程序...只是为了查看我的PlayStore是否会自动更新我的应用程序(其他所有应用程序也是如此),但遗憾的是没有运气:即使我的应用程序仍在Playstore中列出,并提出“更新”按钮...它永远不会自行更新;我仍然需要手动单击它。

这是一种奇怪的行为吗?如果有人对此有想法,我真的需要能够依赖Play商店的功能,但到目前为止还算不上运气,而且我不敢相信Device-Owner应用分发版与PlayStore不兼容?


以防万一,这里仅供参考,这是我正在使用的那种配置代码:

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);
        }
Run Code Online (Sandbox Code Playgroud)