iphone - tiempo - ¿Cuándo usar restoreCompletedTransactions para compras en la aplicación?
tiempo en pantalla iphone contraseña (3)
Para una aplicación básica con compras en la aplicación no restoreCompletedTransactions
¿alguien ha descubierto las mejores prácticas para usar las TFP de restoreCompletedTransactions
de restoreCompletedTransactions
?
Observaciones
Sé que se recomienda registrar siempre a un observador de transacciones para recibir transacciones pendientes que vuelven a la aplicación, pero esta es una pregunta diferente. Parece que restoreCompletedTransactions
es algo que la aplicación tiene que decidir activamente cuándo llamar para sondear todas las compras que el cliente ya ha realizado.
Por lo que puedo decir, el método está diseñado para recuperar compras que pueden haberse perdido. Por ejemplo, un cliente puede instalar o mover una aplicación a un nuevo dispositivo de forma que los registros locales de la aplicación de pagos anteriores se pierdan o se restablezcan.
Preocupaciones
Lo que no tengo claro es cómo detectar automáticamente esta condición (es decir, cómo decidir cuándo sondear si faltan compras) de manera confiable. No quiero arruinar esto y arriesgarme a negarle a un cliente el acceso a la funcionalidad que ya ha pagado.
Al mismo tiempo, no quiero llamar a restoreCompletedTransactions
cada vez que se lanza la aplicación solo para estar seguro y básicamente recuperar transacciones que ya conozco el 99.9% del tiempo. (Excepto por las compras en la aplicación, mi aplicación realmente no requiere conectividad de red).
Notas
La documentación de Apple aclara que a los clientes no se les vuelve a cobrar por las compras no consumibles que ya hayan realizado. Si intentan volver a comprar, se supone que todavía se envía una transacción de pago a la aplicación.
En el peor de los casos, un cliente podría recuperar las compras de esta manera, pero aún me gustaría evitar llevarlas por un camino que se asemeje a volver a comprar algo que ya han pagado.
Después de escribir la pregunta y pensar en ello, se me ocurrió un par de soluciones.
Automático (no recomendado)
Una opción es registrar en los valores predeterminados del usuario si restoreCompletedTransactions
ha sido llamado (y completado con éxito) aún en la aplicación. Si no, la aplicación lo llama una vez en la puesta en marcha. Dado que esta bandera se puede almacenar en el mismo lugar que los pagos no consumibles, si los valores predeterminados del usuario se eliminan posteriormente, el método de restauración se volvería a llamar cuando se inicie la aplicación.
De esta forma, si un cliente existente realiza de alguna manera una nueva instalación de la aplicación, aún así se restaurarán sus compras automáticamente. Si es un cliente nuevo que nunca ha lanzado la aplicación antes, la operación de restauración no devuelve nada.
En cualquier caso, restoreCompletedTransactions
solo se llama una vez en lugar de en cada inicio.
Manual (recomendado)
Otra opción es ofrecer al cliente un botón "Restaurar compras" en alguna parte, conectarlo para restoreCompletedTransactions
y dejar que decidan si es necesario o no.
(Los comentarios a continuación explican por qué una restauración manual es probablemente mejor que tratar de hacerlo automáticamente).
No olvide que una ID de Apple puede abarcar varios dispositivos. Por lo tanto, mantener un indicador en un dispositivo (por ejemplo, el iPhone del usuario) que le indique si ha restaurado o no, no le permitirá detectar si el cliente realizó una compra en otro dispositivo (digamos su iPad) que necesita para restaurar en el iPhone. Así que tener un método manual para iniciar una restauración también es necesario, incluso si tiene un método automático.
Para empeorar las cosas, aún no he descubierto cómo se te notifica cuando se realizan los REEMBOLSOS de los IAP. Sospecho que el proceso de restauración simplemente devolverá una lista de las transacciones no reembolsadas. Por lo tanto, a) debe ELIMINAR su registro de los IAP del usuario cuando realiza la restauración en caso de que los productos reembolsados simplemente no se informen durante la restauración, yb) debe realizar una restauración de forma periódica para recoger los reembolsos.
Todo esto resalta el problema con el IAP de Apple: está mal concebido y documentado inadecuadamente, y ahora es REQUERIDO para proveedores de contenido como lectores de libros electrónicos que ya tienen tiendas basadas en la web que funcionan perfectamente en sus aplicaciones (como Kindle).
Siempre que tenga una compra en la aplicación no consumible, por ejemplo, un nuevo Circuito de Carreras, debe implementar un botón ''Restaurar'' en alguna parte de la aplicación para que el usuario pueda restaurar su compra si cambia de dispositivo o elimina la aplicación. Esto es obligatorio y Apple ha rechazado una aplicación antes por no implementar el botón Restaurar.