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
- Obtener cumpleaños para cada contacto en la aplicación de Android
- Evitar que RecyclerView muestre contenido anterior al desplazarse
- Mockito con Robolectric: "ClassCastException se produjo al crear el proxy"
- Cómo reemplazar / cambiar el botón de la imagen mediante programación android
- Explorador abierto de Android del servicio evitando múltiples pestañas
- 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?
- Obtener el idioma del teclado o detectar el idioma de entrada del usuario en Android
- No se pueden obtener eventos en mi libgdx Actor
- Java.net.ProtocolException: Demasiados redireccionamientos: 21 Aplicación para Android
- ¿Cómo establecer el límite de los elementos coincidentes devueltos por DynamoDB utilizando Java?
- Android onConfigurationChanged no se llama
- ¿Cómo puedo hacer una barra de progreso personalizada en la barra de acción?
- File.list () devuelve null para directorio
- Retrofit + OkHttp está bien al enviar solicitudes GET, pero da SocketTimetout al enviar POST
¡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.")); } } }
- Choque del selector de Android LiveWallpaper
- ImageView scaleType = "fitXY" no funciona en el dispositivo pre-lollipop dentro de Cardview | Androide