我们最近开始使用新的Google扩展APK机制。总体而言,它运作良好,但对我们来说似乎有点不稳定。一些问题:
有些用户会随应用程序一起下载扩展应用,而其他用户则无法下载,我们的应用必须自行下载。有没有人知道什么时候它会自动起作用?什么时候不起作用?
有时,当我们需要自己下载扩展文件时,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作为expandFileSize返回,并返回null作为url。这会导致用户无法安装扩展文件。通常,如果他们再次运行应用程序,它将在第二(或第三)时间工作。
任何人都对可能发生的事情有任何想法?
答案 0 :(得分:1)
blog post on Android Developers地址#1:
在大多数较新的设备上,当用户从Android电子市场下载您的应用时,将自动下载扩展文件,并且在下载扩展文件之前不会开始退款。在较旧的设备上,您的应用会在首次运行时下载扩展文件
答案 1 :(得分:1)
您获得-1,因为如果您尝试再次联系许可服务器,则APKExpansionPolicy将使用本地缓存结果进行响应 - 但URL,filesize和filename不会被缓存,并在第一次真实响应后丢失。 APKExpansionPolicy不会缓存这些结果,这里是来自APKExpansionPolicy源代码的注释,它解释了它:
扩展URL未提交给首选项,而是在前端处理许可证响应时存储。
因此,您需要在获得第一个成功响应后立即将这些值存储在首选项中(在 allow 回调方法中);
答案 2 :(得分:0)
要添加到Daniel Novak's answer,如果在调用checkAccess()
之前重置策略,这将强制它发出新的许可请求,从而检索URL:
policy.resetPolicy();
如果你确定需要这个网址(例如,如果你已经检查过扩展文件丢失了),你可能只想这样做。