¿Cuándo usar restreCompletedTransactions para comprar en la aplicación?

Para una aplicación básica con compras in-app no restreCompletedTransactions ¿alguien ha descubierto las mejores prácticas para usar restreCompletedTransactions de restreCompletedTransactions ?

Observaciones

Sé que se recomienda registrar siempre un observador de transacción para recibir transactions pendientes que regresen a la aplicación, pero esta es una pregunta diferente. Parece que restreCompletedTransactions es algo en lo que la aplicación tiene que decidir activamente cuándo llamar a la encuesta para 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 dispositivo nuevo de tal manera que se pierdan o reinicien los loggings locales de la aplicación de los pagos anteriores.

Preocupaciones

Lo que no me queda claro es cómo detectar automáticamente esta condición (es decir, cómo decidir cuándo realizar la encuesta para las compras faltantes) de manera confiable. No quiero arruinar esto y riesgo negar a un cliente el acceso a la funcionalidad que ya han pagado.

Al mismo time, no quiero llamar a restreCompletedTransactions cada vez que la aplicación se inicia solo para estar seguro y básicamente recuperar transactions que ya conozco del 99.9% del time. (Excepto por la compra en la aplicación, mi aplicación realmente no requiere ninguna conectividad de networking).

Notas

La documentation de Apple aclara que los clientes no cobran de nuevo por ninguna compra no consumible que ya hayan realizado. Si intentan volver a comprar, se supuestamente 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 así me gustaría evitar llevarlos por un path que se asemeja a la recompra de algo que ya pagaron.

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 pnetworkingeterminados del usuario si se ha llamado a restreCompletedTransactions (y se ha completado con éxito) aún en la aplicación. De lo contrario, la aplicación lo llama una vez al inicio. Dado que este indicador se puede almacenar en el mismo lugar que los pagos no consumibles, si los valores pnetworkingeterminados del usuario se borran posteriormente, el método de restauración se volverá a llamar cuando se inicie la aplicación.

De esta manera, si un cliente existente está de alguna manera haciendo una nueva installation de la aplicación, todavía obtienen sus compras restauradas automáticamente. Si son clientes nuevos que nunca antes han lanzado la aplicación, la operación de restauración no devuelve nada.

En cualquier caso, restreCompletedTransactions solo se llama una vez en lugar de cada lanzamiento.

Manual (recomendado)

Otra opción es ofrecer al cliente un button "Restaurar compras" en alguna parte, restreCompletedTransactions a restreCompletedTransactions y dejar que ellos decidan si es necesario.

(Los comentarios a continuación explican por qué una restauración manual es probablemente mejor que intentar hacerlo automáticamente).

No olvide que una identificación de Apple puede abarcar múltiples dispositivos. Por lo tanto, mantener una bandera en un dispositivo (por ejemplo, el iPhone del usuario) que le indica si ha realizado una restauración no le permitirá detectar si el cliente realizó una compra en otro dispositivo (por ejemplo, su iPad) que necesita para ser restaurado en el iPhone. Así que tener un método manual para iniciar una restauración TAMBIÉN es necesario, incluso si tienes un método automático.

Para empeorar las cosas, aún no me di count de cómo te notifican cuando se realizan REEMBOLSOS de IAP. Sospecho que el process de restauración simplemente devolverá una list de las transactions no reembolsadas. Entonces a) debes borrar tu logging de los IAP del usuario cuando realices la restauración en caso de que los productos reembolsados ​​simplemente no se informen durante la restauración, yb) debes hacer un restablecimiento periódico de manera automática para recuperar los reembolsos.

Todo esto resalta el problema con el IAP de Apple: está mal concebido y documentado de forma inadecuada, y ahora es OBLIGATORIO para los proveedores de contenido como lectores de libros electrónicos que ya tienen tiendas en funcionamiento perfectamente basadas en la web que ya funcionan en sus aplicaciones (como Kindle).

Siempre que tenga una compra in-app no ​​consumible, por ejemplo, un Race Track nuevo, debe implementar un button 'Restaurar' en algún lugar de la aplicación para que el usuario pueda restaurar su compra si cambian de dispositivo o borran la aplicación. Esto es obligatorio y Apple rechazó una aplicación antes por no implementar el button Restaurar.