1. 程式人生 > >iOS應用內支付(IAP)的注意事項

iOS應用內支付(IAP)的注意事項

來源:http://blog.csdn.net/xinruiios/article/details/9289573

IAP的全稱是In-App Purchase,應用內付費。這種業務模式允許使用者免費下載試用,對應用內提供的商品選擇消費,比如購買遊戲道具,購買遊戲等級等等。相比完全收費的應 用而言,應用內付費給使用者試用的機會,不會讓優秀的應用因為缺乏使用者的認知而喪失消費者;

由於IAP相關文件有限,為此特整理在IAP開發過程中的一些注意事項:

一、產品型別的選擇

IAP的商品從消費性質上分為四種:

1.消耗型商品(Consumable),比如遊戲道具,子彈,藥品等等。由於這類商品可以被消耗,所以支援重複購買。蘋果應用商店不儲存此類商品的購買記錄,如果要儲存則需要開發者同步到自己的伺服器上。

2.非消耗型商品(Non-Consumable),比如遊戲關卡,隱藏地圖等等。這類商品只要購買一次便可以了,蘋果應用商店裡每一個使用者對非消耗型商品的購買都有記錄,可以在不同的裝置上恢復購買狀態,這個恢復的過程叫做Restore。

3.自動重置型訂閱(Auto-Renewable Subscriptions,比如電子雜誌,讀物等。消費者購買這類商品時會從列表中選擇一個有效期限,賣家在定義商品的時候從一群固定的選項 中選擇新增一個有效期,比如7天,一個月,兩個月。過了有效期之後,商品的購買狀態會被自動重置成未購買,要想繼續獲得內容則需要再次訂閱。這種型別的商品和非消耗型商品一樣,會在蘋果商店內儲存購買記錄。

4.非自動重置型訂閱(Non-Renewing Subscription,比如使用者訂閱電子雜誌和讀物報刊時需要從自定義的期限列表中選擇期限,而不是蘋果提供的固定選項,比如9天,一個半月或任意時間。在這種情況下,蘋果商店無法根據期限來控制訂閱的到期行為,所以一切都需要開發商自己編寫相應的邏輯來實現。

在建立產品型別的選擇決定著客戶端/server的處理流程,為此一定要在選擇型別時考慮所建立的產品特性,選擇時,如果對於自動重置型訂閱,特別需要注意,此型別的商品的必須依據蘋果設定的使用期限進行建立,如一個月、三個月、半年等,不能建立任意時間段,同時,在此型別中,經過在沙盒測試發現,當產品到期時,蘋果伺服器會自動進行續訂操作,因此,客戶端需根據監聽處理蘋果的續訂事件進行續訂結果提示使用者;

二、產品的支付驗證伺服器選擇

當建立好產品後,客戶端進行IAP服務監聽後,由於IAP在支付後成功後,會收到蘋果伺服器的支付憑證,客戶端在獲取到支付憑證後,需要將支付憑證反饋給server伺服器進行支付驗證確認。此時,不管是採用客戶端APP的server驗證方式還是客戶端APP驗證方式,都需要根據當前APP的支付環境選擇正確的驗證地址,在蘋果伺服器中,沙盒測試環境的IAP驗證地址為:https://sandbox.itunes.apple.com/verifyReceipt,正常線上交易的驗證地址為:https://buy.itunes.apple.com/verifyReceipt,為保證稽核的通過,需要在客戶端或server進行雙重驗證,即,先以線上交易驗證地址進行驗證,如果蘋果正式驗證伺服器的返回驗證碼code為21007,則再一次連線沙盒測試伺服器進行驗證即可。

在應用提審時,蘋果IAP提審驗證時是在沙盒環境的進行的,即:蘋果在稽核App時,只會在sandbox環境購買,其產生的購買憑證,也只能連線蘋果的測試驗證伺服器,如果沒有做雙驗證,需要特別注意此問題,否則會被拒;

三、產品線上支付過程中的不同環境處理

IAP沙盒環境及線上環境在處理過程中有些問題,需進行特殊處理;

在沙盒環境下,進行支付時,無銀行支付驗證過程,此時應用一直處於IAP支付過程中,直至支付完成;

而線上環境下,由於IOS6添加了支付確認過程,導致在銀行密碼確認過程中確認完畢後,應用未能及時返回APP,且此時會收到server下推的SKPaymentTransactionStateFailed事件,當返回到應用後,如果此時已經註冊了IAP支付訊息處理,當剛才的支付成功後,蘋果伺服器會反饋SKPaymentTransactionStatePurchasedSKPaymentTransactionStateRestored事件,此時客戶端在此事件中獲取憑證並進行支付確認;

由於部分型別具有購買恢復操作Restore,所以當刪除APP後,又重新安裝APP,此時需要恢復之前的購買時,在IAP處理中仍需進行SKPaymentTransactionStateRestored事件的處理,如果通過server方式進行支付憑證驗證的,需要判斷當前的Restore事件是恢復支付還是購買支付,以保證servver的統計正確;此時可由server根據驗證憑證中的有效資訊(如有效期資訊)進行判斷是為新的購買還是以往支付的恢復;

四、IAP事件註冊時機

對於IAP支付,當支付成功時但由於網路等引起的支付憑證驗證失敗或未進行驗證時,在IAP事件註冊後,蘋果伺服器會通過SKPaymentTransactionStatePurchased或SKPaymentTransactionStateRestored事件進行返回支付憑證,客戶端需對此支付憑證進行驗證,以保證支付完整性;為此,在app啟動時,應直接進行IAP事件註冊;即:[SKPaymentQueuedefaultQueue]addTransactionObserver操作;

五、越獄手機的IAP問題

由於越獄手機可能安裝了黑客的惡意程式,監聽網路資料,支付憑證中並不包含任何使用者的apple id資訊,所以我們的app和伺服器無法知道這個憑證是誰買的,如果惡意程式截獲蘋果伺服器的有效支付憑證,但惡意程式將假的支付憑證發給後臺server導致原支付的賬號驗證失敗,而此時惡意程式將截獲的有效支付憑證對應到另外的支付賬號上,就會導致該惡意程式設定的賬號通過正確的支付憑證而獲取server的認證。

所以,對於越獄的手機可禁用IAP支付,採用第三方支付平臺進行支付的方式。