2015-11-20 21 views
5

Tôi đang cố triển khai Apple Pay cho ứng dụng của mình. Tôi có PKPaymentAuthorizationViewController đang cố gắng tải lên Apple Pay View. Bộ điều khiển xem này đã được trả về là Nil bởi hàm tạo nếu tôi không có bất kỳ thẻ nào đã có trong ví của tôi. Vì vậy, tôi quyết định hướng dẫn người dùng mặc dù quá trình họ nhập thông tin thẻ của họ. Tôi có thể đạt được điều này bằng cách sử dụngApple Pay phát hiện Wallet không có thẻ tín dụng

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

Đây là phần mà tôi có khởi tạo PKPaymentAuthorizationViewController. Điều này trả về một đối tượng hợp lệ trên Simulator hiển thị khung nhìn. Nhưng trên một thiết bị thực mà không có một thẻ tín dụng được cấu hình trả về nil và chạy vào một ngoại lệ thời gian chạy. Đây là mã khởi tạo:

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]; 
} 

Đây mảng là một NSArray hợp lệ của PKPaymentSummaryItem đó là lý do tại sao hoạt động thành công trên trình mô phỏng.

Tôi cần gọi phương thức openPaymentSetup ở trên, mỗi khi tôi thấy người dùng không có thẻ tín dụng trong ví của họ. Có cách nào để phát hiện điều đó không?

Hiện nay tôi đang sử dụng

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

Nhưng điều này sẽ không làm việc kể từ khi tôi đang nhìn vào số lượng đi trong ví. Mà có thể giống như thẻ lên máy bay cho hãng hàng không, hoặc Eventbrite đường chuyền vv

Nhìn: 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

có lý do nào khiến bạn không thể sử dụng phương thức canMakePayments từ tài liệu hướng dẫn của apple không? (https://developer.apple.com/library/ios/documentation/PassKit/Reference/PKPaymentAuthorizationViewController_Ref/#//apple_ref/occ/clm/PKPaymentAuthorizationViewController/canMakePayments) – bplattenburg

+1

@bplattenburg Nó luôn luôn trả về đúng sự thật. Kiểm tra chỉnh sửa. – Rushabh

+2

Bạn cần sử dụng phương thức 'canMakePaymentsUsingNetworks:', không phải phương thức 'canMakePayments'. – rmaddy

Trả lời

5

tôi đã theo đề nghị của @maddy, và nó thực sự làm việc . Thật không may là táo có tài liệu rất hạn chế về nó. Cảm ơn Maddy.

Đây là mã của tôi

-(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; 
} 

Bây giờ tôi đang chuyển hướng người dùng đến thêm một phù thủy thẻ trong ứng dụng Wallet. Có cách nào tôi có thể đưa người dùng quay lại ứng dụng sau khi họ đã hoàn tất việc thêm thẻ vào Wallet không?

Cảm ơn!

+2

Không có cách nào để đưa họ trở lại mà không cần người dùng quay lại ứng dụng của bạn theo như tôi biết. Tôi hy vọng mọi người có thể hình dung ra nhiều điều cho bản thân mặc dù :) – bplattenburg

Các vấn đề liên quan