Alf*_*sen 6 java android amazon in-app-purchase google-play
有许多类似的Stackoverflow问题.
所有人都有答案建议使用类getInstallerPackageName上的方法PackageManager.
所有人都有评论或相互矛盾的答案,说这不是一个可靠的方法,建议可靠地检查安装给定应用程序的商店的唯一方法是生成两个单独的二进制文件,每个二进制文件都有一个storeFlag集合,并将一个二进制文件上传到亚马逊和一个到Google Play.
我需要知道哪个商店是应用程序的安装程序,以便我知道要与应用程序内购买功能进行通信的商店.
生成两个独立二进制文件的最终100%可靠方法是什么?或者是否有100%可靠的基于代码的运行时方法?
两个二进制文件将是最强大的方法,但检查Build.MANUFACTURER和installerName应该让你非常接近(但假设你想要检查亚马逊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");
Run Code Online (Sandbox Code Playgroud)
然后检查以下值:
isAmazonDevice || fromAmazonStore
Run Code Online (Sandbox Code Playgroud)
应该在很长一段时间内得到你所需要的东西.
这可能会让人感到困惑的一个场景是,如果你正在加载你的apk进行测试 - 在这种情况下,它将没有正确的InstallerPackageName.您可以通过使用以下方式加载apk来伪装:
adb install -i com.amazon.venezia APK_NAME
Run Code Online (Sandbox Code Playgroud)