使用RMStore获取应用程序的原始购买日期的正确方法是什么?

时间:2014-07-09 07:45:21

标签: ios objective-c cocoa-touch app-store rmstore

我发布了应用的更新版本,并且我已经从付费过渡到免费增值。为了给现有用户提供无广告体验,我希望跟踪他们最初购买应用的时间。

我正在研究RMStore,但我不清楚如何测试从收据中读取原始购买日期。我提出了一些我认为应该有效的简单代码,但我没有很好的方法来测试它。

[[RMStore defaultStore] refreshReceiptOnSuccess:^{

    NSURL *url = [RMStore receiptURL];

    NSData *data = [NSData dataWithContentsOfURL:url];

    RMAppReceipt* r =[[RMAppReceipt alloc] initWithASN1Data:data];

    // Cheap and easy conversion to a float...
    //  IRL do a real comparison with the strings...

    if ([[r originalAppVersion] floatValue] < 2.0)
    {
        //  Do something for early-adopters
    }

} failure:^(NSError *error) {
    // Ruh-roh!
}];

我有两个问题:

  1. 我没有有效的收据。获得一个的程序是什么?我是否需要已经存在的应用包ID?某处有测试收据吗?

  2. 如果我想在日期而不是版本号上建立逻辑,我可以这样做吗? originalPurchaseDate上没有RMAppReciept属性。 (我确实提交了issue on GitHub。)

2 个答案:

答案 0 :(得分:2)

  

使用RMStore获取应用的原始购买日期的正确方法是什么?

收据中没有此类信息。不过,您可以获取应用内购买的购买日期。 RMStore通过RMAppReceiptIAP对象帮助您完成此任务。

  

为了给现有用户提供无广告体验,我希望跟踪他们最初购买应用的时间。

根据@sergio的建议,您可以从应用收据中阅读原始应用版本。请记住,收据仅适用于iOS 7。

  

我没有有效的收据。获得一个的程序是什么?我是否需要已经存在的应用程序包ID?某处有测试收据吗?

沙盒环境中的应用会有测试收据,但您无法操纵其字段。

作为替代方案,您可以配置RMAppReceipt或模拟它以测试各种工作流程。

  

如果我想将逻辑基于日期而不是版本号,我可以这样做吗? RMAppReceipt上没有originalPurchaseDate属性。

未使用应用收据,因为应用级别没有此类字段。

顺便说一句,请避免在启动时刷新收据,因为它往往会显示Apple ID密码提示。只有在找不到收据或信息丢失时才刷新。

答案 1 :(得分:0)

也许你想尝试:

RMAppReceipt* appReceipt = [RMAppReceipt bundleReceipt];    
if ([[appReceipt originalAppVersion] floatValue] < 2.0)


/**
 Returns the app receipt contained in the bundle, if any and valid. Extracts the receipt in ASN1 from the PKCS #7 container, and then parses the ASN1 data into a RMAppReceipt instance. If an Apple Root certificate is available, it will also verify that the signature of the receipt is valid.
 @return The app receipt contained in the bundle, or nil if there is no receipt or if it is invalid.
 @see refreshReceipt
 @see setAppleRootCertificateURL:
 */
+ (RMAppReceipt*)bundleReceipt;