2015-11-20 1 views
5

J'essaie de mettre en œuvre Apple Pay pour mon application. J'ai le PKPaymentAuthorizationViewController essayant de charger l'Apple Pay View. Ce contrôleur de vue a été retourné comme nul par le constructeur si je n'avais pas de cartes déjà dans mon portefeuille. Donc, j'ai décidé de guider l'utilisateur à travers le processus où ils entrent leurs informations de carte. J'ai pu parvenir grâce àApple Pay détecter Wallet n'a pas de cartes de crédit

PKPassLibrary* lib = [[PKPassLibrary alloc] init]; 
[lib openPaymentSetup]; 

Voici la partie où je l'initialisation du PKPaymentAuthorizationViewController. Cela retourne un objet valide sur le simulateur montrant la vue. Mais sur un appareil réel sans carte de crédit configurée renvoie zéro et s'exécute dans une exception d'exécution. Voici le code d'initialisation:

if ([PKPaymentAuthorizationViewController canMakePayments]) { 
// init arr 
[arr addObject:total]; 
request.paymentSummaryItems = arr; 
PKPaymentAuthorizationViewController *paymentPane = [[PKPaymentAuthorizationViewController alloc] initWithPaymentRequest:request]; 
paymentPane.delegate = self; 
[self presentViewController:paymentPane animated:TRUE completion:nil]; 
} 

Ici, le tableau est un NSArray valide de PKPaymentSummaryItem qui est de savoir pourquoi fonctionne avec succès sur simulateur.

Je dois appeler la méthode ci-dessus de openPaymentSetup, chaque fois que je vois un utilisateur sans la carte de crédit dans leur portefeuille. Y a-t-il un moyen de détecter cela?

Actuellement, je me sers

if ([PKPassLibrary isPassLibraryAvailable]) { 
    PKPassLibrary* lib = [[PKPassLibrary alloc] init]; 
    if ([lib passesOfType:PKPassTypePayment].count == 0) { 
     [lib openPaymentSetup]; 
    } 
} 

Mais cela ne fonctionnera pas depuis que je suis à la recherche au nombre de passes en portefeuille. Ce qui peut être comme carte d'embarquement pour les compagnies aériennes, ou laissez-passer Eventbrite, etc.

ont regardé: PKPaymentAuthorizationViewController present as nil view controller

Apple pay PKPaymentauthorizationViewController always returning nil when loaded with Payment request

https://developer.apple.com/library/ios/documentation/PassKit/Reference/PKPaymentAuthorizationViewController_Ref/

+0

Existe-t-il une raison pour laquelle vous ne pouvez pas utiliser la méthode canMakePayments de la documentation Apple? (https://developer.apple.com/library/ios/documentation/PassKit/Reference/PKPaymentAuthorizationViewController_Ref/#//apple_ref/occ/clm/PKPaymentAuthorizationViewController/canMakePayments) – bplattenburg

+1

@bplattenburg Il retourne toujours vrai. Vérifiez l'édition. – Rushabh

+2

Vous devez utiliser la méthode 'canMakePaymentsUsingNetworks:', pas la méthode 'canMakePayments'. – rmaddy

Répondre

5

Je fis comme suggéré par @maddy, et elle a effectivement travaillé . C'est malheureux que Apple a une documentation très limitée à ce sujet. Merci Maddy.

Voici mon code

-(BOOL) openAddCardForPaymentUIIfNeeded 
{ 
    if ([PKPassLibrary isPassLibraryAvailable]) 
    { 
     if (![PKPaymentAuthorizationViewController canMakePaymentsUsingNetworks:[NSArray arrayWithObjects: PKPaymentNetworkAmex, PKPaymentNetworkMasterCard, PKPaymentNetworkVisa, nil]]) 
     { 
      UIAlertView* alert = [[UIAlertView alloc] initWithTitle:@"Add a Credit Card to Wallet" message:@"Would you like to add a credit card to your wallet now?" delegate:self cancelButtonTitle:@"No" otherButtonTitles:@"Yes", nil]; 
      [alert show]; 
      return true; 

     } 
    } 
    return false; 
} 

Maintenant, je suis l'utilisateur à aller ajouter un assistant de carte dans l'application de porte-monnaie. Est-il possible de ramener l'utilisateur à l'application après qu'il/elle a fini d'ajouter la carte dans le portefeuille?

Merci!

+2

Pas moyen de les récupérer sans que l'utilisateur retourne à votre application autant que je sache. J'espère que les gens peuvent comprendre autant pour eux-mêmes si :) – bplattenburg