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

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

«Уважаемый разработчик Google Play!

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

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

Если вы используете IabHelper, начните использовать последнюю версию SDK. Если вы вручную вызываете службу биллинга в приложении, убедитесь, что вы вызываете Intent.setPackage («com.android.vending») с любыми намерениями в «com.android.vending.billing.InAppBillingService.BIND». Войдите в консоль разработчика и отправьте обновленную версию своего приложения. Повторите попытку через пять часов - мы покажем предупреждающее сообщение, если приложение не было обновлено правильно ».

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


person Jawad Amjad    schedule 28.07.2016    source источник


Ответы (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, убедитесь, что вы обновили их до новейших версий и, надеюсь, это исправит это и для вас.

person Graham    schedule 29.07.2016
comment
Ну, пакет уже был указан, но я все же обновил Play Service вместе с файлом AIDL и IAP Helper, но уведомление все равно не удалено. Что еще можно сделать сейчас? - person Jawad Amjad; 03.08.2016
comment
Как обновить сервис Google Play в проекте Android Studio? - person Bagusflyer; 16.02.2019

Мы также получили это предупреждение и проверили наши файлы APK. Мы обнаружили, что старая версия Google-Play-Service.jar, похоже, использует намерение для com.android.vending.billing.InAppBillingService.BIND без установки setPackage.

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

person user3471022    schedule 29.07.2016
comment
На какой версии вы были и на что перешли? - person Jeff L.; 29.07.2016
comment
Ну, пакет уже был указан, но я все же обновил Play Service вместе с файлом AIDL и IAP Helper, но уведомление все равно не удалено. Что еще можно сделать сейчас? - person Jawad Amjad; 02.08.2016
comment
Хороший улов. Я не подозревал, что библиотека googles неисправна. По сути, в моем случае Google поставил предупреждение в консоли разработчика о том, что в моем приложении есть уязвимость, но на самом деле это был код их библиотеки. Они могли просто отправить электронное письмо с просьбой обновить нашу библиотеку. Мы сделали там ужасные ошибки. Сожалеем, этого больше не повторится. Ура - 50 долларов за хлопоты; с. Я просто груб, так как потерял время, чтобы разобраться в этом. - person Wojciech; 23.08.2016
comment
Google @JawadAmjad теперь показывает, в каких классах есть эта уязвимость. Проверьте в консоли разработчика. В моем случае это были com.google.android.gms.internal.dx и com.google.android.gms.internal.eb - person Wojciech; 23.08.2016

Найдите следующий оператор кода по всему репозиторию кода.

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

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

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

person Ezhil    schedule 29.07.2016
comment
Ну, пакет уже был указан, но я все же обновил Play Service вместе с файлом AIDL и IAP Helper, но уведомление все равно не удалено. Что еще можно сделать сейчас? - person Jawad Amjad; 02.08.2016

Вы должны обновить свои файлы 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.

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

РЕДАКТИРОВАТЬ: Наконец, мне нужно обновить библиотеку google_play_services.jar, включенную в мой проект. После обновления это уведомление было скрыто. Я использовал старую библиотеку службы Google Play. Сейчас я использую версию 28 rev.

person jlgsoftware    schedule 29.07.2016
comment
Ну, пакет уже был указан, но я все же обновил Play Service вместе с файлом AIDL и IAP Helper, но уведомление все равно не удалено. Что еще можно сделать сейчас? - person Jawad Amjad; 02.08.2016
comment
прочтите мое последнее изменение, вы должны обновить библиотеку сервисов Google Play, если вы включаете ее в свой проект, и это более старая версия. - person jlgsoftware; 03.08.2016

Исправление будет в вашем 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

person grendell    schedule 28.07.2016

Есть три способа решить эту проблему.

  1. Найдите com.android.vending.billing.InAppBillingService.BIND в своих кодах. Пусть каждое намерение этого вызывает метод Intent.setPackage(“com.android.vending”).
  2. Обновите SDK для IabHelper.
  3. Обновите проект библиотеки Google Play Service. Убедитесь, что все это сделано правильно. Каждая отмененная точка ведет к этой проблеме. Если проблема все еще существует, возможно, что-то не так с другими банками в вашем проекте.
person ColdenBean    schedule 09.08.2016
comment
все делается и проверяется много раз, но уведомления остаются. - person Jawad Amjad; 09.08.2016
comment
Я думаю, вы можете создать новое тестовое приложение, которое работает только с jar-файлами. Если предупреждение появляется в вашем тестовом приложении, это означает, что проблема в ваших jar-файлах. Если нет, значит проблема в ваших кодах. @JawadAmjad - person ColdenBean; 10.08.2016
comment
Это не кажется практическим решением, поскольку для этого требуется, чтобы приложение было правильно опубликовано. И тестовое приложение не может быть опубликовано, оно будет отклонено командой Google Play. - person Jawad Amjad; 10.08.2016

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

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

Спасибо.

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

person paachi    schedule 14.08.2016

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

ОБНОВЛЕНИЕ: просто обновите библиотеку сервисов Google Play, у меня сработало. Ваше здоровье.

person sssemil    schedule 29.07.2016
comment
Ну, пакет уже был указан, но я все же обновил Play Service вместе с файлом AIDL и IAP Helper, но уведомление все равно не удалено. Что еще можно сделать сейчас? - person Jawad Amjad; 02.08.2016

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

person Community    schedule 09.09.2016

Все ответы верны. Что я сделал, так это обновил сервисы Google Play и помощник IAB, и вместо использования помощника IAB я использовал метод, описанный в Google в руководстве по покупкам приложений, и исправил уведомления.

person Jawad Amjad    schedule 11.09.2016