美文网首页
IOS 内购

IOS 内购

作者: 越天高 | 来源:发表于2020-05-27 09:41 被阅读0次

什么是内购?

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

为什么做内购

  1. 开发者创收的一种模式: free + 内购
  2. 某些业务必须使用内购
    如果销售的商品应该使用"苹果内购", 而没有使用, APP将不允许上架.

内购的产品类型

  1. 非消耗品(Nonconsumable)

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

  1. 消耗品(Consumable)

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

  1. 其他类型

以下三种类别在iBooks中使用,目前iBooks不支持大陆市场
免费订阅(Free subscriptions)
自动续费订阅(Auto-renewing subscriptions)
非自动续费订阅(Nonrenewing subscriptions)

  1. 内购的流程 类似于商场购物流程, 参照下图
image.png
  1. 内购演练

1.在App管理中心,创建一个App,并填写App信息
注意: 此处创建的App时,填写套装ID,时,必须选择可以内购的套装ID

截屏2020-05-26下午4.48.59.png
截屏2020-05-26下午4.50.52.png
截屏2020-05-26下午4.51.07.png

2.创建内购商品,并添加到App,指定此App,可以销售哪些商品
注意: 创建内购商品的前提,是你已经填写了税务/银行信息,否则的话,无法创建

填写商品信息 截屏2020-05-26下午4.55.35.png

3.添加用于测试内购的测试账号

4.创建App项目,开始开发

5.代码实现内购流程

     (1) 从APP服务器请求数据列表, 并行苹果服务器请求可以销售的商品列表 商品1Id 商品2id
// 请求哪些商品可以卖
        NSSet *idSet = [NSSet setWithArray:ids];
        SKProductsRequest *request = [[SKProductsRequest alloc] initWithProductIdentifiers:idSet];
        request.delegate = self;
        [request start];
//      swfit:

        // 1. 从我们自己的服务器, 获取需要销售的额商品
        DataTool.getGoodsList { (ids: Set<String>) -> () in
            
            // 2. 拿到需要销售的额商品, 到苹果服务器, 进行验证, 看下, 哪些商品, 才可以真正被销售
            // 2.1 创建一个商品请求, 请求哪些商品可以真正的呗销售
            let request: SKProductsRequest = SKProductsRequest(productIdentifiers: ids)
            
            // 2.1.1 设置代理, 接收可以被销售的商品列表数据
            request.delegate = self
            
            // 2.2 发送请求
            request.start()

        }


     (2) 在代理方法中获取并显示可销售列表

         - (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response
         {
             self.products = response.products;
         }


swift
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        
        let cell = tableView.dequeueReusableCell(withIdentifier: "product")
        
        
        // 获取对应的商品数据模型, 进行赋值
        let product = products[indexPath.row]
        
        // SKProduct 系统提供的商品模型
        // product.localizedTitle 商品名称
        // product.localizedDescription 商品描述
        // product.price 商品价格
        cell?.textLabel?.text = product.localizedTitle
        cell?.detailTextLabel?.text = product.localizedDescription + "\(product.price)"
        
        
        return cell!
    }

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

         // 取出商品
         SKProduct *product = self.products[indexPath.row];

         // 购买商品
         SKPayment *payMent = [SKPayment paymentWithProduct:product];

         // 把凭证加入到队列, 等待用户付款
         [[SKPaymentQueue defaultQueue] addPayment:payMent];

         // 设置监听者, 监听整个交易状态
         [[SKPaymentQueue defaultQueue] addTransactionObserver:self];


func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
        
        // 1. 取出需要购买的商品
        let product = products[indexPath.row]
        
        
        // 2.0 p判断当前的支付环境, 是否可以支付
        if SKPaymentQueue.canMakePayments() {
            // 2. 购买商品
            // 2.1 根据商品, 开一个支付小票
            let payment = SKPayment(product: product)
            
            // 2.2 添加到支付队列, 开始进行购买操作
            SKPaymentQueue.defaultQueue().addPayment(payment)
            
            // 2.3 添加交易队列的监听者, 来监听交易状态
            SKPaymentQueue.defaultQueue().addTransactionObserver(self)
        }
      (4) 实现监听交易状态方法

         // 交易状态发生变化时调用
         - (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray<SKPaymentTransaction *> *)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;
         }
        }];
      }

内购的测试

开始测试, 并添加用于测试内购的测试账号
测试账号必须是不存在的APP ID

  • 进入用户和职能


    用户和职能.png
  • 创建沙箱技术测试人员


    创建沙河测试人员.png

恢复购买

 deinit {
        SKPaymentQueue.defaultQueue().removeTransactionObserver(self)
    }
    
    
    @IBAction func retore(sender: AnyObject) {
        
        SKPaymentQueue.defaultQueue().restoreCompletedTransactions()
        SKPaymentQueue.defaultQueue().addTransactionObserver(self)
        
    }

相关文章

  • iOS 苹果内购流程

    本文参考: iOS开发之内购完全笔记 iOS开发内购全套图文教程 iOS应用程序内购/内付费(一) 代码...

  • iOS内购流程文档-Lion

    iOS内购流程: iOS内购 什么时候用到呢? 虚拟产品就需要用到iOS内购;购买的商品,是在本app中...

  • iOS-内购

    前言:关于iOS内购,参考两篇博文 iOS-iOS内购流程(手把手图文教程)iOS内购你看我就够了(埋坑篇) 我自...

  • iOS内购一条龙------项目代码 (4)

    步骤一 iOS内购一条龙------账户信息填写(1)步骤二 iOS内购一条龙------配置内购产品ID (2)...

  • iOS内购一条龙------内购测试账号 (3)

    步骤一 iOS内购一条龙------账户信息填写(1)步骤二 iOS内购一条龙------配置内购产品ID (2)...

  • iOS 内购 IAP

    1. iOS内购IAP(一) —— 基础配置篇(一)2. iOS内购IAP(二) —— 工程实践(一)3. iOS...

  • 应用内购(In-App Purchase)常见问题解答

    应用内购(In-App Purchase)常见问题解答iOS的应用内购买 iAP 坑 iOS内购你看我就够了(一)...

  • iOS内购从放弃到上架

    iOS内购方面的坑

  • ios内购IAP相关内容

    ios内购IAP相关内容 iOS IAP应用内购详细步骤和问题总结指南 - 简书https://www.jians...

  • 2019-05-20

    iOS内购编程指南 - 简书 iOS内购 服务端票据验证及漏单引发的思考. - WidgetBox - 博客园 一...

网友评论

      本文标题:IOS 内购

      本文链接:https://www.haomeiwen.com/subject/kolvahtx.html