Google Play предупреждение неправильная реализация Google Play iNAPP биллинга

Я только что получил следующее письмо от Google Play

'Привет Google Play Разработчик,

мы обнаружили, что ваши приложения, перечисленные в конце этого письма, вызов службы биллинга в приложении без установки целевого пакета за намерение. Это может позволить вредоносному пакету обойти игру хранить платежную систему и элементы доступа, которые не были приобретены.

Следующие Шаги

Если вы используете IabHelper, пожалуйста, начните использовать последний SDK. Если вы вручную вызывая службу биллинга в приложении, убедитесь, что вы вызова "намерения".setPackage("com по.андроид.вендинг") на любые намерения "com.андроид.продажа.фактурирование.InAppBillingService.СВЯЗЫВАТЬ." Войдите в консоль разработчика и отправить обновленную версию приложения. Проверьте через пять часов - мы покажем предупреждающее сообщение, если приложение не был обновлен правильно.'

Я не уверен, что это исправление эта проблема. Кто-нибудь может сказать, где указать код? Это где-то в классе Java или Манифесте?

11 ответов


Я получил то же самое предупреждение несколько дней назад и уже устанавливал пакет для намерения следующим образом:

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)... если вы используете какие-либо API Google Play, убедитесь, что вы обновили их до новейших версий и, надеюсь, это исправит его для вас.


мы также получили это предупреждение и проверили наши apks. Мы нашли старую версию Google-Play-сервиса.jar, похоже, использует intent для " com.андроид.продажа.фактурирование.InAppBillingService.BIND", без установки setPackage.

мы также проверили последнюю версию Google-Play-Service.Джар и этот были в порядке, поэтому я бы предложил проверить вашу библиотеку.


Поиск всего репозитория кода для следующего оператора кода.

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

везде, где вы использовали вышеуказанное намерение, не забудьте добавить этот код ниже serviceIntent.setPackage("com.android.vending");

было два вхождения вышеуказанного намерения во всей моей базе кода, один был в файле java IabHelper, если бы вы использовали последний в App billing sdk, этот оператор уже был бы добавлен, другое вхождение, я использовал это намерение, чтобы проверить, доступна ли служба выставления счетов InApp, у меня есть забыл добавить serviceIntent.setPackage("com.android.vending");, Как только я понял это и обновил свое приложение в консоли разработчика, предупреждающее сообщение было удалено через несколько часов.


вы должны обновить файлы IabHelper с помощью последнего SDK из:

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.

запомнить имя пакета обновления в новых файлах, если ты изменил его.

EDIT: также, наконец, мне нужно обновить google_play_services.jar lib включен в мой проект. После обновления это уведомление скрыто. Я использовал более старый сервис Google play. Теперь я использую версию rev 28.


исправление будет в вашей Java. Поиск вашей кодовой базы для намерения с действием "com.android.vending.billing.InAppBillingService.BIND", либо передано в конструктор, либо установлено через 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


есть три момента, чтобы решить эту проблему.

  1. найти com.android.vending.billing.InAppBillingService.BIND в ваши коды. Пусть каждое намерение для этого вызовет метод Intent.setPackage(“com.android.vending”).
  2. обновить SDK IabHelper.
  3. обновление проекта Google Play Service library. Убедитесь, что все сделано правильно. Каждый упущенный момент ведет к этой проблеме. Если проблема все еще существует, возможно, что-то не так с другими банками в вашем проекте.

Я получил такое же предупреждение. Я уже устанавливал пакет при привязке 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();

мне наконец-то удалось решить эту проблему. Сначала я обновил IabHelper, но это не помогло. Затем я заметил, что com-компиляция зависимостей.гуглить.андроид.gms: play-услуги: 6.1.71 ' в сборке.градля. Я изменил это на com.гуглить.андроид.gms: play-услуги: 9.4.0. Это вызывало множество ошибок компиляции. Но, вместо того, чтобы использовать 9.4.0 версию play-services, я использовал отдельные сервисы google версии 9.4.0. В моем случае это только COM.гуглить.андроид.gms: play-услуги-auth: 9.4.0 и com.гуглить.андроид.gms: play-услуги-привод: 9.4.0. Это дает только несколько ошибок компиляции, которые я исправил в коде. Затем я нажал на google play как альфа, подождал 2 дня. Предупреждение не появилось для сборки, которую я загрузил.

спасибо.

Edit: я не думаю, что нам нужно изменить IabHelper.java, пока он устанавливает setPackage ("com.андроид.продажа.)" Я вернул IabHelper.java, и загрузил сборку только с версией 9.4.0 play-services-drive и play-services-auth изменения. Он не бросал предупреждения.


не тестировал это решение, но вы все равно можете попробовать: replace serviceIntent.setPackage("com.android.vending"); с serviceIntent.setPackage("com.android.vending.billing.InAppBillingService.BIND"); in https://github.com/googlesamples/android-play-billing/blob/master/TrivialDrive/app/src/main/java/com/example/android/trivialdrivesample/util/IabHelper.java#L297 или где - нибудь у вас есть setPackage вещь. Овации.

обновление: просто обновите Google Play Services lib, работал на меня. Овации.


У меня была эта проблема, и я не мог позволить себе обновить наш старый конвейер, основанный в eclipse. Поэтому я в основном декомпилировал библиотеку сервиса google play, исправил уязвимости в eb.java и dx.java, перекомпилировал эти два файла и поместил их в исходный файл JAR. Это объясняется в своем блоге.


все ответы верны. То, что я сделал, это обновления Google play services и IAB helper и вместо использования IAB helper я sed метод, описанный в google в App purchases tutorial, и он исправил уведомления.