从NFC安装Google Play定位应用

时间:2015-02-28 02:16:39

标签: android google-play nfc android-5.0-lollipop device-owner

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

到目前为止,我可以设想两种方法来完成这项任务,但不知道如何处理它们:

  1. 在我的NFC安装常量 EXTRA PROVISIONING DEVICE ADMIN PACKAGE中 下载位置直接从Play商店安装应用程序而不是我自己的开发服务器上的URL。然而
    这个常量需要处理apk文件的url,我没有找到任何 官方的方式来直接从Play商店安装apk? (因为它会 将来是一个生产应用我对黑客不感兴趣)
  2. 继续从开发服务器安装apk,但随后允许该应用程序 与位于Play商店的小弟弟一起更新自己 使用相同的包名称。
    换句话说:这可以从自定义位置安装v1 apk,然后在PlayStore上放置一个v2 ......让神奇的事实成真吗?
  3. 我很高兴听到是否有人可以分享有关此类程序的经验。谢谢阅读!

    <小时/> 在编辑我可以进行更多测试,这是我做的和结果:

    1 - 在NFC配置中,我将apk url替换为     没有运气的话://my.app.packagename;它只是给出一个错误     没有太多解释。

    2 - 我用这样一个PlayStore链接替换了这个url:     https://play.google.com/store/apps/details?id=my.app.packagename但是     无论我是否在本地使用校验和,它都会出现校验和错误     计算,或在GooglePlay apk详细信息上给出的校验和。它看起来离目标不远,但我无法使其发挥作用。

    3 - 最后我回到了我的第一个解决方案,一个自托管的apk     版本1 ...但这次我试图把PlayStore换成新版本     应用程序的第2版具有完全相同的包名...这导致了我     奇怪的事情:

    • 起初我的应用程序没有出现在本地PlayStore应用程序的任何地方, 但是当我在Google Play中搜索它时,它显示为绿色 “安装”徽章,它建议我做一个更新......我也是。
    • 然后,在第一次手动更新后,应用程序在v2中,很好,并且 更好:它似乎列在我的PlayStore中。
    • 乐观地说,我上传了一个应用程序的v3 ...只是为了看看我的 PlayStore会自动更新我的应用程序(就像所有的一样 其他的),但遗憾的是没有运气:即使我的应用仍然列在 Playstore,并提出“更新”按钮......它永远不会 按其本身更新;我仍然需要手动点击它。

    这不是一种奇怪的行为吗?如果有人有关于它的想法,我真的需要能够依赖Play商店的功能,但到目前为止没有运气,我不相信设备所有者应用程序分发与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);
            }
    

2 个答案:

答案 0 :(得分:0)

将您的包名称标记为AAR record

要确认此功能有效,请使用此app编写标记。

答案 1 :(得分:0)

你需要在

中设置apk的Base64编码SHA1或SHA256(来自M forward)

EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_CHECKSUM

通过NFC进行配置时的

字段,否则配置的设备将不接受下载的URL。

另请参阅此answer以正确编码校验和。