*深坑記錄,以后發現一些不常見的坑可能會更新
1.一般發生于首次提交app或添加新商品,當你的app通過審核以后,你發現在生產環境下獲取不到商品,這是因為app雖然過審核了,但是內購商品還沒有正式添加到蘋果的服務器里,耐心等待一段時間就可以啦~
2.我創建的IAP商品,當我不用,想刪除時,發現無法刪除,我點擊刪除按鈕以后,頁面就自動刷新,刷新回來,那條商品依然存在,我換了N多瀏覽器,連手機瀏覽器都試了,就是不行,沒辦法只能提交審核,然后蘋果給我反饋說他們找不到我這個商品在哪......
- 解決辦法:審核時在附加里向蘋果說明情況,最好錄個視頻上傳到網站上(優酷就可以),把視頻地址給蘋果
- 后續:當時有過申訴,但是因為蘋果只會給注冊開發者賬號的郵件發信息,而老大每天都不在公司,所以與蘋果的溝通終中斷了。我在將App轉移賬號以后,這個Bug消失了,不知道是轉移賬號解決的還是蘋果修復了。
一:iap開發
具體的開發過程不太想寫了,網上太多了,隨隨便便百度一下就有好幾頁,這里只給大家推薦一個庫,使用起來很方便
下載地址: 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) {
// 到這里購買就成功了,但是因為存在越獄手機下載某些破解內購軟件的情況,需要跟蘋果服務器的確認是否購買成功
// IAPHelper提供了這個方法,驗證這步可以寫在前端,也可以寫在服務器端,這個自己看情況決定吧...
// 購買驗證
NSData *receipt = [NSData dataWithContentsOfURL:[[NSBundle mainBundle] appStoreReceiptURL]];
//網上的攻略有的比較老,在驗證時使用的是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{
// ..未獲取到商品
}
}];
關于內購的開發大概就這些,網上攻略賊多,大概搜索一下就能寫的出來,iap開發起來雖然不難,但是瑪德法克這里面坑實在太多...
二:iap開發時的注意事項
1.什么情況需要使用iap,什么情況使用三方支付
這里我的理解是:
購買的東西是實物,不存在于APP中,用三方支付,比如淘寶等一堆電商,他們的商品都是不存在于App中的。
如果你的支付和購買是為了解鎖App的功能,就一定要用iap,即內購
舉個栗子:現在有很多在線教育App,比如網易云課堂,騰訊課堂,可以在App中購買視頻并在APP中觀看,也就是說 '觀看視頻' 這個功能是本身就存在于APP中的,只是需要你先購買視頻,才能使用'觀看視頻'這個功能,這個時候,這種解鎖APP已有功能的操作,就必須要使用iap
2.關于商品類型:iap創建商品時選擇的商品類型大概分三類
1.消耗型商品:
類似游戲中的鉆石,還有現在某些APP中的貨幣,比如斗魚里的魚丸、映客里的映票。會被消耗的,要選擇消耗型商品
2.非消耗型商品:
無法被消耗的商品,比如上文提到的視頻課程,一次購買,就應該永久可以觀看
3.訂閱類型商品:
多用于會員,會員也可以做成用消耗型商品獲取的貨幣來購買
現在不行了,之前提交過很多都沒事,也許以前會員功能存在感太低審核團隊沒發現?又或是最近的新規,新提交的版本因為這個原因被拒了,錯誤描述:
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一定要用客戶的賬號提交審核,因為當APP中有過訂閱類型商品,注意是有過,創建過再刪除也算,這個APP無法被轉移賬號
3.注意事項
1.當你使用消耗型商品
大多數的消耗型商品都是需要登錄的,因為需要在數據庫存余額嘛。
需要注意的是:在登錄之前,你最好不要讓用戶看到商品,有可能會因為這個原因被拒(看運氣),栗子:
如上圖。這是充值頁面,即商品頁面。
你有兩個選擇:
# 1.增加游客購買,即用戶到達充值頁面,點擊充值時,即使用戶未登陸,也能充值
# 2.讓未登錄用戶無法到達充值頁面。且必須要由用戶來選擇
栗子:有個按鈕,點擊跳轉此充值頁面,當未登錄用戶點擊按鈕時,
你必須要彈出選擇框,由用戶來選擇是登錄/注冊或者取消,并說明情況
如下:
2.當你使用非消耗型商品
當你使用非消耗型商品時,你需要添加一個恢復購買的按鈕
這個常見于各種游戲中,其實知道這個規定以后還是挺好理解的,非消耗型商品是不可被消耗的,一次購買終身使用的,非消耗型的商品是跟appleId綁定的,就是你平時下載APP讓你輸入賬號密碼的內個。
你需要一個恢復購買的按鈕,來讓用戶恢復他購買的內容,上面內個IAPHelper也有這個方法,自己看一下
3.訂閱型商品
使用或曾經使用過訂閱型商品的APP無法轉移
在蘋果幫助里,有個分類是:什么樣的APP可以被轉讓
我一看,完全符合啊,然后就是開發、提交審核、通過,但是當我轉讓時卻TM提示我無法轉讓,當我再次回去查看幫助,向下拉網頁拉倒底部時
發現有另一個分類:為什么我的APP無法轉讓。。。。。。