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

? ? ? ?最近幾個(gè)星期牢撼,應(yīng)產(chǎn)品需求開(kāi)發(fā)了應(yīng)用內(nèi)支付流程夏醉,即IAP爽锥。提筆寫下大致過(guò)程,分享與大家交流畔柔。我這里是從development開(kāi)發(fā)者中心創(chuàng)建證書和配置文件氯夷,在iTunes后天創(chuàng)建應(yīng)用,創(chuàng)建虛擬商品靶擦,接入OC代碼這樣一套邏輯來(lái)寫的腮考,如果新手不太明白具體內(nèi)容,建議先看看蘋果官方文檔的中文翻譯版本玄捕,了解一二2任怠!枚粘!

1馅闽,配置Developer.apple.com

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

(2)為應(yīng)用建立建立一個(gè)不帶通配符的App ID

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

(4)添加真機(jī)測(cè)試的手機(jī)

2福也,配置iTunes Connect

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

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


創(chuàng)建物品


第二步

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

(3)設(shè)置稅務(wù)和銀行卡信息

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

(4)創(chuàng)建應(yīng)用的沙盒測(cè)試賬號(hào)

點(diǎn)擊用戶與職能

點(diǎn)擊+號(hào)撕捍,根據(jù)具體信息填寫

3,接入代碼

(1)設(shè)置bundleID泣洞,填加證書和配置文件忧风,保證能在手機(jī)上跑起來(lái)

(2)普及一個(gè),我這邊學(xué)到的知識(shí)

IAP的支付流程分為兩種球凰,一種是有服務(wù)器參與的狮腿,一種是沒(méi)有服務(wù)器參與的腿宰。有服務(wù)器參與就是說(shuō),在購(gòu)買之前缘厢,需要把產(chǎn)品的相關(guān)信息發(fā)送到服務(wù)器吃度,服務(wù)器驗(yàn)證購(gòu)買憑證,如果成功贴硫,我們能拿到訂單字符串椿每,發(fā)起支付購(gòu)買,完成之后英遭,蘋果服務(wù)器返回結(jié)果间护,我們拿到結(jié)果在跟服務(wù)器驗(yàn)證,驗(yàn)證成功后挖诸,可以由服務(wù)器發(fā)放具體的商品汁尺;沒(méi)有服務(wù)器參與的話,就是跳過(guò)了驗(yàn)證過(guò)程多律,是由客戶端自己處理邏輯均函。具體在看代碼吧。

官方的兩張圖菱涤,有服務(wù)器和無(wú)服務(wù)器

無(wú)

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

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

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

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

NSSet * set = [NSSet setWithArray:@[prodectId]]; // 這個(gè)就是產(chǎn)品ID如迟,在iTunes后臺(tái)創(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) {

? ? ? ? ? ? ? ? ? ? // 沒(méi)有獲取到

? ? ? ? ? ?{

// 代碼到此,就是有商品了攻走。這時(shí)就有兩種操作殷勘,一種是向服務(wù)器驗(yàn)證購(gòu)買憑證,獲取訂單字符串昔搂,發(fā)起購(gòu)買玲销;一種是直接拿商品ID發(fā)起購(gòu)買。

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

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

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

}

(5)把控制器設(shè)置為監(jiān)聽(tīng)購(gòu)買操作的觀察者贤斜,這一步,在ViewDidLoad中設(shè)置

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

購(gòu)買結(jié)果的回調(diào)

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

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

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

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

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

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

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

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

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? case SKPaymentTransactionStatePurchased:? ? // 購(gòu)買完成

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

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? NSLog(@"購(gòu)買完成");

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

? ? ? ? ? ?}

}

注: 完成購(gòu)買的操作中瘩绒,如果有服務(wù)器,需要向服務(wù)器驗(yàn)證購(gòu)買結(jié)果带族,如果沒(méi)有锁荔,就直接完成。

[[SKPaymentQueue defaultQueue] finishTransaction:transaction];

調(diào)起支付后蝙砌,輸入注冊(cè)的沙盒賬號(hào)即可點(diǎn)擊購(gòu)買阳堕。


注:這里有幾個(gè)注意事項(xiàng)

一跋理,測(cè)試支付的ipa必須使用[App-Store]證書

二,越獄機(jī)器無(wú)法測(cè)試IAP

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

四前普,Sandbox賬號(hào)不要在正式支付環(huán)境登陸支付,登陸過(guò)的正式支付環(huán)境的SandBox賬號(hào)會(huì)失效

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

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

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

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末记劈,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子并巍,更是在濱河造成了極大的恐慌目木,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,640評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件懊渡,死亡現(xiàn)場(chǎng)離奇詭異刽射,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)剃执,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,254評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門誓禁,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人肾档,你說(shuō)我怎么就攤上這事摹恰。” “怎么了怒见?”我有些...
    開(kāi)封第一講書人閱讀 165,011評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵俗慈,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我遣耍,道長(zhǎng)闺阱,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 58,755評(píng)論 1 294
  • 正文 為了忘掉前任舵变,我火速辦了婚禮酣溃,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘棋傍。我一直安慰自己救拉,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,774評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布瘫拣。 她就那樣靜靜地躺著,像睡著了一般告喊。 火紅的嫁衣襯著肌膚如雪麸拄。 梳的紋絲不亂的頭發(fā)上派昧,一...
    開(kāi)封第一講書人閱讀 51,610評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音拢切,去河邊找鬼蒂萎。 笑死,一個(gè)胖子當(dāng)著我的面吹牛淮椰,可吹牛的內(nèi)容都是我干的五慈。 我是一名探鬼主播,決...
    沈念sama閱讀 40,352評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼主穗,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼泻拦!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起忽媒,我...
    開(kāi)封第一講書人閱讀 39,257評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤争拐,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后晦雨,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體架曹,經(jīng)...
    沈念sama閱讀 45,717評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,894評(píng)論 3 336
  • 正文 我和宋清朗相戀三年闹瞧,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了绑雄。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,021評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡奥邮,死狀恐怖万牺,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情漠烧,我是刑警寧澤杏愤,帶...
    沈念sama閱讀 35,735評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站已脓,受9級(jí)特大地震影響珊楼,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜度液,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,354評(píng)論 3 330
  • 文/蒙蒙 一厕宗、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧堕担,春花似錦已慢、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,936評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春膜楷,著一層夾襖步出監(jiān)牢的瞬間旭咽,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,054評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工赌厅, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留穷绵,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,224評(píng)論 3 371
  • 正文 我出身青樓特愿,卻偏偏與公主長(zhǎng)得像仲墨,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子揍障,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,974評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • iOS應(yīng)用內(nèi)付費(fèi)(IAP)開(kāi)發(fā)步驟 1.蘋果iTunes Connect內(nèi)購(gòu)產(chǎn)品信息錄入目养。 1)創(chuàng)建app內(nèi)購(gòu)買項(xiàng)...
    MillerWang閱讀 11,031評(píng)論 0 7
  • 在我們應(yīng)用開(kāi)發(fā)中我們經(jīng)常在自己的項(xiàng)目中使用到支付,下面我們來(lái)談?wù)刬OS這塊的支付亚兄;iOS支付主要分為兩類混稽,第三方支...
    Hither閱讀 8,285評(píng)論 9 42
  • iOS支付 iOS支付分為兩類,第三方支付和應(yīng)用內(nèi)支付(內(nèi)購(gòu))审胚。 第三方支付包括:支付寶支付匈勋、微信支付、銀聯(lián)支付膳叨、...
    sillen閱讀 1,373評(píng)論 0 1
  • iOS支付 iOS支付分為兩類洽洁,第三方支付和應(yīng)用內(nèi)支付(內(nèi)購(gòu))。 第三方支付包括:支付寶支付菲嘴、微信支付饿自、銀聯(lián)支付、...
    帥不過(guò)oneS閱讀 2,889評(píng)論 2 8
  • 腦子清醒得像上了發(fā)條 好像是25年來(lái)第一次 認(rèn)認(rèn)真真得剖析自己對(duì)感情的態(tài)度 我遇見(jiàn)你 一個(gè)暫時(shí)還未讓我心動(dòng)的人 ...
    0803號(hào)島嶼閱讀 274評(píng)論 1 0