0

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

我正在调查 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。(我确实在 GitHub 上提交了一个问题。)

4

2 回答 2

2

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

收据中没有此类信息。不过,您可以获得应用内购买的购买日期。RMStore 通过RMAppReceiptIAP对象帮助您解决这个问题。

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

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

我没有有效收据。领取流程是怎样的?我需要一个已经存在的应用程序包 ID 吗?某处有测试收据吗?

沙盒环境中的应用程序会有一个测试收据,但你不能操纵它的字段。

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

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

没有应用收据,因为应用级别没有这样的字段。

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

于 2014-07-09T09:31:14.460 回答
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;
于 2014-07-09T08:03:02.013 回答