1、內購簡介html
// 1) 實例化產品請求 SKProductsRequest *request = [[SKProductsRequest alloc]initWithProductIdentifiers:identifiers]; // 2) 設置代理 [request setDelegate:self]; // 3) 啓動請求 [request start];
提示:android
1. 實例化請求時,必須指定有效的identifiers集合,之因此如此處理,主要是爲了確保提交的內購商品真的經過了蘋果的審批,處於可用狀態!ios
2. 要想獲取到準確的可用產品集合,須要經過代理方法實現服務器
- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response網絡
3. 越獄用戶沒法測試內購,可是能夠購買app
2⃣️購買產品ide
1. 內購的交易過程是經過SKPaymentTransactionObserver監控的,所以須要爲IAPHelper添加交易觀察者:測試
// 添加交易觀察者對象 [[SKPaymentQueue defaultQueue]addTransactionObserver:sharedInstance];
2. 因爲發起交易須要使用SKProduct對象,所以須要使用字典記錄全部可用的商品ui
NSMutableDictionary *_productsDict;
3.交易隊列回調方法編碼
- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions { for (SKPaymentTransaction *transaction in transactions) { // 購買完成 if (transaction.transactionState == SKPaymentTransactionStatePurchased) { NSLog(@"購買完成 %@", transaction.payment.productIdentifier); [queue finishTransaction:transaction]; } else if (transaction.transactionState == SKPaymentTransactionStateFailed) { if (transaction.error.code != SKErrorPaymentCancelled) { NSLog(@"交易失敗: %@", transaction.error.localizedDescription); } } } }
3⃣️驗證購買(一般交由服務器來作)
考慮到網絡異常狀況,服務器的驗證應該是一個可恢復的隊列,若是網絡失敗了,應該進行重試。
與蘋果的驗證接口文檔在這裏。簡單來講就是將該購買憑證用Base64編碼,而後POST給蘋果的驗證服務器,蘋果將驗證結果以JSON形式返回。
蘋果AppStore線上的購買憑證驗證地址是https://buy.itunes.apple.com/verifyReceipt ,測試的驗證地址是:https://sandbox.itunes.apple.com/verifyReceipt
4⃣️恢復購買——恢復用戶購買過的全部商品
[[SKPaymentQueue defaultQueue]restoreCompletedTransactions];