El servicio de facturación no está disponible en el dispositivo. (Respuesta: 3: Facturación no disponible)

He estado luchando con este problema durante días. Sé que hay un montón de preguntas con el mismo problema en SO pero no pude conseguir que funcione.

Que he hecho

  • Subido de APK en fase beta
  • Cuenta mercantil creada
  • Añadido usuario de prueba

Código

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(); } } }); } } 

Probado en

  • Huawei P8 (Google Play Versión 6.2.14)
  • En Suiza, un país compatible con la facturación integrada en la aplicación

Lo que he intentado

  • Caché y datos eliminados de Google Play
  • Tutorial del sitio de Google Developer
  • Se pasó a través de la lista de control de usuario sokie: answer of sokie

Lo único que no he hecho de esta lista es la configuración de la Biblioteca de verificación de licencia (LVL). Pero no pude encontrar ninguna información que requiera este paso para una compra en la aplicación. Si no es necesario, quiero hacerlo sin esta biblioteca porque realmente no lo necesito como se indica en el sitio de Google.

El servicio de licencias de Google Play está destinado principalmente a aplicaciones pagadas que desean verificar que el usuario actual pagó la aplicación en Google Play.

¿Hay algo que extraño?

¡Finalmente conseguí que trabajara! El problema era el siguiente: Aunque puse el IInAppBillingService.aidl en el paquete com.android.vending.billing , la clase generada estaba en el paquete incorrecto como se puede ver en el código de abajo.

 /* * 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 { //... } 

Para solucionar esto, IInAppBillingService.aidl y recreé el paquete com.android.vending.billing con IInAppBillingService.aidl . Así que si tiene el mismo problema, compruebe dos veces dónde se generó el IInAppBillingService.java .

Hace poco me enfrenté a este problema. Como Bona Fide escribió, la declaración del paquete en IInAppBillingService.aidl debe establecerse en "com.android.vending.billing" y el archivo aidl debe encontrarse dentro del directorio correspondiente usando el explorador. Además (y ese era el problema en mi caso), en el IabHelper.java, el parámetro de cadena a serviceIntent debe ser el mismo que el nombre del paquete que contiene el archivo 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.")); } } } 
  • Uso de Android Calendar para obtener la hora actual
  • La Interfaz de JavaScript de WebView sólo parece funcionar a través de Instant-Run de Android Studio, pero no cuando se compila a través de gradle regular
  • Muchos módulos pequeños, o pocos módulos grandes para el mejor rendimiento de la construcción?
  • Espresso 2.0 - Método anotado con @Test dentro de la clase extendiendo junit3 testcase
  • Adición de objetos independientes a una RealmList
  • Cómo poner elementos anidados de archivo XML a la lista de objetos con VTD-XML parser?
  • Confundido acerca de cómo funciona el cifrado de Android
  • ¿Por qué vamos a Android ya que tenemos J2ME y WML para crear aplicaciones móviles?
  • Tint Bitmap con la pintura?
  • GreenDao getter para entidades relacionadas devuelve lista vacía
  • Unsatisfiedlinkerror con la actualización de Android 5.0.1
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.