3

我们最近开始使用新的 Google 扩展 APK 机制。总的来说,它运作良好,但对我们来说似乎有些不稳定。一些问题:

  1. 一些用户会随应用程序一起下载扩展应用程序,而其他用户则不会,我们的应用程序必须自行下载。有谁知道什么时候自动运行,什么时候不自动运行?

  2. 有时当我们需要自己下载扩展文件时,Google Play 会返回文件大小 -1 和 URL 为 null,表示扩展文件不存在。如果我再次运行该应用程序,第二次它通常会返回一个有效的大小和 URL。有没有其他人看到这种片状?

以下是代码的基础知识:

这就是我们设置调用以通过回调验证许可的方式

    policy = new APKExpansionPolicy( context, new AESObfuscator( SALT, context.getPackageName(), deviceId ) );
    mChecker = new LicenseChecker( context, policy, BASE64_PUBLIC_KEY );
    mLicenseCheckerCallback = new MyLicenseCheckerCallback();
    mChecker.checkAccess( mLicenseCheckerCallback );

然后在回调中我们为 allow() 方法提供了这个(当许可证有效时)。

    public void allow( int reason )
    {
        String expansionFileName = policy.getExpansionFileName( APKExpansionPolicy.MAIN_FILE_URL_INDEX );
        String expansionURL = policy.getExpansionURL( APKExpansionPolicy.MAIN_FILE_URL_INDEX );
        long expansionFileSize = policy.getExpansionFileSize( APKExpansionPolicy.MAIN_FILE_URL_INDEX );
    }

我们刚刚发布了带有这个新代码的应用程序,但是大量用户得到了 -1 作为扩展文件大小和 null 作为 url。这会导致用户无法安装扩展文件。通常,如果他们再次运行该应用程序,它将在第二次(或第三次)时运行。

有人对可能发生的事情有任何想法吗?

4

3 回答 3

2

您得到 -1 是因为如果您尝试再次联系许可服务器,APKExpansionPolicy 会以本地缓存结果响应 - 但 URL、文件大小和文件名未缓存,并且在第一次真正响应后丢失。APKExpansionPolicy 不缓存这些结果,这里是来自 APKExpansionPolicy 源代码的注释,它解释了它:

扩展 URL 不提交首选项,而是在前端处理许可证响应时存储。

因此,您需要在获得第一个成功响应后立即将这些值存储在首选项中(在允许回调方法中);

于 2012-06-25T20:45:13.833 回答
1

Android Developers 上的博文提到了 #1:

在大多数较新的设备上,当用户从 Android Market 下载您的应用程序时,扩展文件将自动下载,并且在下载扩展文件之前不会开始退款期限。在旧设备上,您的应用将在首次运行时下载扩展文件

于 2012-04-05T19:18:56.863 回答
1

添加到Daniel Novak 的回答中,如果您在调用之前重置策略checkAccess(),这将强制它提出新的许可证请求,因此检索 URL:

policy.resetPolicy();

如果您确定需要 URL(即,如果您已经检查过扩展文件是否丢失),您可能只想这样做。

于 2014-06-26T09:43:09.757 回答