Биллинговое обслуживание недоступно на устройстве. (Ответ: 3: выставление счетов недоступно)

Я уже много дней борюсь с этой проблемой. Я знаю, что есть много вопросов с той же проблемой на SO, но я не мог заставить его работать.

Что я наделал

  • Загружено APK в бета-фазе
  • Созданный торговый счет
  • Добавлен тестовый пользователь

Код

AndroidManifest.xml

<uses-permission android:name="com.android.vending.BILLING" />

MainActivity.java

 public class MainActivity extends AppCompatActivity { private IabHelper mHelper; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // ... setupInAppBillings(); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (!mHelper.handleActivityResult(requestCode, resultCode, data)) { super.onActivityResult(requestCode, resultCode, data); } } // [....] private void setupInAppBillings() { String base64EncodedPublicKey = "MY PUBLIC KEY"; mHelper = new IabHelper(this, base64EncodedPublicKey); mHelper.startSetup(new IabHelper.OnIabSetupFinishedListener() { public void onIabSetupFinished(IabResult result) { if (!result.isSuccess()) { Toast.makeText(getContext(), "In-app Billing setup failed: " + result, Toast.LENGTH_SHORT).show(); } else { Toast.makeText(getContext(), "In-app Billing is set up OK", Toast.LENGTH_SHORT).show(); } } }); } } 

Протестировано

  • Huawei P8 (версия Google Play версии 6.2.14)
  • В Швейцарии, поэтому поддерживаемая страна для In-App Billing

Что я пробовал

  • Удаленный кеш и данные из Google Play
  • Учебник с сайта Google Developer
  • Прошел контрольный список от пользователя sokie: ответ соки

Единственное, что я не сделал из этого списка, – это установка библиотеки проверки лицензии (LVL). Но я не мог найти никакой информации о том, что этот шаг необходим для покупки в приложении. Если не нужно, я хочу сделать это без этой библиотеки, потому что мне это действительно не нужно, как указано на сайте Google.

Служба лицензирования Google Play предназначена в первую очередь для платных приложений, которые хотят убедиться, что текущий пользователь действительно заплатил за приложение в Google Play.

Я что-то пропустил?

Наконец, я получил его на работу! Проблема заключалась в следующем: даже если я поместил IInAppBillingService.aidl в пакет com.android.vending.billing , сгенерированный класс был в неправильном пакете, как вы можете видеть в приведенном ниже коде.

 /* * This file is auto-generated. DO NOT MODIFY. * Original file: C:\\path\\src\\main\\aidl\\com\\android\\vending\\billing\\IInAppBillingService.aidl */ package billing; public interface IInAppBillingService extends android.os.IInterface { //... } 

Чтобы решить эту проблему, я удалил и com.android.vending.billing пакет com.android.vending.billing с помощью IInAppBillingService.aidl . Поэтому, если у вас такая же проблема, дважды проверьте, где была создана IInAppBillingService.java .

Недавно я столкнулся с этой проблемой. Как писал Бона Фиде, объявление пакета в файле IInAppBillingService.aidl должно быть установлено в «com.android.vending.billing», а файл helpl должен быть найден внутри соответствующего каталога с помощью проводника. Кроме того (и это была проблема в моем случае), в IabHelper.java параметр строки для serviceIntent должен быть таким же, как имя пакета, содержащее файл IInAppBillingService.aidl.

 Intent serviceIntent = new Intent("com.android.vending.billing.InAppBillingService.BIND");// correct package name: com.android.vending.billing serviceIntent.setPackage("com.android.vending"); List<ResolveInfo> intentServices = mContext.getPackageManager().queryIntentServices(serviceIntent, 0); if (intentServices != null && !intentServices.isEmpty()) { // service available to handle that Intent mContext.bindService(serviceIntent, mServiceConn, Context.BIND_AUTO_CREATE); } else { // no service available to handle that Intent if (listener != null) { listener.onIabSetupFinished( new IabResult(BILLING_RESPONSE_RESULT_BILLING_UNAVAILABLE, "Billing service unavailable on device.")); } } }