最新详细苹果应用内支付IAP开发教程

前段时间公司app需要接入苹果支付,看了很多有关IAP的教程,虽然写的都很不错,但每篇文章都不是很全很详细,有的容易出问题的地方都一笔而过了。当然,如果你有一定的iOS开发经验,这些也就应该是一笔而过。

最近有很多人问我IAP的问题,所以准备写一篇教程,完全面对小白,手把手传授技能,希望大家不要让IAP难住或者耽误较多的开发时间与成本,也希望大家看过会对自己有所帮助。

首先呢,IAP的工作流程大概是这样的:

1.向服务器请求商品订单号码以及ituns配置的商品ID

2.根据商品ID,向服务器发起购买商品请求

3.购买流程结束后, 向服务器发起验证凭证以及支付结果的请求

4.验证流程结束完成购买流程。

itunesconnect

下面是具体的流程了:

1.首先,你要有一个开发者账号(这好像是废话了...)

登录itunesconnect.apple.com。

点击协议、税务和银行业务,把里面的Contact Info,Bank Info,Tax Info这三个信息填完整(少一个都不会拿到商品信息)

2.创建App或者选择已经有的App, 点击进入详情之后, 点击App内购项目这一选项

点击加号。

这里解释一下这几种类型:

1.消耗型项目

对于消耗型 App 内购买项目,用户每次下载时都必须进行购买。一次性服务通常属于消耗型项目,例如钓鱼 App 中的鱼饵。

2.非消耗型项目

对于非消耗型 App 内购买项目,用户仅需要购买一次。不会过期或随使用而减少的服务通常为非消耗型项目,例如游戏 App 的新跑道。

3.自动续订订阅

通过自动续订订阅,用户可以购买指定时间期限内的更新和动态内容。除非用户取消选择,否则订阅(例如杂志订阅等)会自动续订。

4.免费订阅

免费订阅是开发人员在“报刊杂志”中推广其内容的绝佳方式。用户注册免费订阅后,此订阅内容在与该用户 Apple ID 相关联的所有设备上可用。免费订阅不会过期,并且仅能在位于“报刊杂志”类别中的 App 中提供。

5.非续订订阅

非续订订阅允许有时限性的营销服务。对于 App 内购买项目中的限时访问内容,就需使用非续订订阅。例如,导航 App 中语音导航功能的一周订阅,或者年度订阅已存档的视频或音频的在线目录。

举个例子:比如Q币,就属于消耗型的商品,或比如QQ会员,就属于非续订订阅了。通常的的开发是使用这两种类型的比较多。其他的就不举例说明了,大家自己发现吧,啊哈哈。

选择消耗形项目, 然后继续,输入商品的名称, 产品的ID(自定义), 在下边添加语言的地方添加一下商品的描述信息, 然后上传一张商品界面的截图(这里可以随便, 影响不是很大)保存就可以了。
这里是创建好的商品

商品id是你获取商品的标示,当然id是你自己命名的。

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

代码

导入 StoreKit.Framework 这个框架

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

1在 - (void)viewDidLoad里添加购买监听

[[SKPaymentQueue defaultQueue] addTransactionObserver:self];

2 检测是否允许内购

if([SKPaymentQueue canMakePayments]){

            [selfrequestProductData:productID];       

}else{

NSLog(@"不允许程序内付费");       

}

3请求商品信息

- (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成功收到产品返回信息

- (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失败执行的方法

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

NSLog(@"商品信息请求错误:%@", error);

}

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

NSLog(@"请求结束");

}

5监听购买结果

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

for(SKPaymentTransaction *tranintransaction){

switch(tran.transactionState) {

caseSKPaymentTransactionStatePurchased:

NSLog(@"交易完成");

break;

caseSKPaymentTransactionStatePurchasing:

NSLog(@"商品添加进列表");

break;

caseSKPaymentTransactionStateRestored:

NSLog(@"已经购买过商品");

break;

caseSKPaymentTransactionStateFailed:

NSLog(@"交易失败");

break;

default:

[SVProgressHUDdismiss];

break;

}

在请求商品信息的时候,因为是去请求苹果的服务器,所以请求时间会稍微有点长,所以响应的解决方法也是有的,就是做一些本地化。不过我没搞(啊哈哈),大家有需求的可以弄一下。

测试

有关测试呢,需要添加沙箱的测试帐号, 在itunsconnect中选择用户与职能,然后添加测试帐号, 这个帐号可以用于测试购买。 另外, 在测试的时候, 可能比较慢, 所以我的项目中加入了不可交互的HUD进行提示, 避免用户进行多次商品的添加与购买。

添加一个测试用户就好了

恩,我所知道的有关IAP的大体上这些,可以满足简单的支付了。

这篇文章可能会漏掉一些知识点,代码也不是很健全,大家所需了解的应该是原理和流程,其他的就好说了。

希望这篇文章会对一些初学者,或者对IAP有所疑问的开发者能有所帮助。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,951评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,606评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,601评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,478评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,565评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,587评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,590评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,337评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,785评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,096评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,273评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,935评论 5 339
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,578评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,199评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,440评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,163评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,133评论 2 352

推荐阅读更多精彩内容

  • iOS应用内付费(IAP)开发步骤 1.苹果iTunes Connect内购产品信息录入。 1)创建app内购买项...
    MillerWang阅读 11,007评论 0 7
  • 在我们应用开发中我们经常在自己的项目中使用到支付,下面我们来谈谈iOS这块的支付;iOS支付主要分为两类,第三方支...
    Hither阅读 8,275评论 9 42
  • iOS支付 iOS支付分为两类,第三方支付和应用内支付(内购)。 第三方支付包括:支付宝支付、微信支付、银联支付、...
    请输入账号名阅读 6,192评论 3 22
  • 《通往财富自由之路》第一季已结束,为了给订阅用户更好的、更快捷、更方便的复习概念,笑来老师带来了他的音频节目大福利...
    艾问才会赢阅读 398评论 2 3
  • 我本以为具备计算机专业功底就不必再去花什么时间去学习各种具体的技术细节了,因为计算机专业所学的理论就好像是九阳神功...
    Stroman阅读 165评论 0 0