Pregunta

Para una aplicación básica con las compras no consumible en la aplicación, ¿alguien ha averiguado mejores prácticas para el uso de restoreCompletedTransactions SKPaymentQueue?

Observaciones

Sé que se recomienda registrar siempre un observador de transacción para recibir las transacciones pendientes que hacen su camino de regreso a la aplicación, pero esto es una cuestión diferente. Parece que restoreCompletedTransactions es algo que la aplicación tiene que decidir cuándo llamar activamente para sondear todas las compras que el cliente ya ha hecho.

Por lo que puedo decir, el método está diseñado para recuperar las compras que se pueden haber perdido. Por ejemplo, un cliente puede instalar o mover una aplicación a un nuevo dispositivo de tal manera que los registros locales de la aplicación de los pagos anteriores se pierden o se restablecen.

Las preocupaciones

Lo que no me queda claro es cómo detectar automáticamente esta condición (es decir, cómo decidir cuando sondee para las compras que faltan) de una manera fiable. Yo no quiero arruinar esto y correr el riesgo de negar a un cliente el acceso a la funcionalidad que ya han pagado.

Al mismo tiempo, no quiero llamar restoreCompletedTransactions cada vez lanza la aplicación sólo para estar seguro y, básicamente, volver transacciones que ya sé sobre el 99,9% de las veces. (A excepción de las compras en la aplicación, mi aplicación en realidad no requiere ninguna conexión a la red.)

Notas

documentación de Apple aclara que los clientes no pagan más por las compras no consumibles que ya han hecho. Si tratan de volver a comprar, una transacción de pago está siendo supuestamente enviado a la aplicación.

peor de los casos, un cliente podría recuperar las compras de esta manera pero todavía me gustaría evitar caminar por un camino que se asemeja a la re-compra de algo que ya han pagado.

¿Fue útil?

Solución

Actualizar (junio de 2019)

de Apple documentación sobre este tema se actualizó en 2018 y es bastante amplia. Muchas de sus recomendaciones son coherentes con lo que terminamos averiguar aquí. El mayor desarrollo ya que esta cuestión fue publicada por primera vez en 2009 es el recibo de la App Store en iOS 7.

En caso de que el enlace se estropea en algún momento en el futuro, voy a citar algunos de los documentos aquí.

  

Restauración de los productos comprados

     

Los usuarios restaurar las transacciones para mantener el acceso a contenidos que ya han comprado. Por ejemplo, cuando se actualicen a un nuevo teléfono, que no pierden todos los elementos que adquirieron en el teléfono antiguo. Incluir algún mecanismo en su aplicación para permitir al usuario restaurar sus compras, tales como un botón Restaurar compras. Restauración de compras solicita las credenciales de aplicación de la tienda de los usuarios, que interrumpe el flujo de su aplicación:. Debido a esto, no restaure automáticamente las compras, sobre todo, no cada vez que se lanza la aplicación

     

En la mayoría de los casos, todo su aplicación tiene que hacer es actualizar su recepción y entregar los productos en su recibo. El recibo refrescado contiene un registro de las compras del usuario en esta aplicación, en este dispositivo o cualquier otro dispositivo. Sin embargo, algunas aplicaciones necesitan tomar un enfoque alternativo para una de las siguientes razones:

     
      
  • Si utiliza contenidos alojados por Apple, la restauración de las transacciones completadas da a su aplicación objetos de la transacción se utiliza para descargar el contenido.
  •   
  • Si tiene que soportar versiones de iOS antes de lo iOS 7, donde la recepción aplicación no está disponible, restaurar las transacciones realizadas en su lugar.
  •   
  • Si su aplicación utiliza las suscripciones no-renovación, su aplicación es responsable del proceso de restauración.
  •   
     

La actualización de la recepción pide a la tienda de aplicaciones para la última copia del recibo. La actualización de un recibo no crea nuevas transacciones. Aunque se debe evitar refrescante varias veces en una fila, esta acción tendría mismo resultado que actualizar sólo una vez.

     

La restauración de las transacciones completadas crea una nueva transacción para cada transacción completada el usuario hizo, repitiendo esencialmente la historia para su observador cola de transacciones. Mientras que las transacciones están siendo restaurados, su aplicación mantiene su propio estado para realizar un seguimiento de por qué es la restauración de las transacciones realizadas y cómo se necesita para manejarlos. La restauración varias veces crea múltiples transacciones restaurados para cada transacción completada.


respuesta anterior (2009-2012)

Después de escribir la pregunta y de pensar en ello, me encontré con un par de soluciones.

Automático (no recomendado)

Una opción es registrar en valores predeterminados del usuario si restoreCompletedTransactions ha sido llamado (y completado con éxito) sin embargo, en la aplicación. En caso contrario, la aplicación llama una vez en el arranque. Dado que este indicador podría ser almacenado en el mismo lugar que los pagos no consumibles, en caso de insolvencia de los usuarios se hacen borrosos más adelante, entonces el método de restauración sería llamará de nuevo cuando se inicia la aplicación.

De esta manera, si un cliente existente está haciendo alguna manera una nueva instalación de la aplicación todavía consiguen sus compras restauran automáticamente. Si es un nuevo cliente que nunca ha puesto en marcha la aplicación antes y después de la operación de restauración no devuelve nada.

En cualquier caso, restoreCompletedTransactions sólo se llama una vez en lugar de en cada lanzamiento.

Manual (recomendado)

Otra opción es ofrecer al cliente un botón "Restaurar compras" en algún lugar, conectarlo a restoreCompletedTransactions y dejarlos decidir si y cuando pueda ser necesitado.

(Los comentarios a continuación entran en why una restauración manual es probablemente mejor que intentar hacerlo automáticamente.)

Otros consejos

No hay que olvidar que un ID de Apple puede abarcar varios dispositivos. Por ello, mantener una bandera en un solo dispositivo (por ejemplo, el iPhone de usuario) que le dice si o no usted ha hecho una restauración no se permitirá detectar si el cliente ha realizado una compra en otro dispositivo (decir que su IPAD) que necesita para ser restaurado en el iPhone. Así que tener un método manual de poner en marcha una restauración también es necesario, incluso si tiene un método automático.

Para empeorar las cosas, no he descubierto aún la forma en que se le notifique cuando se realizan las devoluciones de los PAI. Sospecho que el proceso de restauración se devuelva una lista de las transacciones no se devuelve. Así que a) es necesario eliminar el registro de la IAP del usuario cuando lo hace su restauración en los productos de casos reembolsado simplemente no se informa durante la restauración, y b) que tiene que hacer periódicamente una restauración de forma automática con el fin de recoger los reembolsos.

Todo esto pone de relieve el problema con IAP de Apple - es mal concebido y mal documentado - y ahora se requiere que los proveedores de contenidos como lectores de libros electrónicos que ya tienen tiendas basadas en la Web funcionan perfectamente ya trabajan en sus aplicaciones (como el Kindle).

Siempre que tenga una no consumible compra en aplicación, para un ejemplo de una nueva pista de carreras, es necesario implementar un botón 'Restaurar' en algún lugar de la aplicación por lo que el usuario puede restaurar su compra si cambian los dispositivos o eliminar la aplicación. Esto es obligatorio y he tenido de Apple rechaza una aplicación antes para no implementar el botón Restaurar.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top