我需要知道哪个商店是应用程序的安装程序,以便我知道与哪个商店进行通信以实现应用程序内购买功能。
是确定的100% 可靠生成两个单独的二进制文件的方法?或者有没有一个100% 可靠基于代码的运行时方法?
Stackoverflow 上还有很多类似的问题。所有的答案都建议使用类似的方法getInstallerPackageName
on the PackageManager
班级。所有的评论或相互矛盾的答案都表明这不是一种可靠的方法,这表明可靠地检查哪个商店安装了给定应用程序的唯一方法是生成两个单独的二进制文件,每个二进制文件都有一个storeFlag
设置,并将一个二进制文件上传到 Amazon,并将一个二进制文件上传到 Google Play。
两个二进制文件将是最可靠的方法,但检查 Build.MANUFACTURER 和 installerName 应该会让您非常接近(尽管假设您想要检查 Amazon AppStore,如果用户在其非 Kindle 上安装了旧版本的安装程序设备且未更新 installerName 可能会报告 null)
boolean isAmazonDevice = Build.MANUFACTURER.equalsIgnoreCase("amazon");
final Application application = getApplication();
String installerName = application.getPackageManager().getInstallerPackageName(application.getPackageName());
boolean fromAmazonStore = installerName != null && installerName.equalsIgnoreCase("com.amazon.venezia");
然后检查以下值:
isAmazonDevice || fromAmazonStore
应该可以满足您大部分时间所需的需求。
一种可能会造成混乱的情况是,如果您正在侧面加载您的 apk 进行测试 - 在这种情况下,它不会有正确的 InstallerPackageName。您可以使用以下方法通过旁加载 apk 来伪造这一点:
adb install -i com.amazon.venezia APK_NAME
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)