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

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

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

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

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

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

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

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

itunesconnect

下面是具体的流程了:

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

登录itunesconnect.apple.com。

最新详细苹果应用内支付IAP开发教程_第1张图片

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

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

最新详细苹果应用内支付IAP开发教程_第2张图片

点击加号。

最新详细苹果应用内支付IAP开发教程_第3张图片

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

1.消耗型项目

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

2.非消耗型项目

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

3.自动续订订阅

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

4.免费订阅

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

5.非续订订阅

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

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

最新详细苹果应用内支付IAP开发教程_第4张图片
选择消耗形项目, 然后继续,输入商品的名称, 产品的ID(自定义), 在下边添加语言的地方添加一下商品的描述信息, 然后上传一张商品界面的截图(这里可以随便, 影响不是很大)保存就可以了。
最新详细苹果应用内支付IAP开发教程_第5张图片
这里是创建好的商品

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

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

代码

导入 StoreKit.Framework 这个框架

在需要支付的vc里 #import

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开发教程_第6张图片
添加一个测试用户就好了

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

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

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

你可能感兴趣的:(最新详细苹果应用内支付IAP开发教程)