我发布了应用的更新版本,并且我已经从付费过渡到免费增值。为了给现有用户提供无广告体验,我希望跟踪他们最初购买应用的时间。
我正在研究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!
}];
我有两个问题:
我没有有效的收据。获得一个的程序是什么?我是否需要已经存在的应用包ID?某处有测试收据吗?
如果我想在日期而不是版本号上建立逻辑,我可以这样做吗? originalPurchaseDate
上没有RMAppReciept
属性。 (我确实提交了issue on GitHub。)
答案 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;