前段时间开发内购,踩了很多坑,发现网上教程大多是内购的代码,内购开发的代码不难,网上一搜一大片,填写协议、税务和银行业务的资料也一大片,我这里不讲这些,初次使用内购的同学可以网上自行查找,我主要奖内购类型的选择,每个类型在开发中需要注意的地方,已经坑爹的itunes connect 后台的产品添加和修改.话不多说,直接开始.
1:介绍支付类型的选择
1>消耗型
说的很明白,用一次,使用后失效,商品会在使用中一点一点消耗,这里最多使用的是游戏道具之类.游戏中内购大多使用这个,还有直播送礼物等等
2>非消耗型
这个非消耗型绝对是最最坑爹的一种,这个不依赖自己服务器,只和苹果appid联系,只要同一个id购买,即使100个设备同时用这个id登录,都不需要进行再次购买,而且苹果强制要求要有一个Restore Purchases button,这个按钮的主要作用是恢复之前的购买.(appstore上面收费软件的下载就是这种类型)
开发中有2种方案:
一种是直接在购买按钮下面添加一个恢复购买按钮(但是你要告诉审核人员,这个按钮在哪,发图片或者视频给审核人员,这种方便最简单,但是显示不好)
一种是通过获取该appid下面购买过的商品,然后在判断该商品是否在购买过的商品列表中,如果有,显示回复购买按钮,如果没有显示购买按钮.这个贴一段代码吧
`[[SKPaymentQueue defaultQueue] addTransactionObserver:self];
if ([SKPaymentQueue canMakePayments])
{
//用户允许app内购
if (productId.length)
{
NSArray *product = [[NSArray alloc] initWithObjects:@"商品id", nil];
NSSet *set = [NSSet setWithArray:product];
SKProductsRequest *productRequest = [[SKProductsRequest alloc] initWithProductIdentifiers:set];
productRequest.delegate = self;
[productRequest start];
}
else
{
//商品id为空
}
}else{
//不支持购买
}
#pragma mark SKProductsRequestDelegate 查询成功后的回调
- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response {
NSArray *product = response.products;
if (product.count == 0) {
//无法获取商品信息
}else{
//发起购买请求
SKPayment *payment = [SKPayment paymentWithProduct:product[0]];
[[SKPaymentQueue defaultQueue] restoreCompletedTransactions];//这句代码就是恢复购买
}
}`
接下来是代理函数,在这里你可以获取到已经购买过的商品集合
`- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions: (nonnull NSArray *)transactions {
self.restoreArray = [[NSMutableArray alloc]init];
for (SKPaymentTransaction *transaction in transactions)
{
switch (transaction.transactionState)
{
case SKPaymentTransactionStatePurchasing://正在交易
break;
case SKPaymentTransactionStatePurchased://交易完成
break;
case SKPaymentTransactionStateFailed://交易失败
break;
case SKPaymentTransactionStateRestored://已经购买过该商品
[self.restoreArray addObject:transaction.payment.productIdentifier];
[self restoreTransaction:transaction];
break;
default:
break;
}
}
}
- (void)paymentQueueRestoreCompletedTransactionsFinished:(SKPaymentQueue *)queue {
if ([self.restoreArray containsObject:self.goodsProductId]) {
//用户购买过商品.就应该显示"恢复购买按钮"
}else{
//用户没有购买过该商品
}
}
`
3>自动续期订阅
这种适合报刊订阅类型,使用很少,这里不做介绍
4>非续期订阅
这个是我们开发中用到的比较多的,可以依赖自已服务器,可以无数次购买,没有appid限制,
比如一个价格商品有很多种规格,就可以使用这个.比如网易云课堂的收费课,腾讯课堂收费课等等,我最后就选择了这个类型
2.itunes connect后台的坑爹
这些信息都填写后保存一下,不要提交审核,我是把商品审核和app的审核放在了一起.准备工作都做完之后,回到app提交审核的页面
最后:最近审核比较严格,内购的时候最好提供游客模式,即使用户没有登录,也能进行购买,不要在购买的时候,强行提示用户登录(本人因为这个被拒2次)
貌似内购的大体流程就是这样,第一次写博客,比较粗糙,有出错的地方希望大家指正,内购有问题也可以直接联系我QQ:2315618550