Google Play警告错误实施Google Play inApp结算

时间:2016-07-28 17:03:26

标签: android google-play android-security

我刚从Google Play收到以下电子邮件

  

' Google Play开发者,

     

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

     

后续步骤

     

如果您使用的是IabHelper,请开始使用最新的SDK。如果你   手动调用应用内结算服务,确保您是   在任何意图上调用Intent.setPackage(“com.android.vending”)   " com.android.vending.billing.InAppBillingService.BIND&#34 ;.登录到   您的开发人员控制台并提交您应用的更新版本。   五小时后再回来 - 我们会在应用程序中显示警告消息   尚未正确更新。'

我不确定这个问题的解决方法是什么。任何人都可以告诉在哪里指定代码?它是在Java Class或Manifest中的某个地方吗?

11 个答案:

答案 0 :(得分:3)

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

我们还检查了最新的Google-Play-Service.jar,这个很好,所以我建议您检查一下你的库。

答案 1 :(得分:3)

我几天前收到了同样的警告,并且已经按照这样的意图设置了包裹:

Intent serviceIntent = new Intent("com.android.vending.billing.InAppBillingService.BIND");
serviceIntent.setPackage("com.android.vending");
bindService(serviceIntent, mServiceConn, Context.BIND_AUTO_CREATE);

通过更新到最新版本的Google Play服务并定位Lollipop(5.1)而不是KitKat(4.4),问题已经消失......如果您使用的是任何Google Play Apis,请确保将其更新为最新版本版本,希望它也会为你解决。

答案 2 :(得分:2)

您必须使用以下的最新SDK更新IabHelper文件:

https://github.com/googlesamples/android-play-billing/tree/master/TrivialDrive/app/src/main/java/com/example/android/trivialdrivesample/util

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

如果您更改了新文件,请记住更新包名称。

编辑:最后我还需要更新项目中包含的google_play_services.jar lib。更新后,此通知警报已隐藏。我使用的是较旧的谷歌播放服务库。现在我正在使用rev 28版本。

答案 3 :(得分:2)

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

Intent serviceIntent = new Intent("com.android.vending.billing.InAppBillingService.BIND");

无论您何时使用上述意图,请不要忘记在serviceIntent.setPackage("com.android.vending");

下面添加此代码

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

答案 4 :(得分:0)

修复程序将在您的Java中。在代码库中搜索带有操作"com.android.vending.billing.InAppBillingService.BIND"的Intent,或者传递给构造函数,或者通过Intent.setAction()进行设置。在使用该意图调用bindService()之前,您必须通过Intent.setPackage()明确设置包。

以下是Google的示例代码作为参考:https://github.com/googlesamples/android-play-billing/blob/master/TrivialDrive/app/src/main/java/com/example/android/trivialdrivesample/util/IabHelper.java#L296

答案 5 :(得分:0)

未测试此解决方案,但您仍可以尝试:将serviceIntent.setPackage("com.android.vending");替换为https://github.com/googlesamples/android-play-billing/blob/master/TrivialDrive/app/src/main/java/com/example/android/trivialdrivesample/util/IabHelper.java#L297中的serviceIntent.setPackage("com.android.vending.billing.InAppBillingService.BIND");或任何设置了setPackage的内容。欢呼声。

更新:只需更新Google Play服务库,为我工作。欢呼声。

答案 6 :(得分:0)

有三点可以解决这个问题。

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

答案 7 :(得分:0)

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

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();

答案 8 :(得分:0)

我终于设法解决了这个问题。首先我更新了IabHelper,但这没有用。然后我注意到依赖编译了com.google.android.gms:play-services:6.1.71'在build.gradle中。我将其更改为com.google.android.gms:play-services:9.4.0。这导致了许多编译错误。但是,我使用版本9.4.0的个人谷歌服务,而不是使用9.4.0版本的播放服务。在我的例子中,只有com.google.android.gms:play-services-auth:9.4.0和com.google.android.gms:play-services-drive:9.4.0。这只给出了我在代码中修复的一些编译错误。然后,我推动谷歌播放为alpha,等待2天。我上传的版本没有弹出警告提示。

谢谢。

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

答案 9 :(得分:0)

我遇到了这个问题,无法负担更新基于eclipse的旧管道。所以我基本上反编译了谷歌播放服务的库,修补了eb.java和dx.java中的漏洞,重新编译了这两个文件并将它们放入原始的JAR文件中。这解释为in my blog

答案 10 :(得分:0)

所有答案都是正确的。我所做的是更新谷歌播放服务和IAB助手,而不是使用IAB助手,我在谷歌应用程序购买教程中描述了方法,并修复了通知。