¿Cómo funciona la transacción de restauración en la facturación en la aplicación (Android)?

Intenté buscar sobre ese problema, pero no conseguí mucha información. Solo se que
– Restaurar en la aplicación de instalación de usuario por primera vez o cuando el usuario vuelva a instalar cuando se desinstala / borrar datos.
– La transacción de restauración sólo se aplica al producto administrado.
Intenté leer el ejemplo de la mazmorra, hay pocas líneas de código sobre la transacción de restauración como: cuándo llamar a la solicitud de restauración, cuándo obtener la respuesta de restauración … pero no sé:
– ¿Cómo obtener información de devolución? (como la identificación del artículo que usted ha comprado)

Alguien explique una vez más sobre el proceso de restauración de la transacción en la facturación en la aplicación.

¡¡¡Muchas gracias!!!

Editado: lo siento, no he trabajado en Android desde hace mucho tiempo, y ahora mismo no sé cuál es la respuesta correcta para esta pregunta, así que no puedo marcar la respuesta: P

El flujo típico es el siguiente:

  1. El usuario instala tu aplicación.

  2. En la primera carga de la aplicación, comprueba si necesitas restaurar las compras.

  3. Si lo hace, envíe una solicitud síncrona RESTORE_TRANSACTION a Google.

  4. Google responderá con una respuesta de confirmación a su solicitud RESTORE_TRANSACTION. (Esto es sólo una confirmación de que recibieron su solicitud.)

  5. En este momento, debe marcar que ya ha enviado una solicitud de restauración a Google y no es necesario enviar ninguna otra restauración desde la aplicación.

  6. Ahora, asincrónicamente, Google comenzará a enviar un evento "PURCHASE_STATE_CHANGED" a tu aplicación para cada compra en la aplicación que el usuario haya comprado previamente. Esta llamada es la misma que lo que Google habría enviado si el usuario había hecho esa compra por primera vez.

  7. Dado que es la misma llamada, su aplicación recoge el evento y lo maneja normalmente como si el usuario acaba de comprar el producto en la aplicación ("restaurando" la función comprada).

Con respecto a los pasos 2 y 5, lo que he hecho para mi aplicación es mantener un valor de SharedPreference denominado 'APP_INITIALISED' que defaults a false. Cada vez que mi aplicación se inicia, si 'APP_INITIALISED' es falsa, le digo a Google que RESTORE_TRANSACTION (paso 2), luego establezco APP_INITIALISED en true (paso 5).

No estoy seguro, pero creo que, después de la llamada restoreTransactions () será llamada onPurchaseStateChange con ids de artículos comprados.

Utilicé este método:

public static void restoreTransactionInformation(Long nonce){ if (amIDead()) { return; } Log.i(TAG, "confirmTransaction()"); Bundle request = makeRequestBundle("RESTORE_TRANSACTIONS"); // The REQUEST_NONCE key contains a cryptographically secure nonce (number used once) that you must generate request.putLong("NONCE", nonce); try { Bundle response = mService.sendBillingRequest(request); //The REQUEST_ID key provides you with a unique request identifier for the request Long requestIndentifier = (Long) response.get("REQUEST_ID"); Log.i(TAG, "current request is:" + requestIndentifier); //The RESPONSE_CODE key provides you with the status of the request Integer responseCodeIndex = (Integer) response.get("RESPONSE_CODE"); C.ResponseCode responseCode = C.ResponseCode.valueOf(responseCodeIndex); Log.i(TAG, "RESTORE_TRANSACTIONS Sync Response code: "+responseCode.toString()); } catch (RemoteException e) { Log.e(TAG, "Failed, internet error maybe", e); Log.e(TAG, "Billing supported: " + isBillingSupported()); } } 

Llama a esto usando

 BillingHelper.restoreTransactionInformation(BillingSecurity.generateNonce()); 

Yo atestiguaré la respuesta de @Frank Leigh con una edición que todas las compras vienen en un PURCHASE_STATE_CHANGED , con los datos firmados como sigue

 signedData:{ "nonce":1234*, "orders":[ { "orderId":"1234*.1234*", "packageName":"com.*", "productId":"**p1**", "purchaseTime":time, "purchaseState":0, "purchaseToken":"*" }, { "orderId":"1234*.1234*", "packageName":"com.*", "productId":"**p2**", "purchaseTime":time, "purchaseState":0, "purchaseToken":"*" }, { "orderId":"1234*.1234*", "packageName":"com.*", "productId":"**p3**", "purchaseTime":time, "purchaseState":0, "purchaseToken":"*" } ] } 
  • ¿Cómo comprobar la contraseña de un EditView?
  • Metaio sdk (openGL) frena la representación de fuente y de imagen
  • Guardar los datos de acceso (preferencias) android
  • ¿Cómo emitir un mensaje de confirmación (sí / no) de una tarea de Android?
  • Eclipse bloquea el acceso al proyecto -> propiedades -> ficha de Android
  • Evitar / prevenir que un fragmento se refresque al cambiar las pestañas
  • Android: ¿Presentar una notificación durante una llamada?
  • El LED de notificación de Android no utiliza mi color
  • React Native: La personalización de la fuente se hace diferente en Android e iOS
  • ¿Cómo obtengo las preferencias para trabajar en Android?
  • Reaccionar Nativo: error de análisis de paquetes
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.