有许多类似的Stackoverflow问题。
所有答案都有建议使用类getInstallerPackageName
上的方法的答案PackageManager
。
所有人都有评论或矛盾的回答,说这不是一种可靠的方法,这表明可靠地检查给定应用安装了哪个商店的唯一方法是生成两个单独的二进制文件,每个都有一storeFlag
组,然后将一个二进制文件上传到Amazon到Google Play。
我需要知道哪个商店是该应用程序的安装程序,以便知道与哪个商店进行通信以实现应用程序内购买功能。
生成两个单独的二进制文件的权威性100%可靠方法是吗?还是有一种100%可靠的基于代码的运行时方法?
两个二进制文件将是最可靠的方法,但是同时检查Build.MANUFACTURER和installerName应该可以使您非常接近(尽管假设您要检查Amazon AppStore,如果用户已在非Kindle上安装了旧版本的安装程序,设备且未更新,installerName可能报告为空)
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
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句