ios - ¿Cómo se muestra un UIAlertView sobre el controlador de pago PKPaymentAuthorizationView?
objective-c applepay (4)
El uso del código UIAlertView estándar a continuación mostrará la alerta debajo de la hoja de Apple Pay PKPaymentAuthorizationViewController .
[[[UIAlertView alloc] initWithTitle:@"Payment Error"
message:[error localizedDescription]
delegate:nil
cancelButtonTitle:@"Okay"
otherButtonTitles:nil] show];
¿Cómo puedo mostrarlo encima de la hoja de autorización de pago? ¿O hay una forma diferente de presentar mensajes de error para Apple Pay? Quiero dar mensajes de error específicos cuando el usuario ingresa una dirección de envío no válida.
Hay una nueva devolución de llamada en iOS 11 para
public func paymentAuthorizationController(_ controller: PKPaymentAuthorizationController, didAuthorizePayment payment: PKPayment,
handler completion: (PKPaymentAuthorizationResult) -> Void)
Como puedes ver, el manejador cambia de
completion: (PKPaymentAuthorizationStatus) -> Void)
a
handler completion: (PKPaymentAuthorizationResult) -> Void)
A partir de iOS 11 obtendremos un status
con una matriz de NSErrors
en el controlador de finalización.
Echa un vistazo a la sesión de este año para más detalles.
No puede mostrar UIAlertView
en el PKPaymentAuthorizationViewController
debido a la seguridad del sistema.
La interfaz de usuario completa de PKPaymentAuthorizationViewController
se presenta a través de un Remote View Controller. Esto significa que fuera del PKPaymentRequest que le otorgas, es imposible estilizar o modificar el contenido de esta vista.
Y para controlar el error de Apple Pay, debe utilizar el método de delegado PKPaymentAuthorizationViewControllerDelegate
para mostrar que el pago se ha completado correctamente o si hay algún error.
Para mostrar PKPaymentAuthorizationViewController
, presente el controlador de vista de pago como:
PKPaymentAuthorizationViewController *paymentVC = [[PKPaymentAuthorizationViewController alloc] initWithPaymentRequest:request];
paymentVC.delegate = self;
[self presentViewController:paymentVC animated:true completion:nil];
- El cliente aprueba la compra utilizando Touch ID (o, si eso falla 3 veces, ingresando su código de acceso).
- El icono de la huella digital se convierte en una rueda giratoria, con la etiqueta "Procesando"
- Su delegado recibe el paymentAuthorizationViewController (_: didAuthorizePayment: completed :) callback
- Su aplicación se comunica de forma asíncrona con su procesador de pagos y el servidor web para realizar un cargo con esos detalles de pago. Una vez que se complete, invoque el controlador de finalización que se le proporciona como un parámetro con PKPaymentAuthorizationStatus.success o PKPaymentAuthorizationStatus.failure según el resultado.
- El control de giro PKPaymentAuthorizationViewController se convierte en un ícono de éxito o fracaso. Si tiene éxito, recibirá una notificación del PassBook indicando un cargo en la tarjeta de crédito del cliente.
- Su delegado recibe la devolución de llamada paymentAuthorizationViewControllerDidFinish (_ :). Entonces es responsable de llamar a despedir (animada: finalización :) para descartar la pantalla de pago.
- (void)paymentAuthorizationViewController:(PKPaymentAuthorizationViewController *)controller
didAuthorizePayment:(PKPayment *)payment
completion:(void (^)(PKPaymentAuthorizationStatus status))completion {
//=========================================
//=========================================
// Call your api here for charge payment and according to that api result show complition as follow
//========================================
//========================================
// Use your payment processor''s SDK to finish charging your customer.
// When this is done, call:
completion(PKPaymentAuthorizationStatusSuccess);
// When this is Payment not completed, call:
// completion(PKPaymentAuthorizationStatusFailure);
// When this is Supplied billing address is insufficient or otherwise invalid, call:
// completion(PKPaymentAuthorizationStatusInvalidBillingPostalAddress);
// When this is Supplied postal address is insufficient or otherwise invalid, call:
// completion(PKPaymentAuthorizationStatusInvalidShippingPostalAddress);
// When this is Supplied contact information is insufficient or otherwise invalid, call:
// completion(PKPaymentAuthorizationStatusInvalidShippingContact);
}
// Sent to the delegate when payment authorization is finished. This may occur when
// the user cancels the request, or after the PKPaymentAuthorizationStatus parameter of the
// paymentAuthorizationViewController:didAuthorizePayment:completion: has been shown to the user.
//
// The delegate is responsible for dismissing the view controller in this method.
- (void)paymentAuthorizationViewControllerDidFinish:(PKPaymentAuthorizationViewController *)controller {
[self dismissViewControllerAnimated:true completion:nil];
}
No puede mostrar los elementos de la interfaz de usuario encima de ningún Remote View Controllers
porque podría comprometer la seguridad del sistema. Esto incluye PKPaymentAuthorizationViewController
.
Lea más sobre los controladores de vista remota here
Una hoja de acción es un estilo específico de alerta que aparece en respuesta a un control o acción, y presenta un conjunto de dos o más opciones relacionadas con el contexto actual. Use una hoja de acción para permitir que las personas inicien tareas o para solicitar confirmación antes de realizar una operación potencialmente destructiva. En pantallas más pequeñas, una hoja de acción se desliza hacia arriba desde la parte inferior de la pantalla. En pantallas más grandes, una hoja de acción aparece de una vez como una ventana emergente.
Proporcionar un botón Cancelar si agrega claridad. Un botón Cancelar infunde confianza cuando el usuario abandona una tarea. Los botones de cancelación siempre deben incluirse en las hojas de acción en la parte inferior de la pantalla.
Hacer las opciones destructivas prominentes. Use rojo para los botones que realizan acciones destructivas o peligrosas, y muestre estos botones en la parte superior de una hoja de acción.
Evite habilitar el desplazamiento en una hoja de acción. Si una hoja de acción tiene demasiadas opciones, las personas deben desplazarse para ver todas las opciones. El desplazamiento requiere tiempo adicional para hacer una elección y es difícil de hacer sin presionar inadvertidamente un botón.
Para orientación del desarrollador, vea la constante UIAlertController en UIAlertController .