Android Google Play警告Google Play inApp计费的错误实现

Android Google Play警告Google Play inApp计费的错误实现,android,google-play,android-security,Android,Google Play,Android Security,我刚收到谷歌Play的以下电子邮件 “你好,谷歌游戏开发者 我们检测到此电子邮件末尾列出的应用程序是 在不设置目标包的情况下调用应用内计费服务 为了这个目的。这会使恶意软件包绕过播放 存储尚未购买的计费系统和访问项目 下一步 如果您正在使用IabHelper,请开始使用最新的SDK。如果你 正在手动调用应用内计费服务,请确保 调用Intent.setPackage(“com.android.vending”)的任何意图 “com.android.vending.billing.InAppBill

我刚收到谷歌Play的以下电子邮件

“你好,谷歌游戏开发者

我们检测到此电子邮件末尾列出的应用程序是 在不设置目标包的情况下调用应用内计费服务 为了这个目的。这会使恶意软件包绕过播放 存储尚未购买的计费系统和访问项目

下一步

如果您正在使用IabHelper,请开始使用最新的SDK。如果你 正在手动调用应用内计费服务,请确保 调用Intent.setPackage(“com.android.vending”)的任何意图 “com.android.vending.billing.InAppBillingService.BIND”。登录到 您的开发者控制台并提交应用程序的更新版本。 五小时后再查看-如果应用程序失败,我们将显示一条警告消息 尚未正确更新。”


我不确定这个问题的解决办法是什么。有人能告诉我在哪里指定代码吗?它是Java类中的某个地方还是清单中的某个地方?

修复程序将在您的Java中。使用操作
“com.android.vending.billing.InAppBillingService.BIND”
,在代码库中搜索意图,该操作可以传递到构造函数中,也可以通过
Intent.setAction()设置。在使用该意图调用
bindService()
之前,必须通过
intent.setPackage()
显式设置包


以下是谷歌的示例代码作为参考:

我们也收到了此警报,并检查了我们的APK。 我们发现旧版本的Google-Play-Service.jar似乎使用了“com.android.vending.billing.inapplingservice.BIND”的意图,而没有设置setPackage


我们还检查了最新的Google-Play-Service.jar,这一个还可以,因此我建议检查您的库。

您必须从以下位置使用上一个SDK更新IABHeloper文件:

当您覆盖旧文件时,Eclipse或Android Studio将显示错误,您必须修复这些错误,例如添加try catch,或向queryInventory函数添加一个参数

记住,如果更改了包名,请在新文件中更新包名

编辑:最后,我需要更新项目中包含的google\u play\u services.jar lib。更新后,此通知警报已隐藏。我使用的是一个旧的google play服务库。现在我使用的是rev 28版本。

没有测试此解决方案,但您仍然可以尝试:替换
serviceIntent.setPackage(“com.android.vending”)带有
serviceIntent.setPackage(“com.android.vending.billing.inapplingservice.BIND”)在您设置包的地方或任何地方。干杯


更新:只需更新谷歌播放服务库,对我有用。干杯。

在整个代码库中搜索以下代码语句

Intent serviceIntent = new Intent("com.android.vending.billing.InAppBillingService.BIND");
无论您在何处使用了上述意图,都不要忘记将此代码添加到
serviceentent.setPackage(“com.android.vending”)


在我的整个代码库中,有两次出现了上述意图,一次是在java文件中,如果你使用最新的应用内计费sdk,此语句将已添加,另一次,我使用此意图检查InApp计费服务是否可用,我忘记添加
serviceIntent.setPackage(“com.android.vending”);
,一旦我发现并在开发者控制台中更新了我的应用程序,警告消息在几个小时后被删除。

我几天前收到了相同的警告,并且已经按照如下意图设置了软件包:

Intent serviceIntent = new Intent("com.android.vending.billing.InAppBillingService.BIND");
serviceIntent.setPackage("com.android.vending");
bindService(serviceIntent, mServiceConn, Context.BIND_AUTO_CREATE);
boolean inAppBillingAvailable = !getPackageManager().queryIntentServices(new Intent("com.android.vending.billing.InAppBillingService.BIND"), 0).isEmpty();

通过更新到Google Play服务的最新版本,并将棒棒糖(5.1)作为目标,而不是KitKat(4.4),这个问题已经解决了。如果您正在使用任何Google Play API,请确保将其更新到最新版本,希望这也能为您解决此问题。

解决此问题有三点

  • 在你的代码中找到
    com.android.vending.billing.InAppBillingService.BIND
    。让每个意图调用方法
    Intent.setPackage(“com.android.vending”)。
  • 更新
    IabHelper
    的SDK
  • 更新Google Play服务库项目。 确保这些事情都正确完成。每一个未完成的点都会导致这个问题。如果问题仍然存在,可能是项目中的其他JAR有问题

  • 我收到了相同的警告。我在绑定InAppBillingService时已经设置了包,但我发现我正在检查InAppBillingService是否存在如下情况:

    Intent serviceIntent = new Intent("com.android.vending.billing.InAppBillingService.BIND");
    serviceIntent.setPackage("com.android.vending");
    bindService(serviceIntent, mServiceConn, Context.BIND_AUTO_CREATE);
    
    boolean inAppBillingAvailable = !getPackageManager().queryIntentServices(new Intent("com.android.vending.billing.InAppBillingService.BIND"), 0).isEmpty();
    
    请确保您还在此处设置包:

    boolean inAppBillingAvailable = !getPackageManager().queryIntentServices(new Intent("com.android.vending.billing.InAppBillingService.BIND").setPackage("com.android.vending"), 0).isEmpty();
    

    我终于设法解决了这个问题。首先我更新了IabHelper,但这没有帮助。然后我注意到build.gradle中有一个依赖项编译'com.google.android.gms:play services:6.1.71'。我将它改为com.google.android.gms:play services:9.4.0。这导致了许多编译错误。但是,后来我没有使用9.4.0版本的play se在服务方面,我使用了9.4.0版本的谷歌服务。在我的例子中,它只是com.google.android.gms:play services auth:9.4.0和com.google.android.gms:play services drive:9.4.0。这只给出了一些编译错误,我在代码中修复了这些错误。然后我将谷歌play作为alpha推送,等待了2天。警告警报没有弹出,因为我上传了e版本

    多谢各位


    编辑:我认为我们不需要更改IabHelper.java,只要它设置了setPackage(“com.android.vending”)。我恢复了IabHelper.java,只上传了一个版本为9.4.0的play services drive和play services auth更改。它没有发出警告。

    我有这个问题,无法在eclipse中更新我们的旧管道。因此我基本上反编译了google play service的库,修补了eb.java和dx.java中的漏洞,重新编译这两个文件并将它们放入原始JAR文件中。这已解释清楚。

    所有答案都是正确的