内购和广告

内购和广告

1. 什么是内购?

    内购就是指,在APP内购买某些产品
        如果你在App中销售的商品,跟App有关(例如植物大战僵尸中的道具,需要开启关卡,拥有某种技能等等).那么,苹果规定,必须通过内购方式购买.
    内购分成: 3 : 7

2. 为什么做内购?

    1. 开发者创收的一种模式: free + 内购
    2. 某些业务必须使用内购

3. 内购的产品类型?

  1. 非消耗品(Nonconsumable)

     买了就一直有,不会消耗,例如开启关卡
     一般指的是在游戏中一次性购买并拥有永久访问权的物品或服务。非消耗品物品可以被用户再次下载,并且能够在用户的所有设备上使用
    
  2. 消耗品(Consumable)

     买了就用,用了就没
     专为支持可消耗的物品或服务设计的,消耗品购买不可被再次下载,根据其特点,消耗品不能在用户的设备之间跨设备使用,除非自定义服务在用户的账号之间共享这些信息
    
  3. 其他类型

     > 以下三种类别在iBooks中使用,目前iBooks不支持大陆市场
         免费订阅(Free subscriptions)
         自动续费订阅(Auto-renewing subscriptions)
         非自动续费订阅(Nonrenewing subscriptions)
    
  4. 内购的流程
    类似于商场购物流程, 参照下图

    内购和广告_第1张图片
    内购流程图.png

  1. 内购实例

     1. 在App管理中心,创建一个App,并填写App信息
         注意: 此处创建的App时,填写套装ID,时,必须选择可以内购的套装ID
    
     2. 创建内购商品,并添加到App,指定此App,可以销售哪些商品
         注意: 创建内购商品的前提,是你已经填写了税务/银行信息,否则的话,无法创建
    
     3. 添加用于测试内购的测试账号
    
     4. 创建App项目,开始开发
    
     5. 代码实现内购流程
    
         (1) 从APP服务器请求数据列表, 并行苹果服务器请求可以销售的商品列表
    
        [XXXDataTool getGoodsWithResult:^(NSArray *goods) {
            NSArray *ids = [goods valueForKeyPath:@"goodID"];
            // 请求哪些商品可以卖
            NSSet *idSet = [NSSet setWithArray:ids];
            SKProductsRequest *request = [[SKProductsRequest alloc] initWithProductIdentifiers:idSet];
            request.delegate = self;
            [request start];
        }];
    
     (2) 在代理方法中获取并显示可销售列表
    
    
        - (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response
        {
            self.products = response.products;
        }
    

    (3) 用户购买商品, 并监听商品交易状态

        // 取出商品
        SKProduct *product = self.products[indexPath.row];
    
        // 购买商品
        SKPayment *payMent = [SKPayment paymentWithProduct:product];
    
        // 把凭证加入到队列, 等待用户付款
        [[SKPaymentQueue defaultQueue] addPayment:payMent];
    
        // 设置监听者, 监听整个交易状态
        [[SKPaymentQueue defaultQueue] addTransactionObserver:self];
    

    (4) 实现监听交易状态方法

        // 交易状态发生变化时调用
        - (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions
        {
    
        [transactions enumerateObjectsUsingBlock:^(SKPaymentTransaction * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop)
        {
    
            //  SKPayment *payment , 小票 , 包含商品
            //  SKPaymentTransactionState transactionState 交易状态
        switch (obj.transactionState) {
            case  SKPaymentTransactionStatePurchasing:
                NSLog(@"正在付款");
            break;
    
            case  SKPaymentTransactionStatePurchased:
                {
                    NSLog(@"付款结束");
                    [queue finishTransaction:obj];
                    break;
                }
            case  SKPaymentTransactionStateFailed:
                {
                    NSLog(@"交易失败");
                    [queue finishTransaction:obj];
                    break;
                }
            case  SKPaymentTransactionStateRestored:
                NSLog(@"恢复购买");
                break;
            case SKPaymentTransactionStateDeferred:
                NSLog(@"推迟付款");
                break;
    
            default:
                break;
        }
       }];
     }
    




你可能感兴趣的:(内购和广告)