[轉]iOS 應用內付費(IAP)開發步驟

來源:互聯網
上載者:User

標籤:

FROM : http://blog.csdn.net/xiaoxiangzhu660810/article/details/17434907

參考文章連結:

(1)http://mobile.51cto.com/iphone-389249.htm

(2)http://blog.csdn.net/xiaominghimi/article/details/6937097

(3)http://zengwu3915.blog.163.com/blog/static/2783489720137485857701/

步驟如下:

 

 

第一步:你需要在iTunesConnect中建立個新的App,然後為這個App設定一些產品(付費道具)等;

     OK,這裡Himi稍微解釋下,iTunesConnect是蘋果提供的一個平台,主要提供AP發布和管理App的,最重要的功能是建立管理項目資訊,項目付費產品(道具)管理、付費的測試帳號、提交App等等,這裡就簡單介紹這麼多,關於產品一詞在此我們可以理解成遊戲道具即可;在蘋果看來所有付費都屬於產品 =。 =千萬不要糾結字眼哦~

    OK,開啟iTunesConnect網站:https://itunesconnect.apple.com/WebObjects/iTunesConnect.woa (注意:企業級的使用者必須使用公司主開發人員帳號登陸才可!)

    成功登陸後的頁面如下:

 

              

              這裡大概說下重要的一些項:

             Contracts, Tax, and Banking   : 管理銀行帳號、連絡人以及稅等等;這裡要根據提示完成對應的資訊填寫!一定要詳細填寫喔~

             Manage Users :系統管理使用者的,比如主帳號以及測試付費的(測試App)帳號;

             Manage Your Applictions:管理應用程式的,你所有發布的應用和每個應用的狀態都在這裡面;

 

     下面我們建立一個App項目,大家放心,我們這裡建立的是不會直接提交給App審核的,所以放心建立,只要控制好App的狀態不要是待審核狀態即可,不過即使你不小心將項目提交了,也沒事,直接更改App狀態即可了;

     選擇Manage Your Applictions選項,然後建立一個項目:【Add New App】,根據提示來填寫吧,這裡就不細緻說明了~

     建立好一個App之後,在點擊Manage Your Applictions後的介面應該如下:

     

    這裡你將看到自己建立的App,點擊你建立的App項目,這裡Himi建立的項目名字叫”ProjectForBuyTest“,點擊你的App進入如下介面:

 

    

  (注意:這裡的Bundle ID一定要跟你的項目中的info.plist中的Bundle ID保證一致!!!!)

     這裡可以管理你的項目的資訊、狀態、是否嵌入GameCenter等等選項,那麼本章我們重點介紹如何使用IAp沙箱測試程式內付費,所以這裡我們點擊右上方的”Manage In-App Purchases“選項進入建立產品(遊戲道具)介面如下:

 

      中的下方看到Himi建立過的四個產品(道具)了,你可以點擊”Create New“選項建立一個產品(付費道具),點擊建立如下介面:

  

   中Himi沒有出所有的選項,這裡大概介紹下,這個介面是選擇你的消費道具的種類,種類說明如下:

   類型選擇有四種選擇:

   1.Consumable(消耗品): 每次下載都需要付費;

   2.Non-consumable(非消耗品): 僅需付費一次;

   3.Auto-Renewable Subscriptions:自動訂閱;

   4.Free Subscription:免費訂閱

   最下方是你沙箱測試的,暫且不管即可;

   這裡Himi選擇Consumable選項,比如很多遊戲都是購買金幣啦這樣子就可以選擇這個;然後出現如下介面:

 

 

   Reference Name: 付費產品(道具的)參考名稱

   Product ID(產品ID): 你產品的唯一id。通常格式是 com.xx.yy,但它可以是任何形式,不要求以程式的App ID作為首碼。

   Add Language: 添加產品名稱與描述語言;

   Price Tier:選擇價格,這裡你選擇價格後,會出現如最下方的價格對照表

   Screenshot(截屏): 展示你產品的截屏。(這個直接無視,測試App務必要管這個的)

 

  Product ID(產品ID)可以建立多個,比如我想遊戲中分為0.99$ 、1.99$等道具那就建立對應多個產品ID

  我們填寫好了”Reference Name“與”Product ID“以及”Price Tier“後,點擊”Add Language“選項然後出現如下介面:

            

 

  中的選項:

      Language:語言

      Displayed Name(顯示名稱): 使用者看到的產品名稱。

      Description(描述): 對產品進行描述。

  

  Ok,一路 Save儲存回到”Manage In-App Purchases“介面中會看到我們建立的產品(道具)如下:

 

 

  大家可以看到建立的產品(道具)ID:這裡Himi建立的產品ID是com.himi.wahaha ,這裡要記住這個產品ID哦~

 

第二步:申請測試帳號,利用沙箱測試類比AppStore購買道具流程;

  回到itunesconnect首頁中,選擇“Manage Users”然後選擇“Test User”,然後出現的介面如:

    這裡Himi已經建立了兩個測試帳號了,點擊介面中的 “Add New User”進行建立即可;記住帳號和密碼哈,記不住就刪掉重建立 娃哈哈~(切記:不能用於真正的AppStore中使用此帳號,不僅不能用,而且一旦AppStore發現後果你懂得~) 

 

   第三步:填寫相關的稅務,銀行,連絡人資訊;

 

 

1.這裡需要先設定一下。點擊“Request”,填寫一下Legal Entity的基本資料 完成之後同意一個協議並提交之後頁面中會出現Contracts In Process. 2.這時,分別來設定Contact Info、Tax Info和Bank Info(1)、Contact點擊Contact Info下的“Set Up”,進入Contact Information頁面,並點擊“Add New Contact”來增加新的contact 填寫好裡面對應的資訊,點Save儲存就可以了 然後回到Contact Information頁面,剛增加的Contact就會出現在下拉框中,將對應的Role設定對應的Contact然後點Done完成 (2)、Bank回到Contracts, Tax, and Banking首頁面,選擇Bank Info下面的”Set Up“,進入Bank Information 頁面。選擇“Add Bank Account”來增加一個銀行資訊 選擇你銀行卡開戶所在哪個國家,這裡有China了,呵呵  下一步設定銀行的CNAPS Code,這個號有的地方說是聯行號,可以理解為每個銀行支行的唯一ID吧,這個可以打電話問你銀行卡開戶行,就是他們那的一個唯一12位的標示號碼,也可以通過蘋果的Look up Transit Number去搜尋。  不過,我覺得蘋果的搜尋全英文的,都不知道國內銀行的英文名叫什麼,什麼支行的英文又是什麼。好吧,那就用下面這個網站去查詢也是可以的https://e.czbank.com/CORPORBANK/WebBank?&tranFlag=0&dse_operationName=wgQueryUnionBankSrvOp 複製擷取的現代化支付系統行號,粘帖到上面蘋果頁面中的CNAPS Code項。點擊下一步,蘋果會根據你寫的那個代碼讀出對應的銀行資訊,這在你可以驗證一下你寫的銀行號是否正確。  再下一步就設定你的卡號,賬戶名以及幣種(人民幣是CNY,當初還以為是RMB呢,找了半天,納悶。當然,如果你的卡支援美元什麼的也可以選擇別的幣種) 

 

這步設定完後就是顯示你設定的所有資訊,這在你可以核對一下是否有誤,問沒題的話點“Save”儲存,儲存後就回到前面的Choose Bank頁面,選擇剛才設定的這個銀行“Save”完成銀行設定 (3)、Tex回到Contracts, Tax, and Banking首頁面,選擇Tex Info下面的”Set Up“,進入Tex Information 頁面。如果上面有你所在的國家就選,沒有的都選擇U.S. Tax Forms。下面就來設定一下在天朝的情況:A. 選擇第一個U.S Tax Forms,點擊下面的“Set Up” B. 是否美國公民、或美國公司什麼的,這個選擇“No”就可以了,不然後面要你設定稅號的,這個,真心木有。 C. 有沒有美國商務工作.這個也用“No”吧,這個神馬的太遙遠了,呵呵
  D. 設定Tax Infomation。設定一下基本的資訊設定好後點“Confirm”就完成了  同樣的,把World也設定一下。設定完成後會需要一個處理時間,理論值會在24小時內完成。

 

 

第四步:在項目中申請購買產品代碼以及監聽;

一、開發工作(ios端)

1、 在工程中引入 storekit.framework 和 #import <StoreKit/StoreKit.h>

2、 獲得所有的付費Product ID列表。這個可以用常量儲存在本地,也可以由自己的伺服器返回。

3、 製作一個介面,展示所有的應用內付費項目。這些應用內付費項目的價格和介紹資訊可以是自己的伺服器返回。但如果是不帶伺服器的單機遊戲應用或工具類應用, 則可以通過向App Store查詢獲得。我在測試時發現,向App Store查詢速度非常慢,通常需要2-3秒鐘,所以不建議這麼做,最好還是搞個自己的伺服器吧。

4、當使用者點擊了一個IAP項目,我們先查詢使用者是否允許應用內付費,如果不允許則不用進行以下步驟了。代碼如下:

  1. if ([SKPaymentQueue canMakePayments]) { 
  2.     // 執行下面提到的第5步: 
  3.     [self getProductInfo]; 
  4. } else { 
  5.     NSLog(@"失敗,使用者禁止應用內付費購買."); 

5、 我們先通過該IAP的ProductID向AppStore查詢,獲得SKPayment執行個體,然後通過SKPaymentQueue的 addPayment方法發起一個購買的操作。

  1. // 下面的ProductId應該是事先在itunesConnect中添加好的,已存在的付費項目。否則查詢會失敗。 
  2. - (void)getProductInfo { 
  3.   NSSet * set = [NSSet setWithArray:@[@"ProductId"]]; 
  4.   SKProductsRequest * request = [[SKProductsRequest alloc] initWithProductIdentifiers:set]; 
  5.   request.delegate = self; 
  6.   [request start]; 
  7. // 以上查詢的回呼函數 
  8. - (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response { 
  9.     NSArray *myProduct = response.products; 
  10.     if (myProduct.count == 0) { 
  11.         NSLog(@"無法擷取產品資訊,購買失敗。"); 
  12.         return; 
  13.     } 
  14.     SKPayment * payment = [SKPayment paymentWithProduct:myProduct[0]]; 
  15.     [[SKPaymentQueue defaultQueue] addPayment:payment]; 
  16. }

6、 在viewDidLoad方法中,將購買版面設定成購買的Observer。

  1. - (void)viewDidLoad { 
  2.     [super viewDidLoad]; 
  3.     // 監聽購買結果 
  4.     [[SKPaymentQueue defaultQueue] addTransactionObserver:self]; 
  5. - (void)viewDidUnload { 
  6.     [super viewDidUnload]; 
  7.     [[SKPaymentQueue defaultQueue] removeTransactionObserver:self]; 

7、 當使用者購買的操作有結果時,就會觸發下面的回呼函數,相應進行處理即可。

  1. - (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions { 
  2.     for (SKPaymentTransaction *transaction in transactions) 
  3.     { 
  4.         switch (transaction.transactionState) 
  5.         { 
  6.             case SKPaymentTransactionStatePurchased://交易完成 
  7.                 NSLog(@"transactionIdentifier = %@", transaction.transactionIdentifier); 
  8.                 [self completeTransaction:transaction]; 
  9.                 break; 
  10.             case SKPaymentTransactionStateFailed://交易失敗 
  11.                 [self failedTransaction:transaction]; 
  12.                 break; 
  13.             case SKPaymentTransactionStateRestored://已經購買過該商品 
  14.                 [self restoreTransaction:transaction]; 
  15.                 break; 
  16.             case SKPaymentTransactionStatePurchasing:      //商品添加進列表 
  17.                 NSLog(@"商品添加進列表"); 
  18.                 break; 
  19.             default: 
  20.                 break; 
  21.         } 
  22.     } 
  23. - (void)completeTransaction:(SKPaymentTransaction *)transaction { 
  24.     // Your application should implement these two methods. 
  25.     NSString * productIdentifier = transaction.payment.productIdentifier; 
  26.     NSString * receipt = [transaction.transactionReceipt base64EncodedString]; 
  27.     if ([productIdentifier length] > 0) { 
  28.         // 向自己的伺服器驗證購買憑證 
  29.     } 
  30.     // Remove the transaction from the payment queue. 
  31.     [[SKPaymentQueue defaultQueue] finishTransaction: transaction]; 
  32.  
  33. - (void)failedTransaction:(SKPaymentTransaction *)transaction { 
  34.     if(transaction.error.code != SKErrorPaymentCancelled) { 
  35.         NSLog(@"購買失敗"); 
  36.     } else { 
  37.         NSLog(@"使用者取消交易"); 
  38.     } 
  39.     [[SKPaymentQueue defaultQueue] finishTransaction: transaction]; 
  40. - (void)restoreTransaction:(SKPaymentTransaction *)transaction { 
  41.   // 對於已購商品,處理恢複購買的邏輯 
  42.     [[SKPaymentQueue defaultQueue] finishTransaction: transaction]; 

8、伺服器驗證憑證(Optional)。如果購買成功,我們需要將憑證發送到伺服器上進行驗證。考慮到網路異常情況,iOS端的發送憑證操作應該進行持久化,如果程式退出,崩潰或網路異常,可以恢複重試。

二、開發工作(服務端)

服務端的工作比較簡單,分4步:

  1. 接收ios端發過來的購買憑證。
  2. 判斷憑證是否已經存在或驗證過,然後儲存該憑證。
  3. 將該憑證發送到蘋果的伺服器驗證,並將驗證結果返回給用戶端。
  4. 如果需要,修改使用者相應的會員許可權。

考慮到網路異常情況,伺服器的驗證應該是一個可恢複的隊列,如果網路失敗了,應該進行重試。

與蘋果的驗證介面文檔在這裡。簡單來說就是將該購買憑證用Base64編碼,然後POST給蘋果的驗證伺服器,蘋果將驗證結果以JSON形式返回。

蘋果AppStore線上的購買憑證驗證地址是https://buy.itunes.apple.com/verifyReceipt ,測試的驗證地址是:https://sandbox.itunes.apple.com/verifyReceipt

[轉]iOS 應用內付費(IAP)開發步驟

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.