內(nèi)購(gòu)和廣告
1. 什么是內(nèi)購(gòu)?
內(nèi)購(gòu)就是指,在APP內(nèi)購(gòu)買某些產(chǎn)品
如果你在App中銷售的商品,跟App有關(guān)(例如植物大戰(zhàn)僵尸中的道具,需要開啟關(guān)卡,擁有某種技能等等).那么,蘋果規(guī)定,必須通過內(nèi)購(gòu)方式購(gòu)買.
內(nèi)購(gòu)分成: 3 : 7
2. 為什么做內(nèi)購(gòu)?
1. 開發(fā)者創(chuàng)收的一種模式: free + 內(nèi)購(gòu)
2. 某些業(yè)務(wù)必須使用內(nèi)購(gòu)
3. 內(nèi)購(gòu)的產(chǎn)品類型?
-
非消耗品(Nonconsumable)
買了就一直有,不會(huì)消耗,例如開啟關(guān)卡 一般指的是在游戲中一次性購(gòu)買并擁有永久訪問權(quán)的物品或服務(wù)。非消耗品物品可以被用戶再次下載,并且能夠在用戶的所有設(shè)備上使用
-
消耗品(Consumable)
買了就用,用了就沒 專為支持可消耗的物品或服務(wù)設(shè)計(jì)的,消耗品購(gòu)買不可被再次下載,根據(jù)其特點(diǎn),消耗品不能在用戶的設(shè)備之間跨設(shè)備使用,除非自定義服務(wù)在用戶的賬號(hào)之間共享這些信息
-
其他類型
> 以下三種類別在iBooks中使用,目前iBooks不支持大陸市場(chǎng) 免費(fèi)訂閱(Free subscriptions) 自動(dòng)續(xù)費(fèi)訂閱(Auto-renewing subscriptions) 非自動(dòng)續(xù)費(fèi)訂閱(Nonrenewing subscriptions)
-
內(nèi)購(gòu)的流程
類似于商場(chǎng)購(gòu)物流程, 參照下圖
內(nèi)購(gòu)流程圖.png
-
內(nèi)購(gòu)實(shí)例
1. 在App管理中心,創(chuàng)建一個(gè)App,并填寫App信息 注意: 此處創(chuàng)建的App時(shí),填寫套裝ID,時(shí),必須選擇可以內(nèi)購(gòu)的套裝ID 2. 創(chuàng)建內(nèi)購(gòu)商品,并添加到App,指定此App,可以銷售哪些商品 注意: 創(chuàng)建內(nèi)購(gòu)商品的前提,是你已經(jīng)填寫了稅務(wù)/銀行信息,否則的話,無法創(chuàng)建 3. 添加用于測(cè)試內(nèi)購(gòu)的測(cè)試賬號(hào) 4. 創(chuàng)建App項(xiàng)目,開始開發(fā) 5. 代碼實(shí)現(xiàn)內(nèi)購(gòu)流程 (1) 從APP服務(wù)器請(qǐng)求數(shù)據(jù)列表, 并行蘋果服務(wù)器請(qǐng)求可以銷售的商品列表
[XXXDataTool getGoodsWithResult:^(NSArray *goods) { NSArray *ids = [goods valueForKeyPath:@"goodID"]; // 請(qǐng)求哪些商品可以賣 NSSet *idSet = [NSSet setWithArray:ids]; SKProductsRequest *request = [[SKProductsRequest alloc] initWithProductIdentifiers:idSet]; request.delegate = self; [request start]; }];
(2) 在代理方法中獲取并顯示可銷售列表
- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response { self.products = response.products; }
(3) 用戶購(gòu)買商品, 并監(jiān)聽商品交易狀態(tài)
// 取出商品 SKProduct *product = self.products[indexPath.row]; // 購(gòu)買商品 SKPayment *payMent = [SKPayment paymentWithProduct:product]; // 把憑證加入到隊(duì)列, 等待用戶付款 [[SKPaymentQueue defaultQueue] addPayment:payMent]; // 設(shè)置監(jiān)聽者, 監(jiān)聽整個(gè)交易狀態(tài) [[SKPaymentQueue defaultQueue] addTransactionObserver:self];
(4) 實(shí)現(xiàn)監(jiān)聽交易狀態(tài)方法
// 交易狀態(tài)發(fā)生變化時(shí)調(diào)用 - (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray<SKPaymentTransaction *> *)transactions { [transactions enumerateObjectsUsingBlock:^(SKPaymentTransaction * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { // SKPayment *payment , 小票 , 包含商品 // SKPaymentTransactionState transactionState 交易狀態(tài) switch (obj.transactionState) { case SKPaymentTransactionStatePurchasing: NSLog(@"正在付款"); break; case SKPaymentTransactionStatePurchased: { NSLog(@"付款結(jié)束"); [queue finishTransaction:obj]; break; } case SKPaymentTransactionStateFailed: { NSLog(@"交易失敗"); [queue finishTransaction:obj]; break; } case SKPaymentTransactionStateRestored: NSLog(@"恢復(fù)購(gòu)買"); break; case SKPaymentTransactionStateDeferred: NSLog(@"推遲付款"); break; default: break; } }]; }
<!--**具體步驟, 請(qǐng)參照步驟截圖詳解**-->