1、關于支付類型的選擇
(1)消耗型物品:用一次,使用后失效,商品會在使用中一點一點消耗,這里最多使用的是游戲道具之類.游戲中內購大多使用這個,還有直播送禮物等等;
(2)非消耗型物品:最最坑爹的一種,這個不依賴自己服務器,只和蘋果appid聯系,只要同一個id購買,即使100個設備同時用這個id登錄,都不需要進行再次購買,而且蘋果強制要求要有一個Restore Purchases button,這個按鈕的主要作用是恢復之前的購買.(appstore上面收費軟件的下載就是這種類型)
附上這種類型的處理方法:
開發中有2種方案:
一種是直接在購買按鈕下面添加一個恢復購買按鈕(但是你要告訴審核人員,這個按鈕在哪,發圖片或者視頻給審核人員,這種方便最簡單,但是顯示不好)
一種是通過獲取該appid下面購買過的商品,然后在判斷該商品是否在購買過的商品列表中,如果有,顯示回復購買按鈕,如果沒有顯示購買按鈕.
[[SKPaymentQueue defaultQueue] addTransactionObserver:self];if([SKPaymentQueue canMakePayments]) {//用戶允許app內購if(productId.length) {
NSArray*product = [[NSArray alloc]initWithObjects:@"商品id", nil];
NSSet*set=[NSSet setWithArray:product];
SKProductsRequest*productRequest =[[SKProductsRequest alloc] initWithProductIdentifiers:set];
productRequest.delegate=self;
[productRequest start];
}else{//商品id為空}
}else{//不支持購買}
#pragmamark SKProductsRequestDelegate 查詢成功后的回調- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response { NSArray *product =response.products;if(product.count ==0) {//無法獲取商品信息}else{//發起購買請求SKPayment *payment = [SKPayment paymentWithProduct:product[0]];
[[SKPaymentQueue defaultQueue]restoreCompletedTransactions];//這句代碼就是恢復購買}
}
接下來是代理函數,在這里你可以獲取到已經購買過的商品集合
- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions: (nonnull NSArray *)transactions { self.restoreArray =[[NSMutableArray alloc]init];for(SKPaymentTransaction *transactionintransactions) {switch(transaction.transactionState) {caseSKPaymentTransactionStatePurchasing://正在交易break;caseSKPaymentTransactionStatePurchased://交易完成break;caseSKPaymentTransactionStateFailed://交易失敗break;caseSKPaymentTransactionStateRestored://已經購買過該商品[self.restoreArray addObject:transaction.payment.productIdentifier];
[self restoreTransaction:transaction];break;default:break;
}
}
}- (void)paymentQueueRestoreCompletedTransactionsFinished:(SKPaymentQueue *)queue {if([self.restoreArray containsObject:self.goodsProductId]) {//用戶購買過商品.就應該顯示"恢復購買按鈕"}else{//用戶沒有購買過該商品}
}
(3)自動續期訂閱:使用很少,適合報刊訂閱等等
(4)非續訂型訂閱:用到的比較多的,可以依賴自已服務器,可以無數次購買,沒有appid限制,比如一個價格商品有很多種規格,就可以使用這個.比如網易云課堂的收費課,騰訊課堂收費課等
2.游客模式:一般這個會是提示你5.1.1然后被拒。
最近審核比較嚴格,內購的時候最好提供游客模式,即使用戶沒有登錄,也能進行購買,不要在購買的時候,強行提示用戶登錄(本人因為這個被拒N次)。
參考過的鏈接:
http://www.cocoachina.com/bbs/read.php?tid-1716937.html
http://www.cocoachina.com/bbs/read.php?tid-1720959-page-2.html
http://www.cocoachina.com/bbs/read.php?tid=1692154
https://developer.apple.com/app-store/review/guidelines/#data-collection-and-storage
總結方法:
1.我遇到過類似的,你在購買的時候提示他登錄審核就會被拒絕,購買時直接跳轉登錄頁面審核就過了。。。(容易被拒,還是看人)
2.添加游客模式
3.默默登錄 判斷是不是在審核期間 不是則跳轉登錄 反之默默登錄 這時候需要注意的是登錄后用戶數據的保存