zoukankan      html  css  js  c++  java
  • iOS应用程序开发之内购

    • 内购简介
    • 配置iTunes Connect
    • iOS客户端开发工作

    一、内购简介

    1⃣️通过苹果应用程序商店有三种主要赚钱的方式:
    –直接收费(与国内大部分用户的消费习惯相悖,如果直接收费,不要设置为6元)
    –广告(降低用户体验,在android系统非常多,在苹果系统非常少)
    –内购
    2⃣️分类
    •非消耗品(Nonconsumable)
    –指的是在游戏中一次性购买并拥有永久访问权的物品或服务。非消耗品物品可以被用户再次下载,并且能够在用户的所有设备上使用
    •消耗品(Consumable)
    –专为支持可消耗的物品或服务设计的,消耗品购买不可被再次下载,根据其特点,消耗品不能在用户的设备之间跨设备使用,除非自定义服务在用户的账号之间共享这些信息
    •以下三种类别在iBooks中使用,目前iBooks不支持大陆市场
    –免费订阅(Free subscriptions)
    –自动续费订阅(Auto-renewing subscriptions)
    –非自动续费订阅(Nonrenewing subscriptions)

    二、配置iTunes Connect
    1⃣️创建自己的应用(无需累诉,没有应用如何内购)
    2⃣️创建应用内付费项目
     
    之后设置好价格和Product ID以及购买介绍和截图即可,这里的Product ID是需要记住的,后面开发的时候需要。
    3⃣️添加sandbox付费的测试用户
    4⃣️填写相关的税务,银行,联系人信息

    三、iOS客户端开发
    这幅图很清晰的解释了内购的整个流程,主要包括以下步骤(希望大家认真看这幅图的细节,来理解内购的流程)
    •请求有效的产品代号集合
    •购买指定产品
    •验证购买
    •恢复购买
    1⃣️请求有效的产品代号集合
    // 1) 实例化产品请求
    SKProductsRequest *request = [[SKProductsRequest alloc]initWithProductIdentifiers:identifiers];
    // 2) 设置代理
    [request setDelegate:self];
    
    // 3) 启动请求
    [request start];

    提示:

    1. 实例化请求时,必须指定有效的identifiers集合,之所以如此处理,主要是为了确保提交的内购商品真的通过了苹果的审批,处于可用状态!

    2. 要想获取到准确的可用产品集合,需要通过代理方法实现

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

    3. 越狱用户无法测试内购,但是可以购买

    2⃣️购买产品

    1. 内购的交易过程是通过SKPaymentTransactionObserver监控的,因此需要为IAPHelper添加交易观察者:

    // 添加交易观察者对象
    [[SKPaymentQueue defaultQueue]addTransactionObserver:sharedInstance];

    2. 由于发起交易需要使用SKProduct对象,因此需要使用字典记录所有可用的商品

    NSMutableDictionary         *_productsDict;

    3.交易队列回调方法

    - (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions
    {
        for (SKPaymentTransaction *transaction in transactions) {
            // 购买完成
                if (transaction.transactionState == SKPaymentTransactionStatePurchased) {
                NSLog(@"购买完成 %@", transaction.payment.productIdentifier);
    
                [queue finishTransaction:transaction];
            } else if (transaction.transactionState == SKPaymentTransactionStateFailed) {
                if (transaction.error.code != SKErrorPaymentCancelled) {
                    NSLog(@"交易失败: %@", transaction.error.localizedDescription);
                }
            }
        }
    }

     3⃣️验证购买(通常交由服务器来做)

    1. 接收ios端发过来的购买凭证。
    2. 判断凭证是否已经存在或验证过,然后存储该凭证。
    3. 将该凭证发送到苹果的服务器验证,并将验证结果返回给客户端。
    4. 如果需要,修改用户相应的会员权限。

    考虑到网络异常情况,服务器的验证应该是一个可恢复的队列,如果网络失败了,应该进行重试。

    与苹果的验证接口文档在这里。简单来说就是将该购买凭证用Base64编码,然后POST给苹果的验证服务器,苹果将验证结果以JSON形式返回。

    苹果AppStore线上的购买凭证验证地址是https://buy.itunes.apple.com/verifyReceipt ,测试的验证地址是:https://sandbox.itunes.apple.com/verifyReceipt

    4⃣️恢复购买——恢复用户购买过的所有商品

    [[SKPaymentQueue defaultQueue]restoreCompletedTransactions];
  • 相关阅读:

    模块
    序列化模块
    time模块、os模块、sys模块
    re模块、collections模块、random模块
    正则表达式
    递归函数和二分查找
    匿名函数
    推推导式和内置函数
    Java引用类型与值类型——Java面向对象基础(7)
  • 原文地址:https://www.cnblogs.com/letougaozao/p/4026276.html
Copyright © 2011-2022 走看看