放兩個(gè)地址在這,基本邏輯都講了桨醋,直接用吧,遇到問(wèn)題了再寫
iOS內(nèi)購(gòu)—— In-App Purchase(消耗型)
iOS開(kāi)發(fā)-2017蘋果內(nèi)購(gòu)最新教程
注意點(diǎn):
在進(jìn)行購(gòu)買操作之前彈框提示现斋,讓用戶知道自己接下來(lái)的操作喜最。因?yàn)閳?zhí)行購(gòu)買,蘋果內(nèi)部會(huì)彈出一個(gè)框框詢問(wèn)是否要以多少錢購(gòu)買什么項(xiàng)目庄蹋,但是這個(gè)框框彈出的很慢瞬内。在這個(gè)框框之前彈框可以提示用戶,讓用戶有心理準(zhǔn)備限书。
要加恢復(fù)購(gòu)買功能(避免蘋果審核通不過(guò))虫蝶。
購(gòu)買成功之后app里面有業(yè)務(wù)邏輯的話就在,恢復(fù)購(gòu)買成功的回調(diào)和購(gòu)買成功的方法里面操作蔗包。
//恢復(fù)購(gòu)買
- (void)paymentQueueRestoreCompletedTransactionsFinished:(SKPaymentQueue *)queue NS_AVAILABLE_IOS(3_0) {
NSArray *transactions = queue.transactions;
if(transactions.count > 0){
//恢復(fù)成功了秉扑,要做啥就在這寫吧
}else {
//沒(méi)有要恢復(fù)的商品
}
}
//交易狀態(tài)
- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray<SKPaymentTransaction *> *)transactions {
for(SKPaymentTransaction *tran in transactions){
switch (tran.transactionState) {
case SKPaymentTransactionStatePurchased:
NSLog(@"交易完成");
//交易完成了,下面的方法對(duì)交易進(jìn)行驗(yàn)證(這是自己定義的哦)
[self completeTransaction:tran];
[[SKPaymentQueue defaultQueue] finishTransaction:tran];
break;
case SKPaymentTransactionStatePurchasing:
NSLog(@"商品添加進(jìn)列表");
break;
case SKPaymentTransactionStateRestored:
NSLog(@"正在恢復(fù)已經(jīng)購(gòu)買過(guò)商品");
[[SKPaymentQueue defaultQueue] finishTransaction:tran];
break;
case SKPaymentTransactionStateDeferred:
NSLog(@"正在確認(rèn)");
break;
case SKPaymentTransactionStateFailed:
[[SKPaymentQueue defaultQueue] finishTransaction:tran];
NSLog(@"交易失敗");
break;
default:
break;
}
}
}
[self completeTransaction:tran];
//這個(gè)方法里面驗(yàn)證交易调限,如果成功舟陆,會(huì)返回一個(gè)resultcode,21007或者0
if(resultcode == 21007 || resultcode == 0) {
//購(gòu)買成功的操作就在這里寫咯
}