ApplePay集成和測試賬號申請:
第一步:
//1.首先在項目工程中加入“storekit.framework”,加入頭文件#import <StoreKit/StoreKit.h> //2.在.h文件中加入“SKPaymentTransactionObserver,SKProductsRequestDelegate”監聽機制 #import "HKBaseViewController.h" #import <StoreKit/StoreKit.h> @interface HKApplePayViewController : HKBaseViewController<SKPaymentTransactionObserver,SKProductsRequestDelegate> @property (nonatomic, strong) UITextField *productID; @end
第二步:
#import "HKApplePayViewController.h" #import "HKPayTools.h" @interface HKApplePayViewController () @end @implementation HKApplePayViewController - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. [self setupNav]; [self setupUI]; [[SKPaymentQueue defaultQueue] addTransactionObserver:self]; self.productID.text = @"com.games.ztyxs.product_point.1"; } - (void)applePay { NSString *product = self.productID.text; if([SKPaymentQueue canMakePayments]){ [self requestProductData:product]; }else{ NSLog(@"不允許程序內付費"); } } //請求商品 - (void)requestProductData:(NSString *)type{ NSLog(@"-------------請求對應的產品信息----------------"); NSArray *product = [[NSArray alloc] initWithObjects:type, nil]; NSSet *nsset = [NSSet setWithArray:product]; SKProductsRequest *request = [[SKProductsRequest alloc] initWithProductIdentifiers:nsset]; request.delegate = self; [request start]; } //收到產品返回信息 - (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response{ NSLog(@"--------------收到產品反饋消息---------------------"); NSArray *product = response.products; if([product count] == 0){ NSLog(@"--------------沒有商品------------------"); return; } NSLog(@"productID:%@", response.invalidProductIdentifiers); NSLog(@"產品付費數量:%lu",(unsigned long)[product count]); SKProduct *p = nil; for (SKProduct *pro in product) { NSLog(@"%@", [pro description]); NSLog(@"%@", [pro localizedTitle]); NSLog(@"%@", [pro localizedDescription]); NSLog(@"%@", [pro price]); NSLog(@"%@", [pro productIdentifier]); if([pro.productIdentifier isEqualToString:self.productID.text]){ p = pro; } } SKPayment *payment = [SKPayment paymentWithProduct:p]; NSLog(@"發送購買請求"); [[SKPaymentQueue defaultQueue] addPayment:payment]; } //請求失敗 - (void)request:(SKRequest *)request didFailWithError:(NSError *)error{ NSLog(@"------------------錯誤-----------------:%@", error); } - (void)requestDidFinish:(SKRequest *)request{ NSLog(@"------------反饋信息結束-----------------"); } //監聽購買結果 - (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transaction{ for(SKPaymentTransaction *tran in transaction){ switch (tran.transactionState) { case SKPaymentTransactionStatePurchased: NSLog(@"交易完成"); break; case SKPaymentTransactionStatePurchasing: NSLog(@"商品添加進列表"); break; case SKPaymentTransactionStateRestored: NSLog(@"已經購買過商品"); break; case SKPaymentTransactionStateFailed: NSLog(@"交易失敗"); break; default: break; } } } //交易結束 - (void)completeTransaction:(SKPaymentTransaction *)transaction{ NSLog(@"交易結束"); [[SKPaymentQueue defaultQueue] finishTransaction:transaction]; } - (void)dealloc{ [[SKPaymentQueue defaultQueue] removeTransactionObserver:self]; } -(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event { [self applePay]; } - (void)setupUI { self.view.backgroundColor = kWhiteColor; } -(void)setupNav { self.navTitle = @"ApplePay蘋果內支付"; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } @end
第三步:注意事項
/*
注意:
1.沙盒環境測試appStore內購流程的時候,請使用沒越獄的設備。
2.請務必使用真機來測試,一切以真機為准。
3.項目的Bundle identifier需要與您申請AppID時填寫的bundleID一致,不然會無法請求到商品信息。
*/
相關截圖:
手機截屏:
//要求輸入AppStore帳密,使用測試生成的即可
確認購買
測試賬號申請:
在ItunesConnect中選擇“用戶和職能”選項~
隨后在左上角的選項中選擇沙盒測試者,點擊左上角的加號圖標增加一位測試者,如圖
編輯好相應的內容,點擊保存,就創建了一個測試賬號,是不是很簡單啊!當然這個賬號如果你忘記了密碼可以重新生成一個,無關緊要。
順帶多句嘴,千萬不要在正式的appstore上面用沙盒測試的賬號來登錄,不然后果很嚴重,千萬要牢記在心,此賬號只用於測試環境下~