為你的應(yīng)用添加內(nèi)置收費(fèi) In App Purchase
自從09年10月16日蘋果發(fā)送給所有開發(fā)者的那一封信,通知了程序內(nèi)購買將可用于免費(fèi)應(yīng)用,我認(rèn)為這也宣告了pTE版的時代結(jié)束。
成千上萬的免費(fèi)版的軟件或游戲,將作為限制了功能的完整版免費(fèi)發(fā)售,如果用戶覺得有意購買,可以直接解鎖完整版的功能或購買附加內(nèi)容。
本文講闡述如何為你現(xiàn)有的應(yīng)用或游戲添加程序內(nèi)購買(In App Purchase)功能。
閱讀前提:假設(shè)了你擁有一定的iPhone SDK開發(fā)基礎(chǔ),和App Store實(shí)踐經(jīng)驗(yàn)。
你的程序需要***的Bundle ID, 如果已經(jīng)發(fā)布的程序使用了通配符,那么就不能直接添加該功能。如果擁有了***的ID,請?jiān)趐rogram portal中添加你的app id,允許程序使用內(nèi)購買(Enable In App Purchase)。
在設(shè)計好你的程序內(nèi)購買的功能以后,首先需要定義元數(shù)據(jù)。來到iTunes Connect,在Manage Your In App Purchases中為你的程序添加一個程序內(nèi)購買的商品。
上面***個部分是添加的內(nèi)部信息。參考名稱,ID,類型,和價格。以及各種本地化信息。
這里簡單說一下類型的選擇,其他信息,以及In App Purchase支持什么類型的商品請查看Getting Started with In App Purchase。
Non-consumable 默認(rèn)類型,非消耗品,具有持久性,特點(diǎn)是一次性購買,可用在所有設(shè)備。例如解鎖游戲的儲存關(guān)卡功能。
Consumable 消耗品,用完或使用后消失,可多次購買,不能用在所有的設(shè)備,例如游戲中的血瓶或技能書。
Subscription 訂閱,和消耗品一樣,除了可以在設(shè)備之間共享。
創(chuàng)建購買流程
大致可以分為十個步驟:
驗(yàn)證App Store存取權(quán)限 這樣做是因?yàn)?,家長控制或一些公司的配置文件阻止了此功能,使用支付隊(duì)列的查詢功能canMakePayments來確定用戶是否有權(quán)限購買,返回值 YES代表可以購買/NO代表沒有權(quán)限購買。
載入目錄 載入儲存在本地或者遠(yuǎn)程的商品目錄。
獲得商品本地化信息 程序向App Store發(fā)起查詢請求獲得目錄中商品的本地化信息:
- myPossibleProds = [NSSet setWithObjects: @”myProd1”, @”myProd2”, @”myProd3, nil];
- myProdRequest = [[SKProductsRequest alloc] initWithProductIdentifiers: myPossibleProds];
- myProdRequest.delegate = myProductsRequestDelegate; [myProdRequest start];
程序接收來自App Store的回應(yīng): -(void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response response包含可能的信息 response.products //產(chǎn)品信息 response.invapdProductIdentifiers //錯誤的產(chǎn)品標(biāo)示符 錯誤的產(chǎn)品可能由下面的原因?qū)е拢?/p>
商品未在 iTunes Connect中錄入。
商品沒有選擇“Cleared for Sale”。
商品還沒有傳播到所有服務(wù)器。
創(chuàng)建商品信息 前面的步驟獲得了產(chǎn)品信息的數(shù)組用以呈現(xiàn):
- myAvailableProductsArray = response.products;
- for (SKProduct* aProduct in myAvailableProductsArray) {
- diplayTitle = aProduct.locapzedTitle;
- displayDesc = aProduct.locapzedDescription;
- displayPrice = aProduct.price;
- }
呈現(xiàn)商品信息 在UI中顯示前面獲得的信息
請求支付
- myPayment = [SKPayment paymentForProductIdentifier: selectedProdID userInfo: nil];
- myPayment = [SKPayment paymentForProduct: selectedProduct userInfo: nil];
然后提交到隊(duì)列
- defaultPaymentQueue = [SKPaymentQueue defaultQueue]; [defaultPaymentQueue addTransactionObserver: myObserver]; [defaultPaymentQueue addPayment: myPayment];
- [defaultPaymentQueue addPayment: myRequest];
- - (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions
驗(yàn)證支付的事務(wù)
- for(SKPaymentTransaction *aTransaction in transactions) {
- switch (aTransaction.transactionState )
- {
- // 商品進(jìn)入購買流程
- case SKPaymentTransactionStatePurchasing: ... break;
- // 成功購買商品
- case SKPaymentTransactionStatePurchased: ... break;
- // 已經(jīng)購買過該商品
- case SKPaymentTransactionStateRestored: ... break;
- // 用戶取消交易
- case: SKPaymentTransactionStateFailed ... break;
- }
Used to vapdate e-commerce transaction
Cryptographically signed chunk of data
Contains information about the purchase
Can vapdate using Web-based API
收到交易回執(zhí)以后可以傳送到你的服務(wù)器處理該交易。
你的服務(wù)器可以向蘋果發(fā)送交易驗(yàn)證信息。 蘋果的交易驗(yàn)證地址:https://buy.itunes.apple.com/verifyReceipt 驗(yàn)證數(shù)據(jù)格式:{ receipt-data : &helpp;} 蘋果的返回值如果是{ status : 0 } 那么交易是正確,如果返回任何其他值 { status : any_other_value } 交易就是不成立。 你的服務(wù)器收到蘋果的驗(yàn)證成功信息以后,返回給應(yīng)用程序類似于解鎖功能等消息。
解鎖內(nèi)置物品火提供遠(yuǎn)程存取地址 需要注意的地方
用戶可能隨時退出程序。
Store Kit 的交易隊(duì)列是持久化的。
交易是持久化的。
驗(yàn)證存取。
移除交易。
- [[SKPaymentQueue defaultQueue] finishTransaction: transaction];
儲存購買 需要將非消耗的購買記錄在服務(wù)器上,以供用戶更換設(shè)備或刪除程序以后重新安裝時再次解鎖功能。
提供物品恢復(fù) 前面的代碼中,已經(jīng)購買過該商品的處理就是直接解鎖。 defaultPaymentQueue = [SKPaymentQueue defaultQueue]; [defaultPaymentQueue restoreCompletedTransactions];
測試沙盒環(huán)境
只供給測試用戶,并且設(shè)備上才有效,不能使用模擬器測試。
可以為每個國家的商店添加測試帳號。
不能用來測試其他的iTunes Store特性。
需要為每個測試添加***的email地址,可以考慮使用+
payam+usa@example.com—測試美國的商品
payam+uk@example.com—測試英國的商品
payam+jp@example.com—測試日本的商品
測試步驟,需要在設(shè)備的設(shè)置菜單中iTunes Store登出原有帳戶。
然后不要在設(shè)置菜單中登錄測試帳號,而是直接打開需要測試的程序進(jìn)行測試。
在這之前需要在iTunes Connect的Manage Users菜單中添加In App Purchase測試用戶。
財務(wù)報表
收入和應(yīng)用程序同樣的規(guī)則
你獲得總收入的70%。
支付日程,使用稅,報表等全部都一樣。
報表
一樣的報表格式。
販賣的標(biāo)示符欄顯示物品的產(chǎn)品ID。
所有者標(biāo)示符欄顯示程序的ID。