美文网首页
内购(应用内购买)

内购(应用内购买)

作者: 董立权 | 来源:发表于2017-07-22 15:10 被阅读0次
  • 通过苹果应用程序商店有三种主要赚钱的方式:
    直接收费(与国内大部分用户的消费习惯相悖)
    广告(O2O->Online推广&Office交易 闭环)
    内购:应用程序本身的增值产品,游戏装备,应用程序中增值功能同样可以内购(37开)
    第三方支付:跟应用程序无关

  • 内购的物种产品类型
    非消耗品(Nonconsumable)一旦购买,终身拥有
    消耗品(Consumable)用了就没了
    ISBN:每本书有一个ID(免费订阅 自动续费订阅 非自动续费订阅)

  • 内购(手机不能越狱)
    开发者账号
    真机调试
    配置App
    在苹果中添加银行账户
    内购测试账号

内购流程

//导入内购框架
#import <StoreKit/StoreKit.h>
#pragma mark -  1.向苹果请求可以卖的数据
//实现代理<SKProductsRequestDelegate>

    //1.1获取文件路径
    NSURL *url = [[NSBundle mainBundle] URLForResource:@"products.json" withExtension:nil];
    //1.2获取json文件
    NSData *data = [NSData dataWithContentsOfURL:url];
    //1.3转换json数据
    NSArray *products = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];
    //1.4KVC直接复制
    NSArray *productIDs = [products valueForKey:@"productId"];
//    NSLog(@"%@",productIDs);
    //1.5获取产品请求对象
    SKProductsRequest *request = [[SKProductsRequest alloc] initWithProductIdentifiers:[NSSet setWithArray:productIDs]];
    //1.6设置代理
    request.delegate = self;
    //1.7开始请求
    [request start];
#pragma mark - 2.苹果返回可以销售的商品
//可销售商品
@property (nonatomic,strong)NSArray *products;
//--------------------------------------------------
//当苹果返回可销售商品时调用
//response:返回的内容
- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response{
    for (SKProduct *product in response.products) {
        NSLog(@"商品描述:%@,商品名称:%@,商品价格:%@,商品ID:%@",product.localizedDescription,product.localizedTitle,product.price,product.productIdentifier);
    }
    //记录商品
    self.products = response.products;
    //刷新表格
    [self.tableView reloadData];
}
#pragma mark - 3.展示商品
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return self.products.count;
}
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    static NSString *ID = @"cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ID forIndexPath:indexPath];
    if(cell == nil){
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:ID];
    }
    //赋值
    SKProduct *product = self.products[indexPath.row];
    cell.textLabel.text = product.localizedTitle;
    cell.detailTextLabel.text = [NSString stringWithFormat:@"%@",product.price];
    
    return  cell;
}
#pragma mark -  4.选择商品
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
    //获取用户选择的商品
    SKProduct *product = self.products[indexPath.row];
}
#pragma mark -  5.包装成交易,加入队列
    //将商品包装成交易
    SKPayment *payment = [SKPayment paymentWithProduct:product];
    //将交易加入队列
    [[SKPaymentQueue defaultQueue] addPayment:payment];
#pragma mark - 6.监听队列的改变
//遵循协议<SKPaymentTransactionObserver>
    [[SKPaymentQueue defaultQueue] addTransactionObserver:self];
#pragma mark - 7.付款(不需要关注)
#pragma mark - 8.交易状态更新,获取用户付款状态
-(void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray<SKPaymentTransaction *> *)transactions{
    for (SKPaymentTransaction *transaction in transactions) {
        //判断付款状态
        /*
         SKPaymentTransactionStatePurchasing 交易已被添加到队列
         SKPaymentTransactionStatePurchased  交易已经付款成功,客户端需要完成交易
         SKPaymentTransactionStateFailed     交易再被添加到服务队列之前失败或被取消
         SKPaymentTransactionStateRestored   交易被恢复,客户端需要完成交易
         SKPaymentTransactionStateDeferred   交易状态不确定
         */
        if(transaction.transactionState == SKPaymentTransactionStatePurchased) {
            NSLog(@"交易成功,提供增值服务");
#pragma mark - 9.提供增值服务,结束交易
            [[SKPaymentQueue defaultQueue] finishTransaction:transaction];
        }
        if(transaction.transactionState == SKPaymentTransactionStateRestored){
            NSLog(@"交易被恢复,提供增值服务");
            [[SKPaymentQueue defaultQueue] finishTransaction:transaction];
        }
    }
}
#pragma mark - 恢复交易
-(void)restore{
    //恢复所有的交易(非消耗)
    [[SKPaymentQueue defaultQueue] restoreCompletedTransactions];
}

相关文章

  • 内购(应用内购买)

    通过苹果应用程序商店有三种主要赚钱的方式:直接收费(与国内大部分用户的消费习惯相悖)广告(O2O->Online推...

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

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

  • 苹果内购流程

    苹果内购是指在Apple Store的应用内购买,是苹果为App内购买虚拟商品或服务提供的一套交易系统。一. 内购...

  • iOS-应用内购买(内购)

    https://www.cnblogs.com/kuangke/p/7272630.htmlhttps://www...

  • 内购

    内购__应用内购买__storeKit AppleStore有三种主要赚钱的方式: - 直接 收费 - 广告 ...

  • iOS支付技术

    银联支付转自cocoChina Apple Pay 应用内购买 内购时的问题及其解决

  • iOS应用内付费(IAP)开发步骤

    iOS应用内付费(IAP)开发步骤 1.苹果iTunes Connect内购产品信息录入。 1)创建app内购买项...

  • iOS关于内购那些事

    在开发中我们会遇到应用内购买的场景,特别是一些虚拟物品的购买,就要用到内购. 一 什么时候需要用到内购? 大家都知...

  • iOS内购详解

    概述 iOS内购是指苹果 App Store 的应用内购买,即In-App Purchase,简称IAP(以下本文...

  • 苹果内购那些事儿

    1.简介 苹果内购是指Apple Store的应用内购买,是苹果为App内购买虚拟商品或服务提供的一套交易系统。 ...

网友评论

      本文标题:内购(应用内购买)

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