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

造个轮子,因为有个swift版本SwiftyStoreKit,没有找到oc版本。

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

使用场景

付费下载,版本删除后重新下载,这时候我们app改成了内购版本,需要判断是否是之前付费下载用户,然后默认打开购买权益。

解决方案

1)获取Receipt数据, 如果本地有直接获取。

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

如果本地没有,去苹果刷新,然后再从本地获取。

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

苹果验证域名:

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

需要将Receipt,base64编码成string,请求参数json如下:

keyvalue
receipt-database64 编码的收据数据。
password仅用于包含自动续期订阅的收据。您App的共享密钥(十六进制字符串)。
exclude-old-transactions仅用于包含自动续期订阅或非续期订阅的iOS7样式App收据。如果值为 true,仅响应包括所有订阅的最新续期交易。

获取苹果返回结果如下:

{
    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,跟内购第一个版本进行比较,判断是不是需要恢复购买身份

in_app字段下是内购的信息,可以用来判断是不是内购过。

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

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

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
本协议是用户(您)和“冰点下载器”开发小组之间关于使用“冰点下载器”软件(本软件)达成的法律协议。您安装或者使用本软件的行为将视为对本协的接受及同意。除非您接受本协议,否则您无权下载、安装或使用本软件。 1. 本软件是免费许可软件,不进行出售。你可以免费的复制,分发和传播本软件, 但您必须保证每一份复制、分发和传播都必须是未更改过的,完整和真实的。您作为个人私用本软件。您只能对本软件进行非商业应用。 2. 没有经过“冰点下载器”的书面同意,您不得使用本软件支持任何商业实体或者商业行为。包含但不仅限于:直接或者间接使用本软件收费;使用本软件销售任何商品或者服务。 3. 本软件受版权法和国际版权条约以及其他知识产权法律和条约的保护。您不可以分解、反编译、反相工程和重构本软件。 4. 您在使用本软件中发生的任何行为都由您自己负责。您在此表示并且保证您只在遵守法律和本协议的情况下使用本软件,您不会使用本软件进行违反法律、违反规定或者损害“冰点下载器”或者任何第三方权利的行为,这些权利包含但不仅限于:隐私权、版权、专利权或者商标权。“冰点下载器” 不对这些行为负责。 5. “冰点下载器”对本软件产品不提供任何保证,不对任何用户因本软件所遭遇到的任何理论上的或实际上的损失承担责任,不对用户使用本软件造成的任何后果承担责任。 6. 我们可能在本软件或者“冰点下载器”官方网站上提供一些内容。对您通过本软件或者“冰点下载器”官方网站访问的第三方内容我们不承担任何责任。您可以通过本软件或者“冰点下载器”官方网站连接到第三方网站和 Web 服务,我们称其为“链接”和“标签”。我们出于便利之需向您提供这些链接和标签,但是我们并不控制第三方的链接和标签,也不对其负责。如果您与和本软件关连的第三方站点和服务进行了交易,您自己承担一切责任,包括由此造成的损失。 7. 我们会自动检查您的软件信息,以便更好的修正我们的软件。但是这些数据不会涉及您的个人信息,因此也不会侵害您的隐私。 8. 协议所定的任何条款的部分或全部无效者,由协议中最接近的其他条款替代,并且不影响其它条款的效力。 “冰点下载器”开发小组版权所有,保留一切解释权利 ! http://www.bingdian001.com/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值