- 內(nèi)購準(zhǔn)備:
1.登陸開發(fā)者賬號, 導(dǎo)入profile文件
2.去Itunes Connect 添加應(yīng)用信息, 內(nèi)購信息, 后臺數(shù)據(jù)庫也錄入信息
3.添加銀行的稅務(wù)信息, 可以是借記卡
4.為了測試內(nèi)購, 需要添加沙盒測試賬號
- 注意點 :
1.必須設(shè)置項目的bundle ID
2.內(nèi)購SDK就是蘋果自帶框架StoreKit動態(tài)庫
3.在BuildPhase 開啟內(nèi)購功能
- 原理圖
原理圖
- 請求商品列表
//1. 請求商品列表(首先創(chuàng)建一個產(chǎn)品請求向蘋果后臺( 如果是恢復(fù)購買的項目 則restore之前已經(jīng)購買的物品如月卡, 如果買過之后緊接著又買, 就會提示重復(fù)購買))
// 1.1 創(chuàng)建產(chǎn)品ID列表
NSSet *set = [NSSet setWithObjects:@“商品A",@“商品B",@“商品C",@“商品D", nil];
// 1.2 創(chuàng)建產(chǎn)品請求列表
self.request = [[SKProductsRequest alloc] initWithProductIdentifiers:set];
// 1.3 設(shè)置請求代理
self.request.delegate = self;
// 1.4 注意開啟請求
[self.request start];
// 2. 添加交易監(jiān)視者到支付隊列中
[[SKPaymentQueue defaultQueue] addTransactionObserver:self];
//2. 添加支付交易監(jiān)視者 -> 支付狀態(tài)的更新
// 在dealloc中移除
- (void)dealloc
{
[[SKPaymentQueue defaultQueue] removeTransactionObserver:self];
}
//3. 從商品創(chuàng)建支付對象, 并將支付對象添加到支付隊列中
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
SKProduct *product = self.products[indexPath.row];
// 3. 創(chuàng)建支付對象
SKPayment *payment = [SKPayment paymentWithProduct:product];
// 4. 添加支付對象到支付隊列中
[[SKPaymentQueue defaultQueue] addPayment:payment];
}
//5. 交易更新調(diào)用, 自己的服務(wù)器向蘋果后臺驗證憑證
// 交易被更新的時候回調(diào)(當(dāng)交易被更新時回調(diào), 通過交易回調(diào)獲得的狀態(tài)來執(zhí)行下一步操作(如支付中, 支付成功, 支付失敗))
//-(void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray<SKPaymentTransaction *> *)transactions {
// SKPaymentTransaction 交易對象
for (SKPaymentTransaction *paymentTansaction in transactions) {
switch (paymentTansaction.transactionState) {
case SKPaymentTransactionStatePurchasing:
NSLog(@"支付中");
break;
case SKPaymentTransactionStatePurchased:
{
NSLog(@"完成支付");
// 必須添加完成支付交易
[[SKPaymentQueue defaultQueue] finishTransaction:paymentTansaction];
// 需要獲取支付憑證
// NSData *transactionReceipt = paymentTansaction.transactionReceipt;
(整個支付的流程對象,如果交易完成 支付交易對象內(nèi)部有一個支付憑證,有了支付憑證可以讓我們后臺進(jìn)行校驗,從而判定是否錢是否交易成功)
// 拿到憑證 transction.transactionReceipt 提交給我們服務(wù)器
// 我們服務(wù)器 提交給蘋果服務(wù)器進(jìn)行驗證
// 蘋果服務(wù)器告訴我們服務(wù)器成功
// 我們服務(wù)器告訴我們客戶端支付成功贤姆,才算成功
}
break;
case SKPaymentTransactionStateFailed:
NSLog(@"支付失敗");
// 必須添加完成支付交易
[[SKPaymentQueue defaultQueue] finishTransaction:paymentTansaction];
break;
case SKPaymentTransactionStateDeferred:
NSLog(@"支付過期");
// 必須添加完成支付交易
[[SKPaymentQueue defaultQueue] finishTransaction:paymentTansaction];
break;
case SKPaymentTransactionStateRestored:
NSLog(@"恢復(fù)成功");
// 必須添加完成支付交易
[[SKPaymentQueue defaultQueue] finishTransaction:paymentTansaction];
break;
default:
break;
}
}
}