最新詳細(xì)蘋果應(yīng)用內(nèi)支付IAP開發(fā)教程

前段時(shí)間公司app需要接入蘋果支付,看了很多有關(guān)IAP的教程,雖然寫的都很不錯(cuò),但每篇文章都不是很全很詳細(xì),有的容易出問題的地方都一筆而過(guò)了。當(dāng)然,如果你有一定的iOS開發(fā)經(jīng)驗(yàn),這些也就應(yīng)該是一筆而過(guò)。

最近有很多人問我IAP的問題,所以準(zhǔn)備寫一篇教程,完全面對(duì)小白,手把手傳授技能,希望大家不要讓IAP難住或者耽誤較多的開發(fā)時(shí)間與成本,也希望大家看過(guò)會(huì)對(duì)自己有所幫助。

首先呢,IAP的工作流程大概是這樣的:

1.向服務(wù)器請(qǐng)求商品訂單號(hào)碼以及ituns配置的商品ID

2.根據(jù)商品ID,向服務(wù)器發(fā)起購(gòu)買商品請(qǐng)求

3.購(gòu)買流程結(jié)束后, 向服務(wù)器發(fā)起驗(yàn)證憑證以及支付結(jié)果的請(qǐng)求

4.驗(yàn)證流程結(jié)束完成購(gòu)買流程。

itunesconnect

下面是具體的流程了:

1.首先,你要有一個(gè)開發(fā)者賬號(hào)(這好像是廢話了...)

登錄itunesconnect.apple.com。

點(diǎn)擊協(xié)議、稅務(wù)和銀行業(yè)務(wù),把里面的Contact Info,Bank Info,Tax Info這三個(gè)信息填完整(少一個(gè)都不會(huì)拿到商品信息)

2.創(chuàng)建App或者選擇已經(jīng)有的App, 點(diǎn)擊進(jìn)入詳情之后, 點(diǎn)擊App內(nèi)購(gòu)項(xiàng)目這一選項(xiàng)

點(diǎn)擊加號(hào)。

這里解釋一下這幾種類型:

1.消耗型項(xiàng)目

對(duì)于消耗型 App 內(nèi)購(gòu)買項(xiàng)目,用戶每次下載時(shí)都必須進(jìn)行購(gòu)買。一次性服務(wù)通常屬于消耗型項(xiàng)目,例如釣魚 App 中的魚餌。

2.非消耗型項(xiàng)目

對(duì)于非消耗型 App 內(nèi)購(gòu)買項(xiàng)目,用戶僅需要購(gòu)買一次。不會(huì)過(guò)期或隨使用而減少的服務(wù)通常為非消耗型項(xiàng)目,例如游戲 App 的新跑道。

3.自動(dòng)續(xù)訂訂閱

通過(guò)自動(dòng)續(xù)訂訂閱,用戶可以購(gòu)買指定時(shí)間期限內(nèi)的更新和動(dòng)態(tài)內(nèi)容。除非用戶取消選擇,否則訂閱(例如雜志訂閱等)會(huì)自動(dòng)續(xù)訂。

4.免費(fèi)訂閱

免費(fèi)訂閱是開發(fā)人員在“報(bào)刊雜志”中推廣其內(nèi)容的絕佳方式。用戶注冊(cè)免費(fèi)訂閱后,此訂閱內(nèi)容在與該用戶 Apple ID 相關(guān)聯(lián)的所有設(shè)備上可用。免費(fèi)訂閱不會(huì)過(guò)期,并且僅能在位于“報(bào)刊雜志”類別中的 App 中提供。

5.非續(xù)訂訂閱

非續(xù)訂訂閱允許有時(shí)限性的營(yíng)銷服務(wù)。對(duì)于 App 內(nèi)購(gòu)買項(xiàng)目中的限時(shí)訪問內(nèi)容,就需使用非續(xù)訂訂閱。例如,導(dǎo)航 App 中語(yǔ)音導(dǎo)航功能的一周訂閱,或者年度訂閱已存檔的視頻或音頻的在線目錄。

舉個(gè)例子:比如Q幣,就屬于消耗型的商品,或比如QQ會(huì)員,就屬于非續(xù)訂訂閱了。通常的的開發(fā)是使用這兩種類型的比較多。其他的就不舉例說(shuō)明了,大家自己發(fā)現(xiàn)吧,啊哈哈。

選擇消耗形項(xiàng)目, 然后繼續(xù),輸入商品的名稱, 產(chǎn)品的ID(自定義), 在下邊添加語(yǔ)言的地方添加一下商品的描述信息, 然后上傳一張商品界面的截圖(這里可以隨便, 影響不是很大)保存就可以了。
這里是創(chuàng)建好的商品

商品id是你獲取商品的標(biāo)示,當(dāng)然id是你自己命名的。

好了,到這里itunesconnect的配置就基本完成了,下面是代碼了。

代碼

導(dǎo)入 StoreKit.Framework 這個(gè)框架

在需要支付的vc里 #import<StoreKit/StoreKit.h>

1在 - (void)viewDidLoad里添加購(gòu)買監(jiān)聽

[[SKPaymentQueue defaultQueue] addTransactionObserver:self];

2 檢測(cè)是否允許內(nèi)購(gòu)

if([SKPaymentQueue canMakePayments]){

? ? ? ? ? ? [selfrequestProductData:productID]; ? ? ??

}else{

NSLog(@"不允許程序內(nèi)付費(fèi)"); ? ? ??

}

3請(qǐng)求商品信息

- (void)requestProductData:(NSString*)type{

NSArray*product = [[NSArrayalloc] initWithObjects:type,nil];

NSSet*nsset = [NSSetsetWithArray:product];

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

request.delegate=self;? ??

[request start];

}

4.1成功收到產(chǎn)品返回信息

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

NSArray*product = response.products;

if([product count] ==0){

NSLog(@"沒有商品");

return;

}

?SKPayment * payment = [SKPayment paymentWithProduct:p];

[[SKPaymentQueue defaultQueue] addPayment:payment];

}

4.2失敗執(zhí)行的方法

- (void)request:(SKRequest*)request didFailWithError:(NSError*)error {

NSLog(@"商品信息請(qǐng)求錯(cuò)誤:%@", error);

}

- (void)requestDidFinish:(SKRequest*)request {

NSLog(@"請(qǐng)求結(jié)束");

}

5監(jiān)聽購(gòu)買結(jié)果

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

for(SKPaymentTransaction *tranintransaction){

switch(tran.transactionState) {

caseSKPaymentTransactionStatePurchased:

NSLog(@"交易完成");

break;

caseSKPaymentTransactionStatePurchasing:

NSLog(@"商品添加進(jìn)列表");

break;

caseSKPaymentTransactionStateRestored:

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

break;

caseSKPaymentTransactionStateFailed:

NSLog(@"交易失敗");

break;

default:

[SVProgressHUDdismiss];

break;

}

在請(qǐng)求商品信息的時(shí)候,因?yàn)槭侨フ?qǐng)求蘋果的服務(wù)器,所以請(qǐng)求時(shí)間會(huì)稍微有點(diǎn)長(zhǎng),所以響應(yīng)的解決方法也是有的,就是做一些本地化。不過(guò)我沒搞(啊哈哈),大家有需求的可以弄一下。

測(cè)試

有關(guān)測(cè)試呢,需要添加沙箱的測(cè)試帳號(hào), 在itunsconnect中選擇用戶與職能,然后添加測(cè)試帳號(hào), 這個(gè)帳號(hào)可以用于測(cè)試購(gòu)買。 另外, 在測(cè)試的時(shí)候, 可能比較慢, 所以我的項(xiàng)目中加入了不可交互的HUD進(jìn)行提示, 避免用戶進(jìn)行多次商品的添加與購(gòu)買。

添加一個(gè)測(cè)試用戶就好了

恩,我所知道的有關(guān)IAP的大體上這些,可以滿足簡(jiǎn)單的支付了。

這篇文章可能會(huì)漏掉一些知識(shí)點(diǎn),代碼也不是很健全,大家所需了解的應(yīng)該是原理和流程,其他的就好說(shuō)了。

希望這篇文章會(huì)對(duì)一些初學(xué)者,或者對(duì)IAP有所疑問的開發(fā)者能有所幫助。

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

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

  • iOS應(yīng)用內(nèi)付費(fèi)(IAP)開發(fā)步驟 1.蘋果iTunes Connect內(nèi)購(gòu)產(chǎn)品信息錄入。 1)創(chuàng)建app內(nèi)購(gòu)買項(xiàng)...
    MillerWang閱讀 11,317評(píng)論 0 7
  • 在我們應(yīng)用開發(fā)中我們經(jīng)常在自己的項(xiàng)目中使用到支付,下面我們來(lái)談?wù)刬OS這塊的支付;iOS支付主要分為兩類,第三方支...
    Hither閱讀 8,486評(píng)論 9 42
  • iOS支付 iOS支付分為兩類,第三方支付和應(yīng)用內(nèi)支付(內(nèi)購(gòu))。 第三方支付包括:支付寶支付、微信支付、銀聯(lián)支付、...
    請(qǐng)輸入賬號(hào)名閱讀 6,463評(píng)論 3 22
  • 《通往財(cái)富自由之路》第一季已結(jié)束,為了給訂閱用戶更好的、更快捷、更方便的復(fù)習(xí)概念,笑來(lái)老師帶來(lái)了他的音頻節(jié)目大福利...
    艾問才會(huì)贏閱讀 487評(píng)論 2 3
  • 我本以為具備計(jì)算機(jī)專業(yè)功底就不必再去花什么時(shí)間去學(xué)習(xí)各種具體的技術(shù)細(xì)節(jié)了,因?yàn)橛?jì)算機(jī)專業(yè)所學(xué)的理論就好像是九陽(yáng)神功...
    Stroman閱讀 225評(píng)論 0 0

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