• 游戏中心-内购—应用内购买修改应用程序信息


    1、•通过苹果应用程序商店有三种主要赚钱的方式:
    –直接收费(与国内大部分用户的消费习惯相悖,如果直接收费,不要设置为6元)
    –广告(降低用户体验,在android系统非常多,在苹果系统非常少)
    –内购
     
     
    2、内购的五种产品类别
    •非消耗品(Nonconsumable)
    –指的是在游戏中一次性购买并拥有永久访问权的物品或服务。非消耗品物品可以被用户再次下载,并且能够在用户的所有设备上使用
    •消耗品(Consumable)
    –专为支持可消耗的物品或服务设计的,消耗品购买不可被再次下载,根据其特点,消耗品不能在用户的设备之间跨设备使用,除非自定义服务在用户的账号之间共享这些信息
    3、•以下三种类别在iBooks中使用,目前iBooks不支持大陆市场
    –免费订阅(Free subscriptions)
    –自动续费订阅(Auto-renewing subscriptions)
    –非自动续费订阅(Nonrenewing subscriptions)
     
    4、准备工作
     
    5、消耗品定义
    6、语言及测试用户信息
    7、定义的商品
    8、修改应用程序信息
    9、内购流程
     
    10、添加StoreKit框架
    •要使用内购,需要导入StoreKit框架
     
    11、内购的常用方法
    •请求有效的产品代号集合
    •购买指定产品
    •验证购买
    •恢复购买
    12、请求有效产品集合

    // 1) 实例化产品请求

    SKProductsRequest *request = [[SKProductsRequest alloc]initWithProductIdentifiers:identifiers];

    // 2) 设置代理

    [request setDelegate:self];

    // 3) 启动请求

    [request start];

    提示:

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

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

    - (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response
     
    13、购买产品

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

    // 添加交易观察者对象

    [[SKPaymentQueue defaultQueue]addTransactionObserver:sharedInstance];

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

    NSMutableDictionary         *_productsDict;

     14、交易队列回调方法

    - (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) {

    15、恢复购买——恢复用户购买过的所有商品

    [[SKPaymentQueue defaultQueue]restoreCompletedTransactions];

    16、验证购买

    #define ITMS_PROD_VERIFY_RECEIPT_URL        @"https://buy.itunes.apple.com/verifyReceipt"

    #define ITMS_SANDBOX_VERIFY_RECEIPT_URL     @"https://sandbox.itunes.apple.com/verifyReceipt"

    17、验证购买(1)

    // 1. 使用base64加密交易凭据

    NSString *encodeStr = [transction.transactionReceipt base64EncodedString];

    // 2. 建立验证请求

    // 1) URL

    NSURL *url = [NSURL URLWithString:ITMS_SANDBOX_VERIFY_RECEIPT_URL];

    // 2) 建立请求

    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:5.0f];

    // 1> 请求数据体

    18、验证购买(2)

    // 3. 发送同步请求

    NSURLResponse *response = nil;

    NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:nil];

    // 4. 使用JSON解析返回数据

    NSDictionary *jsonDict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil];

    [jsonDict writeToFile:@"/users/liufan9/Desktop/123.plist" atomically:YES];

    if ([jsonDict[@"status"]integerValue] == 0) {

    19、为IAPHelper增加块代码回调

    •typedef void(^IAPCompletionResponseBlock)();
    •typedef void(^IAPFailedResponseBlock)(NSString *info);
    20、购买数据记录问题——系统偏好

    [[NSUserDefaults standardUserDefaults]setBool:isPurchasedforKey:productId];

    [[NSUserDefaults standardUserDefaults]synchronize];

     
     
     
     
  • 相关阅读:
    Mina入门demo
    MySQL数据库插入中文时出现Incorrect string value: 'xE6x97xB7xE5x85xA8' for column 'sz_name' at row 1
    synchronized和volatile
    springboot+Zookeeper+Dubbo入门
    zookeeper的安装
    windows下dubbo-admin的安装
    Java 枚举类
    Mysql 解压版 安装时候的注意事项
    Java——JDBC鶸笔记
    《初识Java微信公众号开发》 学习中遇到的困难
  • 原文地址:https://www.cnblogs.com/changxs/p/3484879.html
Copyright © 2020-2023  润新知