android - 从 NFC 安装 GooglePlay 定位的应用程序

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

使用 Lollipop,我有一个 device-owner 应用程序,它在提供时与 NFC 一起安装。
我现在需要的是处理我的应用程序的自动更新,从 Google Play 到依赖标准的 Android 应用程序更新系统...

到目前为止,我可以想出 2 种方法来完成这项工作,但不知道如何处理其中的任何一种:

  1. 在我的 NFC 安装常量 EXTRA PROVISIONING DEVICE ADMIN PACKAGE 下载位置 直接从 Play 商店安装应用程序,而不是我自己的开发服务器上的 url。
    不过 这个常量需要处理一个apk文件的url,我没找到 直接从 Play 商店获取 apk 安装的官方方式? (因为它会 将来成为生产应用程序我对黑客不感兴趣)
  2. 继续从开发服务器安装 apk,然后允许应用程序 用它位于 Play 商店的小兄弟更新自己 具有相同的包名称。
    换句话说:是否可以从自定义位置安装 v1 apk,然后将 v2 放在 PlayStore 上...让魔法成真?

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


编辑 在@Stephan Branczyk 建议我可以进行更多测试后,这是我所做的和结果:

1 - 在 NFC 配置中,我将 apk url 替换为 snep://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 Store 的功能,但到目前为止运气不好,而且我无法相信 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);
        }

最佳答案

将您的包名称写为 AAR record在标签中。

要确认此功能是否有效,请使用此 app写标签。

关于android - 从 NFC 安装 GooglePlay 定位的应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28777354/

相关文章:

java - 如何在 Android Java 中合并正则表达式中的两个或多个条件?

安卓。将联系人显示为 ListView

android - 按Google Play服务版本过滤应用分发

android - 仅为新用户发布更新 Android Play 商店

android - 在没有 Play 商店帐户的设备上部署 Android 应用程序

android - 在 Android 委托(delegate)之前拦截 Intent (NFC)

java - 无效的字符串 Switch Case

android - 如何从对话框重定向到 fragment

android - 如何从 IsoDep 获取额外的卡数据?

android 使用 nfc 解锁屏幕