[iOS]应用内支付(内购)的个人开发过程及坑!
 本文基于XcodeVersion 7.3 (7D175)版本,手機是iPhone 6,9.3系統(tǒng)。 
一. 創(chuàng)建測試App
首先你需要登錄 App的ItunesConnection,你會看到如下界面 
簡單的介紹一下這幾個選項 
 1.我的App主要用于管理自己的App應用,例如編輯資料,上架,下架等。 
 2.銷售和趨勢主要是來查看App在各個平臺的下載量,收入等方面數(shù)據(jù),里面有曲線圖等圖文結合的方式給我們參考。 
 3.付款和財務報告顯示的是你的收入以及付款等相關信息。 
 4.iAd主要是跟廣告有關,開發(fā)者可以登錄到Workbench,通過iAd對應用的廣告進行控制。 
 5.用戶和職能用于生成相應賬號,例如蘋果沙河測試賬號。 
 6.協(xié)議,稅務和銀行業(yè)務則是你銀行相關賬戶的信息設置。 
 在這里我們選擇第一個選項,我的App, 然后點擊左上角的加號,新建一個用來測試用的App。 
點新建 App,會出現(xiàn)新建窗口; 
在這里有幾個需要填寫的地方,名稱自己取,平臺IOS,語言選擇了簡體中文,套裝ID也就是你的Bundle Identifier,需要你在Certificates頁面 申請BundleID,SKU可以理解為用戶看一看到的唯一標示,會體現(xiàn)在你的app的App Store的鏈接中。
二.添加內購
App創(chuàng)建好之后,我們打開創(chuàng)建的App,在左上角選擇功能,會看到左側的App 內購買項目。我們點擊右下角的加號,為App添加內購項目。 
之后我們會看到類型的選項,如下圖
官方的注釋寫的很清楚了,只在這里簡單的說下前兩種: 
 - 消耗型項目 就像你玩游戲需要買金幣,買鉆石等,只要花錢就可以無限次的購買 
 - 非消耗型項目 就像你在App Store購買App,買了一次之后就不用再買第二次,你擁有永久使用權。 
 在我們的app中,是充值會員,所以選擇的是第一種,可以無限次購買。
這里有幾個選項,需要填寫商品名稱,產品ID以及價格等級,簡單說明一下 
 1. 商品名稱根據(jù)你的消費道具的實際意義來說明,比如“100顆寶石”,“100金幣”等。 
 2. 產品ID是比較重要的,由項目自定義,只要唯一即可,因為測試,我在這里隨便填寫的123,在實際應用中,一定要認真填寫。 
 3. 價格等級的話“查看價格表”中有對應的說明,可以對照著表中每個國家的貨幣價格與等級來選擇 
 接下來是語言選擇,和上傳快照如下圖
點擊添加語言,填寫名稱和描述,這里我們依然選擇簡體中文,如下
審核備注,根據(jù)實際情況填寫,可以不填。而下面的屏幕快照,則是商品圖片,以像素為單位,最低尺寸為321,390,尺寸需求如下圖,上傳即可。
到這里為止, 我們的內購項目則添加完成。接下來則是測試階段了。
三.申請沙盒測試賬號(用來測試購買項目)
這個賬號,是利用蘋果的沙盒測試環(huán)境來模擬AppStore的購買流程,你肯定不會想要用真實RMB去購買測試吧? 
 首先我們回到iTunes Connect中,在這里我們選擇用戶和職能。
然后在上面的第三個選項沙箱技術測試員中點擊加號,添加測試員。
在信息填寫頁面只簡單說兩句。 
 所有信息都可以隨意填寫,不用管是否真實。 
 App Store地區(qū)選擇,一定要選對,它對應的是你創(chuàng)建的App的地區(qū), 你App是中國的話, 在這里我們依然選擇中國。 
 此賬號只能用來測試,不要在正式的appstore上使用 
 填寫完畢,點擊保存后,我們則生成一個測試賬號,當然這個賬號是可以隨時刪除和添加的。
之后終于到了寫代碼的時候了,點開你的Xcode創(chuàng)建你的項目! 
 大部分代碼都可以在.m文件中實現(xiàn)。
在這里需要注意幾點, 
 1. 代碼中的_currentProId所填寫的是你的購買項目的的ID,這個和第二步創(chuàng)建的內購的productID要一致;本例中是 123。 
 2. 在監(jiān)聽購買結果后,一定要調用[[SKPaymentQueue defaultQueue] finishTransaction:tran];來允許你從支付隊列中移除交易。 
 3. 沙盒環(huán)境測試appStore內購流程的時候,請使用沒越獄的設備。 
 4. 請務必使用真機來測試,一切以真機為準。 
 5. 項目的Bundle identifier需要與您申請AppID時填寫的bundleID一致,不然會無法請求到商品信息。 
 6. 真機測試的時候,一定要退出原來的賬號,才能用沙盒測試賬號 
 7. 二次驗證,請注意區(qū)分宏, 測試用沙盒驗證,App Store審核的時候也使用的是沙盒購買,所以驗證購買憑證的時候需要判斷返回Status Code決定是否去沙盒進行二次驗證,為了線上用戶的使用,驗證的順序肯定是先驗證正式環(huán)境,此時若返回值為21007,就需要去沙盒二次驗證,因為此購 買的是在沙盒進行的。
附:蘋果支付錯誤目錄
| 21000 | The App Store could not read the JSON object you provided. | 
| 21002 | The data in the receipt-data property was malformed or missing. | 
| 21003 | The receipt could not be authenticated. | 
| 21004 | The shared secret you provided does not match the shared secret on file for your account.Only returned for iOS 6 style transaction receipts for auto-renewable subscriptions. | 
| 21005 | The receipt server is not currently available. | 
| 21006 | This receipt is valid but the subscription has expired. When this status code is returned to your server, the receipt data is also decoded and returned as part of the response.Only returned for iOS 6 style transaction receipts for auto-renewable subscriptions. | 
| 21007 | This receipt is from the test environment, but it was sent to the production environment for verification. Send it to the test environment instead. | 
| 21008 | This receipt is from the production environment, but it was sent to the test environment for verification. Send it to the production environment instead. | 
摘自:http://blog.csdn.net/darling_shadow/article/details/51538267
參考: 
 1. iOS開發(fā)之內購-AppStore; 
 2. 蘋果官方文檔 
轉載于:https://www.cnblogs.com/MyBlogZH/p/5563468.html
總結
以上是生活随笔為你收集整理的[iOS]应用内支付(内购)的个人开发过程及坑!的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: Spring Data Redis—Pu
- 下一篇: iOS中的动画
