谷歌Play警告:Google Play内购实现不正确

18
我刚刚收到了来自Google Play的电子邮件。
我们检测到您在此电子邮件末尾列出的应用程序正在调用应用内计费服务而未为意图设置目标包。这可能会使恶意包绕过Play商店计费系统并访问未购买的物品。
下一步:
如果您正在使用IabHelper,请开始使用最新的SDK。如果您手动调用应用内计费服务,请确保在任何指向“com.android.vending.billing.InAppBillingService.BIND”的意图上调用Intent.setPackage(“com.android.vending”)。登录到您的开发者控制台并提交您的应用程序的更新版本。五个小时后查看——如果应用程序没有正确更新,我们将显示警告消息。
我不确定如何解决这个问题。有人能告诉我在哪里指定代码吗?是在Java类还是清单中?
11个回答

3
我们也收到了这个警报,并检查了我们的apk文件。我们发现旧版本的Google-Play-Service.jar似乎使用意图来绑定“com.android.vending.billing.InAppBillingService.BIND”,但没有设置setPackage。
我们还检查了最新的Google-Play-Service.jar,这个是没有问题的,所以建议您检查一下您的库。

你当时使用的是哪个版本?现在用的是哪个版本? - Jeff L.
包已经被指定了,但我更新了Play服务以及AIDL文件和IAP Helper,但通知仍未被删除。现在还能做什么? - Jawad Amjad
好的发现。我没有怀疑谷歌的库有问题。基本上,在我的情况下,谷歌在开发者控制台中放置了警报,说我的应用程序存在漏洞,但实际上是他们的库代码有问题。他们本可以发送电子邮件说“请更新我们的库。我们在那里犯了可怕的错误。我们很抱歉,这不会再次发生。干杯——这里有50美元的麻烦费;p”。我只是有点苛刻,因为我浪费了时间来解决这个问题。 - Wojciech
@JawadAmjad 谷歌现在显示哪些类存在此漏洞。请在开发者控制台中检查。在我的情况下,它是 com.google.android.gms.internal.dxcom.google.android.gms.internal.eb - Wojciech

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服务版本并将目标版本从KitKat(4.4)更改为Lollipop(5.1),该问题已得到解决...如果您正在使用任何Google Play Api,请确保将它们更新到最新版本,希望这也能为您解决此问题。

包已经指定了,但我还是更新了Play服务以及AIDL文件和IAP助手,但通知仍未被移除。现在还能做什么? - Jawad Amjad
如何在Android Studio项目中更新Google Play服务? - Bagusflyer

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库。 更新后,此通知警报已隐藏。 我之前使用的是较旧的Google Play服务库。 现在我正在使用rev 28版本。


好的,套件已经指定了,但是我还是更新了Play服务以及AIDL文件和IAP Helper,但是通知还是没有移除。现在还能做什么呢? - Jawad Amjad
请阅读我的最新编辑,如果您在项目中包含旧版本的Google Play服务库,则必须更新它。 - jlgsoftware

2

搜索您的整个代码存储库以查找以下代码语句。

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

在您使用上述意图的任何地方,请不要忘记添加以下代码:serviceIntent.setPackage("com.android.vending");

在我整个代码库中有两个以上的意图,其中一个出现在IabHelper Java文件中,如果您使用最新的应用内购买SDK,则此语句已经被添加。 另一个意图是我使用此意图来检查InApp计费服务是否可用,我忘记了添加 serviceIntent.setPackage("com.android.vending")。 一旦我发现并更新了我的开发者控制台中的应用程序,几小时后警告消息就被删除了。


包已经指定了,但我还是更新了Play服务以及AIDL文件和IAP助手,但通知仍未被移除。现在还能做什么? - Jawad Amjad

0

我终于解决了这个问题。首先,我更新了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-services的9.4.0版本。在我的情况下,它只有com.google.android.gms:play-services-auth:9.4.0和com.google.android.gms:play-services-drive:9.4.0。这只会产生一些编译错误,我在代码中进行了修复。然后,我将其作为alpha推送到Google Play上,等待2天。我上传的构建没有弹出警告提示。

谢谢。

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


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


0

我没有测试过这个解决方案,但你仍然可以尝试一下:在https://github.com/googlesamples/android-play-billing/blob/master/TrivialDrive/app/src/main/java/com/example/android/trivialdrivesample/util/IabHelper.java#L297或任何你设置了setPackage的地方,将serviceIntent.setPackage("com.android.vending");替换为serviceIntent.setPackage("com.android.vending.billing.InAppBillingService.BIND");。祝好运。

更新:我刚刚更新了Google Play服务库,对我有用。祝好运。


包已经指定了,但我还是更新了Play服务以及AIDL文件和IAP助手,但通知仍未被移除。现在还能做什么? - Jawad Amjad

0

解决此问题有三个要点。

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

每件事情都已经完成并验证了很多次,但通知仍然存在。 - Jawad Amjad
我认为你可以创建一个仅包含JAR文件的新测试应用程序。如果警告出现在你的测试应用程序中,那么问题就在于你的JAR文件。如果没有出现警告,则问题可能出在你的代码上。@JawadAmjad - ColdenBean
似乎这不是一个实际的解决方案,因为这需要一个应用程序被正确发布。而测试应用程序无法发布,否则将被Google Play团队拒绝。 - Jawad Amjad

0

我曾经遇到这个问题,而且无法承担更新我们基于Eclipse的旧管道。因此,我基本上反编译了Google Play服务库,修补了eb.java和dx.java中的漏洞,重新编译了这两个文件,并将它们放入原始的JAR文件中。这在我的博客中有详细解释。


0
所有答案都是正确的。我所做的是更新Google Play服务和IAB助手,而不是使用IAB助手,我使用了Google在应用内购买教程中描述的方法,这样就修复了通知问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接