Apple 应用内支付心得
http://tank2308635.iteye.com/blog/1238687Apple 應(yīng)用內(nèi)支付
首先簡(jiǎn)要說一下IAP 流程
簡(jiǎn)要步驟說明:
- 用戶進(jìn)入購(gòu)買虛擬物品頁(yè)面,App從后臺(tái)服務(wù)器獲取產(chǎn)品列表然后顯示給用戶
- 用戶點(diǎn)擊購(gòu)買購(gòu)買某一個(gè)虛擬物品,APP就發(fā)送該虛擬物品的productionIdentifier到Apple服務(wù)器
- Apple服務(wù)器根據(jù)APP發(fā)送過來(lái)的productionIdentifier返回相應(yīng)的物品的信息(描述,價(jià)格等)
- 用戶點(diǎn)擊確認(rèn)鍵購(gòu)買該物品,購(gòu)買請(qǐng)求發(fā)送到Apple服務(wù)器
- Apple服務(wù)器完成購(gòu)買后,返回用戶一個(gè)完成購(gòu)買的憑證
- APP發(fā)送這個(gè)憑證到后臺(tái)服務(wù)器驗(yàn)證
- 后臺(tái)服務(wù)器把這個(gè)憑證發(fā)送到Apple驗(yàn)證,Apple返回一個(gè)字段給后臺(tái)服務(wù)器表明該憑證是否有效
- 后臺(tái)服務(wù)器把驗(yàn)證結(jié)果在發(fā)送到APP,APP根據(jù)驗(yàn)證結(jié)果做相應(yīng)的處理
由于IAP相關(guān)文檔有限,為此特整理在IAP開發(fā)過程中的一些注意事項(xiàng):
一、產(chǎn)品類型的選擇
IAP的商品從消費(fèi)性質(zhì)上分為四種:
1.消耗型商品(Consumable),比如游戲道具,子彈,藥品等等。由于這類商品可以被消耗,所以支持重復(fù)購(gòu)買。蘋果應(yīng)用商店不保存此類商品的購(gòu)買記錄,如果要保存則需要開發(fā)者同步到自己的服務(wù)器上。
2.非消耗型商品(Non-Consumable),比如游戲關(guān)卡,隱藏地圖等等。這類商品只要購(gòu)買一次便可以了,蘋果應(yīng)用商店里每一個(gè)用戶對(duì)非消耗型商品的購(gòu)買都有記錄,可以在不同的設(shè)備上恢復(fù)購(gòu)買狀態(tài),這個(gè)恢復(fù)的過程叫做Restore。 在自己做測(cè)試時(shí),首次購(gòu)買非消耗型商品時(shí),在updateTransaction回調(diào)中,會(huì)調(diào)用XXXpurchasing \ XXXpurchased .再次購(gòu)買該商品時(shí),蘋果會(huì)自動(dòng)提示該商品已經(jīng)購(gòu)買您需要再次免費(fèi)獲取嗎?此時(shí)走的流程和首次購(gòu)買是一樣的,也會(huì)調(diào)用XXXpurchasing \ XXXpurchased 。都未調(diào)用XXXrestore 回調(diào),具體原因不詳。
3.自動(dòng)重置型訂閱(Auto-Renewable Subscriptions),比如電子雜志,讀物等。消費(fèi)者購(gòu)買這類商品時(shí)會(huì)從列表中選擇一個(gè)有效期限,賣家在定義商品的時(shí)候從一群固定的選項(xiàng) 中選擇添加一個(gè)有效期,比如7天,一個(gè)月,兩個(gè)月。過了有效期之后,商品的購(gòu)買狀態(tài)會(huì)被自動(dòng)重置成未購(gòu)買,要想繼續(xù)獲得內(nèi)容則需要再次訂閱。這種類型的商品和非消耗型商品一樣,會(huì)在蘋果商店內(nèi)保存購(gòu)買記錄。
4.非自動(dòng)重置型訂閱(Non-Renewing Subscription),比如用戶訂閱電子雜志和讀物報(bào)刊時(shí)需要從自定義的期限列表中選擇期限,而不是蘋果提供的固定選項(xiàng),比如9天,一個(gè)半月或任意時(shí)間。在這種情況下,蘋果商店無(wú)法根據(jù)期限來(lái)控制訂閱的到期行為,所以一切都需要開發(fā)商自己編寫相應(yīng)的邏輯來(lái)實(shí)現(xiàn)。
在創(chuàng)建產(chǎn)品類型的選擇決定著客戶端/server的處理流程,為此一定要在選擇類型時(shí)考慮所創(chuàng)建的產(chǎn)品特性,選擇時(shí),如果對(duì)于自動(dòng)重置型訂閱,特別需要注意,此類型的商品的必須依據(jù)蘋果設(shè)置的使用期限進(jìn)行創(chuàng)建,如一個(gè)月、三個(gè)月、半年等,不能創(chuàng)建任意時(shí)間段,同時(shí),在此類型中,經(jīng)過在沙盒測(cè)試發(fā)現(xiàn),當(dāng)產(chǎn)品到期時(shí),蘋果服務(wù)器會(huì)自動(dòng)進(jìn)行續(xù)訂操作,因此,客戶端需根據(jù)監(jiān)聽處理蘋果的續(xù)訂事件進(jìn)行續(xù)訂結(jié)果提示用戶;
二、產(chǎn)品的支付驗(yàn)證服務(wù)器選擇
當(dāng)創(chuàng)建好產(chǎn)品后,客戶端進(jìn)行IAP服務(wù)監(jiān)聽后,由于IAP在支付后成功后,會(huì)收到蘋果服務(wù)器的支付憑證,客戶端在獲取到支付憑證后,需要將支付憑證反饋給server服務(wù)器進(jìn)行支付驗(yàn)證確認(rèn)。此時(shí),不管是采用客戶端APP的server驗(yàn)證方式還是客戶端APP驗(yàn)證方式,都需要根據(jù)當(dāng)前APP的支付環(huán)境選擇正確的驗(yàn)證地址,在蘋果服務(wù)器中,沙盒測(cè)試環(huán)境的IAP驗(yàn)證地址為:https://sandbox.itunes.apple.com/verifyReceipt,正常線上交易的驗(yàn)證地址為:https://buy.itunes.apple.com/verifyReceipt,為保證審核的通過,需要在客戶端或server進(jìn)行雙重驗(yàn)證,即,先以線上交易驗(yàn)證地址進(jìn)行驗(yàn)證,如果蘋果正式驗(yàn)證服務(wù)器的返回驗(yàn)證碼code為21007,則再一次連接沙盒測(cè)試服務(wù)器進(jìn)行驗(yàn)證即可。
在應(yīng)用提審時(shí),蘋果IAP提審驗(yàn)證時(shí)是在沙盒環(huán)境的進(jìn)行的,即:蘋果在審核App時(shí),只會(huì)在sandbox環(huán)境購(gòu)買,其產(chǎn)生的購(gòu)買憑證,也只能連接蘋果的測(cè)試驗(yàn)證服務(wù)器,如果沒有做雙驗(yàn)證,需要特別注意此問題,否則會(huì)被拒;
三、產(chǎn)品線上支付過程中的不同環(huán)境處理
IAP沙盒環(huán)境及線上環(huán)境在處理過程中有些問題,需進(jìn)行特殊處理;
在沙盒環(huán)境下,進(jìn)行支付時(shí),無(wú)銀行支付驗(yàn)證過程,此時(shí)應(yīng)用一直處于IAP支付過程中,直至支付完成;
而在線環(huán)境下,由于IOS6添加了支付確認(rèn)過程,導(dǎo)致在銀行密碼確認(rèn)過程中確認(rèn)完畢后,應(yīng)用未能及時(shí)返回APP,且此時(shí)會(huì)收到server下推的SKPaymentTransactionStateFailed事件,當(dāng)返回到應(yīng)用后,如果此時(shí)已經(jīng)注冊(cè)了IAP支付消息處理,當(dāng)剛才的支付成功后,蘋果服務(wù)器會(huì)反饋SKPaymentTransactionStatePurchased或SKPaymentTransactionStateRestored事件,此時(shí)客戶端在此事件中獲取憑證并進(jìn)行支付確認(rèn);
由于部分類型具有購(gòu)買恢復(fù)操作Restore,所以當(dāng)刪除APP后,又重新安裝APP,此時(shí)需要恢復(fù)之前的購(gòu)買時(shí),在IAP處理中仍需進(jìn)行SKPaymentTransactionStateRestored事件的處理,如果通過server方式進(jìn)行支付憑證驗(yàn)證的,需要判斷當(dāng)前的Restore事件是恢復(fù)支付還是購(gòu)買支付,以保證servver的統(tǒng)計(jì)正確;此時(shí)可由server根據(jù)驗(yàn)證憑證中的有效信息(如有效期信息)進(jìn)行判斷是為新的購(gòu)買還是以往支付的恢復(fù);
四、IAP事件注冊(cè)時(shí)機(jī)
對(duì)于IAP支付,當(dāng)支付成功時(shí)但由于網(wǎng)絡(luò)等引起的支付憑證驗(yàn)證失敗或未進(jìn)行驗(yàn)證時(shí),在IAP事件注冊(cè)后,蘋果服務(wù)器會(huì)通過SKPaymentTransactionStatePurchased或SKPaymentTransactionStateRestored事件進(jìn)行返回支付憑證,客戶端需對(duì)此支付憑證進(jìn)行驗(yàn)證,以保證支付完整性;為此,在app啟動(dòng)時(shí),應(yīng)直接進(jìn)行IAP事件注冊(cè);即:[SKPaymentQueuedefaultQueue]addTransactionObserver操作;
五、越獄手機(jī)的IAP問題
由于越獄手機(jī)可能安裝了黑客的惡意程序,監(jiān)聽網(wǎng)絡(luò)數(shù)據(jù),支付憑證中并不包含任何用戶的apple id信息,所以我們的app和服務(wù)器無(wú)法知道這個(gè)憑證是誰(shuí)買的,如果惡意程序截獲蘋果服務(wù)器的有效支付憑證,但惡意程序?qū)⒓俚闹Ц稇{證發(fā)給后臺(tái)server導(dǎo)致原支付的賬號(hào)驗(yàn)證失敗,而此時(shí)惡意程序?qū)⒔孬@的有效支付憑證對(duì)應(yīng)到另外的支付賬號(hào)上,就會(huì)導(dǎo)致該惡意程序設(shè)置的賬號(hào)通過正確的支付憑證而獲取server的認(rèn)證。
所以,對(duì)于越獄的手機(jī)可禁用IAP支付,采用第三方支付平臺(tái)進(jìn)行支付的方式。
IAP支付常見問題 http://www.th7.cn/Program/IOS/201506/472461.shtml
總結(jié)
以上是生活随笔為你收集整理的Apple 应用内支付心得的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 大v用户数据统计分析
- 下一篇: ???????????? no perm