【问题标题】:Google Play Warning Incorrect Implementation of Google Play inApp BillingGoogle Play 警告 Google Play inApp 计费的错误实施
【发布时间】:2016-07-28 17:03:25
【问题描述】:

我刚刚收到来自 Google Play 的以下电子邮件

'您好 Google Play 开发者,

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

接下来的步骤

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

我不确定解决此问题的方法是什么。谁能告诉在哪里指定代码?它是在 Java Class 还是 Manifest 中的某个地方?

【问题讨论】:

    标签: android google-play android-security


    【解决方案1】:

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

    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 API,请确保将它们更新到最新版本版本,希望这也能为您解决问题。

    【讨论】:

    • 已经指定了包,但我仍然更新了播放服务以及 AIDL 文件和 IAP 助手,但仍然没有删除通知。现在还能做什么?
    • 如何在 Android Studio 项目中更新 Google Play Service?
    【解决方案2】:

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

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

    【讨论】:

    • 您使用的是哪个版本以及您迁移到什么版本?
    • 已经指定了包,但我仍然更新了播放服务以及 AIDL 文件和 IAP 助手,但仍然没有删除通知。现在还能做什么?
    • 好收获。我没有怀疑谷歌图书馆有问题。所以基本上,就我而言,谷歌在开发者控制台中发出警报,说我的应用程序存在漏洞,但实际上是他们的库代码。他们可以发送电子邮件说“请更新我们的图书馆。我们在那里犯了严重的错误。很抱歉,这不会再发生了。干杯 - 这是50美元的麻烦;p”。我只是很苛刻,因为我已经浪费了时间来解决这个问题。
    • @JawadAmjad google 现在显示哪些类存在此漏洞。检查开发者控制台。就我而言,它是com.google.android.gms.internal.dxcom.google.android.gms.internal.eb
    【解决方案3】:

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

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

    无论你在哪里使用过上述意图,别忘了在serviceIntent.setPackage("com.android.vending");下面添加这段代码

    在我的整个代码库中出现了两次上述意图,一次出现在 IabHelper java 文件中如果 InApp 计费服务可用,我忘了添加 serviceIntent.setPackage("com.android.vending");,一旦我发现并在开发者控制台中更新了我的应用程序,警告消息在几个小时后被删除。

    【讨论】:

    • 已经指定了包,但我仍然更新了播放服务以及 AIDL 文件和 IAP 助手,但仍然没有删除通知。现在还能做什么?
    【解决方案4】:

    您必须使用来自以下位置的最后一个 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 版本。

    【讨论】:

    • 已经指定了包,但我仍然更新了播放服务以及 AIDL 文件和 IAP 助手,但仍然没有删除通知。现在还能做什么?
    • 阅读我上次的编辑,如果您将 google play services lib 包含在您的项目中并且它是旧版本,则必须更新它。
    【解决方案5】:

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

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

    【讨论】:

      【解决方案6】:

      解决这个问题有三点。

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

      【讨论】:

      • 每件事都已完成并多次验证,但通知仍然存在。
      • 我认为您可以创建一个仅使用 jars 的新测试应用程序。如果您的测试应用程序中出现警告,则表示问题出在您的 jars 中。如果不是,则表示问题出在您的代码中。 @JawadAmjad
      • 这似乎不是一个实用的解决方案,因为这需要正确发布应用程序。并且测试应用无法发布,它将被 Google Play 团队拒绝
      【解决方案7】:

      我收到了同样的警告。我在绑定 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】:

        我终于设法解决了这个问题。首先,我更新了 IabHelper,但这并没有帮助。然后我注意到 build.gradle 中有一个依赖项编译了“com.google.android.gms:play-services:6.1.71”。我将其更改为 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 的身份推送了 google play,等了 2 天。我上传的构建没有弹出警告警报。

        谢谢。

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

        【讨论】:

          【解决方案9】:

          没有测试此解决方案,但您仍可以尝试:将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 服务库,对我有用。干杯。

          【讨论】:

          • 已经指定了包,但我仍然更新了播放服务以及 AIDL 文件和 IAP 助手,但仍然没有删除通知。现在还能做什么?
          【解决方案10】:

          我遇到了这个问题,无法更新基于 Eclipse 的旧管道。所以我基本上反编译了google play服务的库,修补了eb.java和dx.java的漏洞,重新编译了这两个文件,放到了原来的JAR文件中。这是解释in my blog

          【讨论】:

            【解决方案11】:

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

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2017-07-03
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2015-03-13
              • 2014-06-14
              相关资源
              最近更新 更多