IAP簡介
IAP的全稱是In-App Purchase,應用內付費。這種業務模式容許用戶免費下載試用,對應用內提供的商品選擇消費,好比購買遊戲道具,購買遊戲等級等等。相比徹底收費的應用而言,應用內付費給用戶試用的機會,不會讓優秀的應用由於缺少用戶的認知而喪失消費者;並且對於開發商,也不須要爲了讓用戶試用而單獨發佈一款免費的精簡版本。
下面詳細介紹一下應用內支付的詳細步驟:
1.點開應用,點擊manager in-app purchases
2.點擊添加一個新的應用
3.選擇相應的類型
IAP裏有兩個關鍵的詞,商品(Product)和交易(Transaction)。
商品能夠是一種虛擬的道具,一個隱藏的關卡或者地圖,但必須是直觀的,可讓用戶購買後直接獲益的產品。IAP的商品從消費性質上分爲四種:
消耗型商品,好比遊戲道具,子彈,藥品等等。因爲這類商品能夠被消耗,因此支持重複購買。蘋果應用商店不保存此類商品的購買記錄,若是要保存則須要開發者同步到本身的服務器上。
非消耗型商品,好比遊戲關卡,隱藏地圖等等。這類商品只要購買一次即可以了,蘋果應用商店裏每個用戶對非消耗型商品的購買都有記錄,能夠在不一樣的設備上恢復購買狀態,這個恢復的過程叫作Restore。
自動重置型訂閱,好比電子雜誌,讀物等。消費者購買這類商品時會從列表中選擇一個有效期限,賣家在定義商品的時候從一羣固定的選項中選擇添加一個有效期,好比7天,一個月,兩個月。過了有效期以後,商品的購買狀態會被自動重置成未購買,要想繼續得到內容則須要再次訂閱。這種類型的商品和非消耗型商品同樣,會在蘋果商店內保存購買記錄。
非自動重置型訂閱,好比用戶訂閱電子雜誌和讀物報刊時須要從自定義的期限列表中選擇期限,而不是蘋果提供的固定選項,好比9天,一個半月或任意時間。在這種狀況下,蘋果商店沒法根據期限來控制訂閱的到期行爲,因此一切都須要開發商本身編寫相應的邏輯來實現。
交易是指用戶對一個商品的購買行爲,當用戶點擊購買一件商品時,一個新的付費行爲就被添加到付費隊列中,付費隊列是一條系統線程,即便應用程序終止仍然會繼續執行。
4.添加相應的應用信息
Reference Name 應用名字
Product ID 應用的id
添加語言和支付的名字
添加相應的價格
添加相應的圖片
點擊保存
5.測試IAP的準備流程
若是你是一個註冊的蘋果開發者,接受了最新的蘋果開發者協議,而且簽署了iOS付費應用合同,那麼你就能夠繼續IAP的測試了。
使用未越獄的設備
蘋果應用商店是一個交易環境,任何用戶能夠在這個環境內購買應用,但若是要測試正在開發過程當中的應用內付費,咱們不能在真正的蘋果商店裏進行。蘋果給開發者提供了一個用於調試購買行爲的測試沙箱,它徹底複製了應用商店的交易環境,但在沙箱環境中咱們不能用日常的蘋果賬號,而是須要用測試賬號。
在iTunesConnect的首頁能夠點擊Manage Users進入用戶管理頁面,而後選擇Test User來建立測試賬號。根據蘋果開發者的最新謝意,建立測試賬號必須使用一個真實的Email地址,並且密碼必須是符合規範的,測試帳號須要在郵件裏激活後纔可使用。這裏建立的賬號能夠用來購買開發過程當中的應用內付費,但必須記住,測試賬號不能用來登錄真正的應用商店並在產品環境中進行購買行爲,不然你的iTunes賬號將有可能被停用。
6.實現ios開發
測試代碼:http://easymorse-iphone.googlecode.com/svn/trunk/PurchaseTest/
在App Delegate中添加Observer
[[ECPurchase shared] addTransactionObserver];
.設置ECPurchase的product delegate(產品列表代理),transaction delegate(購買結果代理),驗證方式
[[ECPurchase shared] setProductDelegate:self];
[[ECPurchase shared] setTransactionDelegate:self];
[[ECPurchase shared] setVerifyRecepitMode:ECVerifyRecepitModeiPhone];
.請求商品列表
[[ECPurchase shared] requestProductData:identifiers];
實現代理函數繪製UI
-(void)didReceivedProducts:(NSArray *)products;
.購買商品
[[ECPurchase shared] addPayment:proIdentifier];
.確認結果
若是不須要收據認證明現代理函數
-(void)didFailedTransaction:(NSString *)proIdentifier;
-(void)didRestoreTransaction:(NSString *)proIdentifier;
-(void)didCompleteTransaction:(NSString *)proIdentifier;
不然實現代理函數
-(void)didCompleteTransactionAndVerifySucceed:(NSString *)proIdentifier;
-(void)didCompleteTransactionAndVerifyFailed:(NSString *)proIdentifier withError:(NSString *)error;
運行內部支付demo,點擊測試:
內部支付的邏輯:
iOS App 向 Developer Server 發送請求,得到一份產品列表(通常都是 Product ID)。
獲取產品列表須要 iOS App 主動得到,這樣就能夠在不升級iOS的狀況下添加產品。
Developer Server 返回給 iOS App 包含 Product ID 的列表。
iOS App 向 App Store 發送請求,指望得到到產品的信息。