*深坑記錄,以后發(fā)現(xiàn)一些不常見的坑可能會更新
1.一般發(fā)生于首次提交app或添加新商品,當(dāng)你的app通過審核以后,你發(fā)現(xiàn)在生產(chǎn)環(huán)境下獲取不到商品,這是因為app雖然過審核了,但是內(nèi)購商品還沒有正式添加到蘋果的服務(wù)器里,耐心等待一段時間就可以啦~
2.我創(chuàng)建的IAP商品,當(dāng)我不用,想刪除時,發(fā)現(xiàn)無法刪除,我點擊刪除按鈕以后,頁面就自動刷新,刷新回來,那條商品依然存在,我換了N多瀏覽器,連手機瀏覽器都試了,就是不行,沒辦法只能提交審核,然后蘋果給我反饋說他們找不到我這個商品在哪......
- 解決辦法:審核時在附加里向蘋果說明情況,最好錄個視頻上傳到網(wǎng)站上(優(yōu)酷就可以),把視頻地址給蘋果
- 后續(xù):當(dāng)時有過申訴,但是因為蘋果只會給注冊開發(fā)者賬號的郵件發(fā)信息,而老大每天都不在公司,所以與蘋果的溝通終中斷了。我在將App轉(zhuǎn)移賬號以后,這個Bug消失了,不知道是轉(zhuǎn)移賬號解決的還是蘋果修復(fù)了。
一:iap開發(fā)
具體的開發(fā)過程不太想寫了,網(wǎng)上太多了,隨隨便便百度一下就有好幾頁,這里只給大家推薦一個庫,使用起來很方便
下載地址: IAPHelper
NSSet* dataSet = [[NSSet alloc] initWithObjects:@"這里是iap商品id", nil];
[IAPShare sharedHelper].iap = [[IAPHelper alloc] initWithProductIdentifiers:dataSet];
// 請求商品信息
[[IAPShare sharedHelper].iap requestProductsWithCompletion:^(SKProductsRequest* request,SKProductsResponse* response)
{
if(response.products.count > 0 ) {
SKProduct *product = response.products[0];
[[IAPShare sharedHelper].iap buyProduct:product
onCompletion:^(SKPaymentTransaction* trans){
if(trans.error)
{
}
else if(trans.transactionState == SKPaymentTransactionStatePurchased) {
// 到這里購買就成功了,但是因為存在越獄手機下載某些破解內(nèi)購軟件的情況,需要跟蘋果服務(wù)器的確認(rèn)是否購買成功
// IAPHelper提供了這個方法,驗證這步可以寫在前端,也可以寫在服務(wù)器端,這個自己看情況決定吧...
// 購買驗證
NSData *receipt = [NSData dataWithContentsOfURL:[[NSBundle mainBundle] appStoreReceiptURL]];
//網(wǎng)上的攻略有的比較老,在驗證時使用的是trans.transactionReceipt,需要注意trans.transactionReceipt在ios9以后被棄用
[[IAPShare sharedHelper].iap checkReceipt:receipt onCompletion:^(NSString *response, NSError *error) {}];
}
else if(trans.transactionState == SKPaymentTransactionStateFailed) {
if (trans.error.code == SKErrorPaymentCancelled) {
}else if (trans.error.code == SKErrorClientInvalid) {
}else if (trans.error.code == SKErrorPaymentInvalid) {
}else if (trans.error.code == SKErrorPaymentNotAllowed) {
}else if (trans.error.code == SKErrorStoreProductNotAvailable) {
}else{
}
}
}];
}else{
// ..未獲取到商品
}
}];
關(guān)于內(nèi)購的開發(fā)大概就這些,網(wǎng)上攻略賊多,大概搜索一下就能寫的出來,iap開發(fā)起來雖然不難,但是瑪?shù)路诉@里面坑實在太多...
二:iap開發(fā)時的注意事項
1.什么情況需要使用iap,什么情況使用三方支付
這里我的理解是:
購買的東西是實物,不存在于APP中,用三方支付,比如淘寶等一堆電商,他們的商品都是不存在于App中的。
如果你的支付和購買是為了解鎖App的功能,就一定要用iap,即內(nèi)購
舉個栗子:現(xiàn)在有很多在線教育App,比如網(wǎng)易云課堂,騰訊課堂,可以在App中購買視頻并在APP中觀看,也就是說 '觀看視頻' 這個功能是本身就存在于APP中的,只是需要你先購買視頻,才能使用'觀看視頻'這個功能,這個時候,這種解鎖APP已有功能的操作,就必須要使用iap
2.關(guān)于商品類型:iap創(chuàng)建商品時選擇的商品類型大概分三類

1.消耗型商品:
類似游戲中的鉆石,還有現(xiàn)在某些APP中的貨幣,比如斗魚里的魚丸、映客里的映票。會被消耗的,要選擇消耗型商品
2.非消耗型商品:
無法被消耗的商品,比如上文提到的視頻課程,一次購買,就應(yīng)該永久可以觀看
3.訂閱類型商品:
多用于會員,會員也可以做成用消耗型商品獲取的貨幣來購買
現(xiàn)在不行了,之前提交過很多都沒事,也許以前會員功能存在感太低審核團(tuán)隊沒發(fā)現(xiàn)?又或是最近的新規(guī),新提交的版本因為這個原因被拒了,錯誤描述:
Business - 3.1.1 We noticed that your app is using Consumable In-App Purchase products as intermediary currency for the exchange of items that function as Non-Renewing Subscriptions.
這里要提一點:如果你的公司是外包公司,有訂閱類型商品的APP一定要用客戶的賬號提交審核,因為當(dāng)APP中有過訂閱類型商品,注意是有過,創(chuàng)建過再刪除也算,這個APP無法被轉(zhuǎn)移賬號
3.注意事項
1.當(dāng)你使用消耗型商品
大多數(shù)的消耗型商品都是需要登錄的,因為需要在數(shù)據(jù)庫存余額嘛。
需要注意的是:在登錄之前,你最好不要讓用戶看到商品,有可能會因為這個原因被拒(看運氣),栗子:

如上圖。這是充值頁面,即商品頁面。
你有兩個選擇:
# 1.增加游客購買,即用戶到達(dá)充值頁面,點擊充值時,即使用戶未登陸,也能充值
# 2.讓未登錄用戶無法到達(dá)充值頁面。且必須要由用戶來選擇
栗子:有個按鈕,點擊跳轉(zhuǎn)此充值頁面,當(dāng)未登錄用戶點擊按鈕時,
你必須要彈出選擇框,由用戶來選擇是登錄/注冊或者取消,并說明情況
如下:

2.當(dāng)你使用非消耗型商品
當(dāng)你使用非消耗型商品時,你需要添加一個恢復(fù)購買的按鈕
這個常見于各種游戲中,其實知道這個規(guī)定以后還是挺好理解的,非消耗型商品是不可被消耗的,一次購買終身使用的,非消耗型的商品是跟appleId綁定的,就是你平時下載APP讓你輸入賬號密碼的內(nèi)個。
你需要一個恢復(fù)購買的按鈕,來讓用戶恢復(fù)他購買的內(nèi)容,上面內(nèi)個IAPHelper也有這個方法,自己看一下
3.訂閱型商品
使用或曾經(jīng)使用過訂閱型商品的APP無法轉(zhuǎn)移
在蘋果幫助里,有個分類是:什么樣的APP可以被轉(zhuǎn)讓
我一看,完全符合啊,然后就是開發(fā)、提交審核、通過,但是當(dāng)我轉(zhuǎn)讓時卻TM提示我無法轉(zhuǎn)讓,當(dāng)我再次回去查看幫助,向下拉網(wǎng)頁拉倒底部時
發(fā)現(xiàn)有另一個分類:為什么我的APP無法轉(zhuǎn)讓。。。。。。