我刚从Google Play收到以下电子邮件
' Google Play开发者,
我们检测到您在此电子邮件末尾列出的应用是 在不设置目标包的情况下调用应用内结算服务 为了意图。这可以使恶意程序包绕过Play 存储计费系统和访问尚未购买的项目。
后续步骤
如果您使用的是IabHelper,请开始使用最新的SDK。如果你 手动调用应用内结算服务,确保您是 在任何意图上调用Intent.setPackage(“com.android.vending”) " com.android.vending.billing.InAppBillingService.BIND&#34 ;.登录到 您的开发人员控制台并提交您应用的更新版本。 五小时后再回来 - 我们会在应用程序中显示警告消息 尚未正确更新。'
我不确定这个问题的解决方法是什么。任何人都可以告诉在哪里指定代码?它是在Java Class或Manifest中的某个地方吗?
答案 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文件:
当您覆盖旧文件时,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)
有三点可以解决这个问题。
com.android.vending.billing.InAppBillingService.BIND
。让每个Intent都调用方法Intent.setPackage(“com.android.vending”).
IabHelper
。答案 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助手,我在谷歌应用程序购买教程中描述了方法,并修复了通知。