Hola lanzamos esta aplicación en el mercado con la facturación en aplicaciones y nuestros registros muestran que el servicio de facturación (posiblemente la aplicación en sí) mantiene gestaciones muertas de forma aleatoria en ciertos dispositivos de clientes. Debido a esto, a veces no puedo recibir la notificación si la compra fue exitosa o no. Algunos de los clientes a menudo tienen que comprar dos veces para hacer una compra exitosa. Aunque esto le sucede a un pequeño porcentaje de clientes, pero es muy preocupante. Alguna idea de por qué podría estar sucediendo o qué se puede hacer para evitar este problema.En el servicio de facturación de la aplicación que se mata en los momentos
Respuesta
¿Puedes poner el código utilizado para la facturación de tu aplicación? Podría ser que In aplicación de facturación no sea compatible con sus dispositivos o incluso si pierden la conexión a Internet cuando intentan acceder a la notificación de difusión de Android Market. Lo utilicé en mi aplicación es básicamente lo siguiente:
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
if(BillingHelper.isBillingSupported()){
switch (arg2) {
case 0:
Log.d("Appname", "30 coins");
BillingHelper.requestPurchase(context, "com.paid.smallcoinbundle");
break;
case 1:
Log.d("Appname", "85 coins");
BillingHelper.requestPurchase(context, "com.paid.medcoinbundle");
break;
case 2:
Log.d("Appname", "175 coins");
BillingHelper.requestPurchase(context, "com.paid.midcoinbundle");
break;
case 3:
Log.d("Appname", "500 coins");
BillingHelper.requestPurchase(context, "com.paid.maxcoinbundle");
break;
default: Log.d("Appname", "Something broke");
break;
}
// BillingHelper.requestPurchase(mContext, "android.test.purchased");
// android.test.purchased or android.test.canceled or android.test.refunded or com.blundell.item.passport
} else {
LayoutInflater inflater = getLayoutInflater();
View layout = inflater.inflate(R.layout.toast_layout,(ViewGroup) findViewById(R.id.toast_layout_root));
TextView text = (TextView) layout.findViewById(R.id.text);
text.setText("In App Billing isnt supported by your device");
Toast toast = new Toast(getBaseContext());
toast.setGravity(Gravity.CENTER_VERTICAL, 0, 0);
toast.setDuration(Toast.LENGTH_LONG);
toast.setView(layout);
toast.show();
return;
}
}
continuación:
public Handler mTransactionHandler = new Handler(){
public void handleMessage(android.os.Message msg) {
Log.d("Appname", "Transaction complete");
Log.d("Appname", "Transaction status: "+BillingHelper.latestPurchase.purchaseState);
Log.d("Appname", "Item purchased is: "+BillingHelper.latestPurchase.productId);
if(BillingHelper.latestPurchase.isPurchased()){
Log.d("Appname", "Ispurchased : " + BillingHelper.latestPurchase.productId);
if(BillingHelper.latestPurchase.productId.equals("com.paid.smallcoinbundle")){
ConnectToServer.UpdateCoins(context,id,"add","30");
}
if(BillingHelper.latestPurchase.productId.equals("com.paid.medcoinbundle")){
ConnectToServer.UpdateCoins(context,id,"add","85");
}
if(BillingHelper.latestPurchase.productId.equals("com..paid.midcoinbundle")){
ConnectToServer.UpdateCoins(context,id,"add","175");
}
if(BillingHelper.latestPurchase.productId.equals("com.paid.maxcoinbundle")){
ConnectToServer.UpdateCoins(context,id,"add","500");
}
finish();
}
};
};
Como dijo que la facturación de la aplicación funciona, aunque a veces necesitan comprar el artículo dos veces, doy por sentado que los nombres de los paquetes son correctos.
Háganme saber si va a solucionarlo y cuál era el problema. Este es un tema muy interesante.
Esto es de hecho interesante, el código se escoge directamente del código de muestra de Google. Funciona perfectamente bien para la mayoría de los usuarios. Un puñado de ellos experimentan este problema. – the100rabh
En ese caso, probablemente sería un error con el sistema. Escriba un informe de error para el equipo Dev. Lamento que no pueda ayudarte. –
Hola Randy, gracias por intentar ayudarme :) – the100rabh
no estoy seguro de si va a ayudar, pero lo recomiendo para hacer su servicio de primer plano BillingService: http://developer.android.com/guide/components/services.html#Foreground
Aquí es parte de la documentación "API para poner el servicio en un estado plano, en el que el sistema considera es algo que el usuario conoce activamente y por lo tanto no es un candidato para matar cuando hay poca memoria. "
Podría ser que un pequeño porcentaje de su usuario tiene poca memoria y está empezando a matar servicios/aplicaciones (incluida la suya))
Sí, tienes razón acerca de la poca memoria. Eso es mi adivinación también, pero Pero convertirlo en un proceso en primer plano es una buena sugerencia. Esto podría ayudar. Pero el hecho es que todo el proceso parece reiniciarse, no solo el servicio. – the100rabh
En el caso de que no tenga actividades (o servicios) en primer plano en ese momento, el sistema puede (y muy probablemente lo hará) matar todo el proceso en condiciones de poca memoria. –
- 1. Servicio de Windows: no funciona en los momentos especificados (Delphi)
- 2. Error de facturación en la aplicación
- 3. Cuándo iniciar y detener el servicio de facturación en la aplicación?
- 4. ¿Qué sucede cuando se "mata" la aplicación de Android?
- 5. pruebas durante la aplicación de facturación
- 6. Reembolso de facturación en la aplicación de Android
- 7. ¿Cómo verifico que mi producto de facturación en la aplicación ya ha sido comprado en la aplicación por el usuario?
- 8. Facturación en la aplicación de Android Lista de productos dinámicos
- 9. Prueba de facturación en la aplicación con cuentas de prueba
- 10. Estructura de la aplicación de Android: DLC a través de la facturación en la aplicación
- 11. El contexto de la aplicación se mata, pero no la actividad
- 12. Inyectar la aplicación de aplicación de grises en el servicio
- 13. La alarma en el AlarmManager se borra cuando se mata el proceso
- 14. Facturación integrada en la aplicación en Android: preguntas
- 15. Cupones para la facturación integrada en la aplicación
- 16. Android: pregunta de facturación integrada en la aplicación
- 17. Ejecutar hilo de Java en momentos específicos
- 18. La experiencia con los sistemas de facturación
- 19. ¿Cómo utilizar la facturación en la aplicación con MonoDroid?
- 20. facturación en la aplicación para países no admitidos
- 21. ¿Cómo calculo los momentos de equinoccio/solsticio?
- 22. AVAudioRecorder El método de registro devuelve NO en momentos aleatorios
- 23. Facturación basada en la suscripción
- 24. Android desde la aplicación de verificación de facturación
- 25. Lista oficial de países para la facturación en la aplicación de Android?
- 26. ¿cómo puedo ver el seguimiento de la pila después de que se mata el proceso?
- 27. Facturación en la aplicación de Android: datos en blanco recibidos después de la compra
- 28. clase de cifrado y mcrypt_create_iv es lento en los momentos
- 29. Foreman no mata los procesos
- 30. Cómo corregir: "Esta versión de la aplicación no está configurada para la facturación en el mercado"?
¿En qué punto se está matando? Por lo general, va desde la notificación de difusión de Android Market -> Your BillingReceiver onReceived() -> BillingReceiver envía la intención de compra a BillingService -> BillingService maneja y actualiza la información comprada. –
La cosa es bastante aleatoria y todavía tengo que reproducir este problema en mi dispositivo. Le sucede a un pequeño porcentaje de usuarios, pero me gustaría arreglarlo de todos modos. – the100rabh
La aleatoriedad hace que sea mucho más difícil :) ¿Eres capaz de agregar más información de seguimiento en la aplicación? Acra es una herramienta de seguimiento de errores que encuentro útil. Además, también podría ser aplicaciones agresivas Task Killer. –