转载

iOS内购从放弃到上架

前段时间开发内购,踩了很多坑,发现网上教程大多是内购的代码,内购开发的代码不难,网上一搜一大片,填写协议、税务和银行业务的资料也一大片,我这里不讲这些,初次使用内购的同学可以网上自行查找,我主要奖内购类型的选择,每个类型在开发中需要注意的地方,已经坑爹的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后台的坑爹

iOS内购从放弃到上架

iOS内购从放弃到上架

iOS内购从放弃到上架


这些信息都填写后保存一下,不要提交审核,我是把商品审核和app的审核放在了一起.准备工作都做完之后,回到app提交审核的页面

iOS内购从放弃到上架

最后:最近审核比较严格,内购的时候最好提供游客模式,即使用户没有登录,也能进行购买,不要在购买的时候,强行提示用户登录(本人因为这个被拒2次)

貌似内购的大体流程就是这样,第一次写博客,比较粗糙,有出错的地方希望大家指正

正文到此结束
Loading...