付费下载转免费下载内购版本升级方案

造个轮子,由于有个swift版本SwiftyStoreKit,没有找到oc版本。html

swift内购很强大库:github.com/bizz84/Swif…ios

使用场景

付费下载,版本删除后从新下载,这时候咱们app改为了内购版本,须要判断是不是以前付费下载用户,而后默认打开购买权益。git

解决方案

1)获取Receipt数据, 若是本地有直接获取。github

NSURL *receiptUrl = [[NSBundle mainBundle] appStoreReceiptURL];
    NSData *receiptData = [NSData dataWithContentsOfURL:receiptUrl];
复制代码

若是本地没有,去苹果刷新,而后再从本地获取。json

SKReceiptRefreshRequest *refreshReqeust = [[SKReceiptRefreshRequest alloc] init];
        refreshReqeust.delegate = self;
        [refreshReqeust start];
复制代码
  1. 拿Receipt数据去苹果验证

苹果验证域名:swift

NSString *production = @"https://buy.itunes.apple.com/verifyReceipt"; // 正式环境
NSString *sandbox = @"https://sandbox.itunes.apple.com/verifyReceipt"; // 沙盒环境
复制代码

须要将Receipt,base64编码成string,请求参数json以下:bash

key value
receipt-data base64 编码的收据数据。
password 仅用于包含自动续期订阅的收据。您App的共享密钥(十六进制字符串)。
exclude-old-transactions 仅用于包含自动续期订阅或非续期订阅的iOS7样式App收据。若是值为 true,仅响应包括全部订阅的最新续期交易。

获取苹果返回结果以下:app

{
    environment = Sandbox;
    receipt =     {
        "adam_id" = 0;
        "app_item_id" = 0;
        "application_version" = "1.1.0";
        "bundle_id" = "com.xxx";
        "download_id" = 0;
        "in_app" =         ( // App 内购买项目收据字段
                        {
                "is_trial_period" = false;
                "original_purchase_date" = "2018-12-13 06:43:11 Etc/GMT";
                "original_purchase_date_ms" = 1544683391000;
                "original_purchase_date_pst" = "2018-12-12 22:43:11 America/Los_Angeles";
                "original_transaction_id" = 1000000486729404;
                "product_id" = "com.xxx";
                "purchase_date" = "2018-12-13 06:43:11 Etc/GMT";
                "purchase_date_ms" = 1544683391000;
                "purchase_date_pst" = "2018-12-12 22:43:11 America/Los_Angeles";
                quantity = 1;
                "transaction_id" = 1000000486729404;
            }
        );
        "original_application_version" = "1.0"; // 最初购买的 App 的版本
        "original_purchase_date" = "2013-08-01 07:00:00 Etc/GMT";
        "original_purchase_date_ms" = 1375340400000;
        "original_purchase_date_pst" = "2013-08-01 00:00:00 America/Los_Angeles";
        "receipt_creation_date" = "2018-12-14 12:28:12 Etc/GMT";
        "receipt_creation_date_ms" = 1544790492000;
        "receipt_creation_date_pst" = "2018-12-14 04:28:12 America/Los_Angeles";
        "receipt_type" = ProductionSandbox;
        "request_date" = "2018-12-18 07:10:21 Etc/GMT";
        "request_date_ms" = 1545117021021;
        "request_date_pst" = "2018-12-17 23:10:21 America/Los_Angeles";
        "version_external_identifier" = 0;
    };
    status = 0;
}
复制代码

经过解析最初购买app的版本original_application_version,跟内购第一个版本进行比较,判断是否是须要恢复购买身份ide

in_app字段下是内购的信息,能够用来判断是否是内购过。ui

参考: 15tar.com/ios/2017/10…

苹果官方文档: developer.apple.com/cn/app-stor…

本文代码git地址: github.com/342261733/X…

相关文章
相关标签/搜索