iOS應用內(nèi)支付(IAP)的開發(fā)經(jīng)驗交流

? ? ? ?最近幾個星期,應產(chǎn)品需求開發(fā)了應用內(nèi)支付流程,即IAP。提筆寫下大致過程,分享與大家交流。我這里是從development開發(fā)者中心創(chuàng)建證書和配置文件,在iTunes后天創(chuàng)建應用,創(chuàng)建虛擬商品,接入OC代碼這樣一套邏輯來寫的,如果新手不太明白具體內(nèi)容,建議先看看蘋果官方文檔的中文翻譯版本,了解一二!??!

1,配置Developer.apple.com

(1)登錄到Developer.apple.com,創(chuàng)建證書,即開發(fā)者開發(fā)證書

(2)為應用建立建立一個不帶通配符的App ID

(3)用該App ID生成和安裝相應的Provisioning Profile文件

(4)添加真機測試的手機

2,配置iTunes Connect

(1)登錄到iTunes Connet,用該App ID創(chuàng)建一個新的應用,大致信息填寫

(2)在功能模塊,創(chuàng)建虛擬物品


創(chuàng)建物品


第二步

這里的產(chǎn)品ID,最好寫的有意義,在后面代碼接入購買的時候用到

(3)設置稅務和銀行卡信息

我這邊是經(jīng)理事先填好的,需要的話,請看這里http://openfibers.github.io/blog/2015/02/28/in-app-purchase-walk-through/

(4)創(chuàng)建應用的沙盒測試賬號

點擊用戶與職能

點擊+號,根據(jù)具體信息填寫

3,接入代碼

(1)設置bundleID,填加證書和配置文件,保證能在手機上跑起來

(2)普及一個,我這邊學到的知識

IAP的支付流程分為兩種,一種是有服務器參與的,一種是沒有服務器參與的。有服務器參與就是說,在購買之前,需要把產(chǎn)品的相關信息發(fā)送到服務器,服務器驗證購買憑證,如果成功,我們能拿到訂單字符串,發(fā)起支付購買,完成之后,蘋果服務器返回結果,我們拿到結果在跟服務器驗證,驗證成功后,可以由服務器發(fā)放具體的商品;沒有服務器參與的話,就是跳過了驗證過程,是由客戶端自己處理邏輯。具體在看代碼吧。

官方的兩張圖,有服務器和無服務器

(3)需要在工程中引入 Storekit.framework框架

? ? ? ? ? 支付控制器中 #import <StoreKit/StoreKit.h>

? ? ? ? ? 遵守兩個代理協(xié)議 SKProductsRequestDelegate 和 SKPaymentTransactionObserver, 前者是獲取產(chǎn)品信息的回調(diào),后者是購買的觀察者。

(4)創(chuàng)建一個獲取產(chǎn)品信息的請求

NSSet * set = [NSSet setWithArray:@[prodectId]]; // 這個就是產(chǎn)品ID,在iTunes后臺創(chuàng)建

SKProductsRequest * request = [[SKProductsRequest alloc] initWithProductIdentifiers: set];

request.delegate = self; // 遵守SKProductsRequestDelegate代理

[request start];

查詢產(chǎn)品信息的回調(diào)函數(shù)

- ?(void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response {

? ? ? ? ? ? NSArray *myProduct = response.products; ? ?// 獲取到的商品數(shù)組

? ? ? ? ? ? if (myProduct.count == 0) {

? ? ? ? ? ? ? ? ? ? // 沒有獲取到

? ? ? ? ? ?{

// 代碼到此,就是有商品了。這時就有兩種操作,一種是向服務器驗證購買憑證,獲取訂單字符串,發(fā)起購買;一種是直接拿商品ID發(fā)起購買。

? ? ? ? ? ? SKMutablePayment *mPayment = [[SKMutablePayment alloc] init];

? ? ? ? ? ? mPayment.productIdentifier = productID; // 產(chǎn)品ID

? ? ? ? ? ? [[SKPaymentQueue defaultQueue] addPayment:mPayment]; ?// 調(diào)起支付界面,發(fā)起購買

}

(5)把控制器設置為監(jiān)聽購買操作的觀察者,這一步,在ViewDidLoad中設置

? ?[[SKPaymentQueue defaultQueue] ?addTransactionObserver: self];

購買結果的回調(diào)

- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray*)transactions {

? ? ? ? ? ?for (SKPaymentTransaction *transaction in transactions) {

? ? ? ? ? ? ? ? ? ? ? ? ? switch (transaction.transactionState) {

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?case SKPaymentTransactionStatePurchasing:

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? NSLog(@"商品加入列表,正在購買中...");?

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? break;

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? case SKPaymentTransactionStatePurchased:? ? // 購買完成

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?{

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? NSLog(@"購買完成");

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? [self finishedTransaction:transaction];

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? break;

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? case SKPaymentTransactionStateFailed:? ? ? // 交易失敗

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?{

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?[self failedTransaction:transaction];

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?}

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?break;

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?case SKPaymentTransactionStateRestored: //已經(jīng)購買過該商品

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? NSLog(@"已經(jīng)購買過該商品");

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? [self alreadyBuyWithTransaction:transaction];

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? ? ? ? ? ? ? ?break;

? ? ? ? ? ? ? ? ? ? ? ? ? ? ?default:

? ? ? ? ? ? ? ? ? ? ? ? ? ? ?break;

? ? ? ? ? ? ? ? ? ? ? }

? ? ? ? ? ?}

}

注: 完成購買的操作中,如果有服務器,需要向服務器驗證購買結果,如果沒有,就直接完成。

[[SKPaymentQueue defaultQueue] finishTransaction:transaction];

調(diào)起支付后,輸入注冊的沙盒賬號即可點擊購買。


注:這里有幾個注意事項

一,測試支付的ipa必須使用[App-Store]證書

二,越獄機器無法測試IAP

三,用SandBox賬號測試支付的時候,必須把在系統(tǒng)[設置]里面把[Itunes Store 與 App Store]登錄的非 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? SandBox賬號注銷掉,否則向蘋果服務器請求不到訂單信息

四,Sandbox賬號不要在正式支付環(huán)境登陸支付,登陸過的正式支付環(huán)境的SandBox賬號會失效

五,所有在itunes上配置的商品都必須可購買,不能有某些商品根據(jù)商戶自己的服務器的數(shù)據(jù)在某個時期出現(xiàn)免費的情況

六,商品列表不能按照某些特定條件進行排序(比如說下載量)

七,非消耗型商品必須的有恢復商品功能

八,非消耗類型的商品不要和商戶自己的服務器關聯(lián)

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • iOS應用內(nèi)付費(IAP)開發(fā)步驟 1.蘋果iTunes Connect內(nèi)購產(chǎn)品信息錄入。 1)創(chuàng)建app內(nèi)購買項...
    MillerWang閱讀 11,317評論 0 7
  • 在我們應用開發(fā)中我們經(jīng)常在自己的項目中使用到支付,下面我們來談談iOS這塊的支付;iOS支付主要分為兩類,第三方支...
    Hither閱讀 8,490評論 9 42
  • iOS支付 iOS支付分為兩類,第三方支付和應用內(nèi)支付(內(nèi)購)。 第三方支付包括:支付寶支付、微信支付、銀聯(lián)支付、...
    sillen閱讀 1,462評論 0 1
  • iOS支付 iOS支付分為兩類,第三方支付和應用內(nèi)支付(內(nèi)購)。 第三方支付包括:支付寶支付、微信支付、銀聯(lián)支付、...
    帥不過oneS閱讀 3,001評論 2 8
  • 腦子清醒得像上了發(fā)條 好像是25年來第一次 認認真真得剖析自己對感情的態(tài)度 我遇見你 一個暫時還未讓我心動的人 ...
    0803號島嶼閱讀 313評論 1 0

友情鏈接更多精彩內(nèi)容