historial fraudulentos español correos compras apple app ios objective-c storekit

ios - fraudulentos - historial de compras itunes



Detectar una alerta de inicio de sesión de itunes cancelada para compras dentro de la aplicación (4)

Tengo una clase que implementa SKPaymentTransactionObserver . Sin embargo, al hacer clic en un botón de compra, si el usuario no ha iniciado sesión en la tienda de aplicaciones, recibe una alerta solicitando una ID existente o para crear una nueva. Si el uso hace clic en cancelar desde este, o en una alerta posterior de credenciales de inicio de sesión, no recibo ninguna notificación de esa cancelación. Tengo una vista de actividad que cubre la pantalla después de hacer clic en el botón comprar, así que realmente necesito saber si la alerta de inicio de sesión fue cancelada.

Ya SKErrorPaymentCancelled código de error SKErrorPaymentCancelled y funciona si el proceso de compra se cancela después de iniciar sesión. Estoy probando en un dispositivo.

¿Alguna pista?

-ACTUALIZAR-

Disculpas. Olvidé mencionar que esto solo sucedió al intentar restaurar transacciones, y eso revela la respuesta: mi falta de conocimiento sobre el protocolo.


Cuando un usuario cancela la solicitud que les hace ingresar sus credenciales de ID de Apple, el estado de la transacción es SKPaymentTransactionStateFailed . Esto puede ser confuso porque la transacción no ha "fallado" técnicamente si el usuario salió del proceso voluntariamente. Para detectar si el usuario realmente salió del proceso, verifique si el código de error de la transacción (al que se accede mediante transaction.error.code ) es SKErrorPaymentCancelled . Si no es así, la aplicación realmente tuvo problemas al procesar la transacción.


En Swift 2.2

public func paymentQueue(queue: SKPaymentQueue, restoreCompletedTransactionsFailedWithError error: NSError) { print("Cancel Transaction") }


En Swift 3.0

public func paymentQueue(_ queue: SKPaymentQueue, restoreCompletedTransactionsFailedWithError error: Error) { print("Cancel Transaction"); }


Para detectar el evento de cancelación después de que un usuario intente cancelar una solicitud de restauración, ejecute:

- (void)paymentQueue:(SKPaymentQueue *)queue restoreCompletedTransactionsFailedWithError:(NSError *)error { // test error.code, if it equals SKErrorPaymentCancelled it''s been cancelled }