【问题标题】:RMStore offline receipt verificationRMStore离线收据验证
【发布时间】:2016-02-28 21:52:25
【问题描述】:

关于使用RMStore (https://github.com/robotmedia/RMStore) 进行离线收据验证的一个问题

在应用启动时,我检查应用是否有有效的应用内购买(专业版) (我的应用只有 iOS7)

我就是这样做的:

RMStoreAppReceiptVerificator *verificator = [[RMStoreAppReceiptVerificator alloc] init];
BOOL isValidReceipt = [verificator verifyAppReceipt];
if (isValidReceipt)
{
    BOOL isProVersion = [[RMAppReceipt bundleReceipt] containsInAppPurchaseOfProductIdentifier:xxx];
    ...
}

我在 App Store 中仍然有 1.0 版...但是现在我想尽快进行更新...这在应用商店更新后仍然有效,对吗?该应用程序仍然会有收据,并且验证应该仍然通过,对吧?

我问是因为测试应用内购买并不容易(尤其是更新和东西),如果出现问题,用户会很生气....

【问题讨论】:

  • 这是关于某些特定库的,所以我认为您最好询问原作者
  • @Daij-Djan 作者(我)更喜欢在 Stack Overflow 中提出这些问题。
  • @hpique 没问题 :) 但我什至不知道那个 lib 并且这里或标签中没有指向它的链接所以我不知道
  • 另外,关于 RMStore 的大多数问题实际上都是关于 Store Kit 的问题。包括这个。
  • @hpique 现在我知道我“很高兴”撤销我的投票

标签: ios in-app-purchase storekit rmstore


【解决方案1】:

代码应该像以前一样工作。但是,您没有正确验证收据。引用Receipt Validation Programming Guide

如果在 iOS 中验证失败,请使用 SKReceiptRefreshRequest 类刷新收据。

使用 RMStore,看起来像这样:

const BOOL verified = [self verifyReceiptWithCustomLogic];
if (verified)
{
    // Verification succeeded
} 
else 
{ // Apple recommends to refresh the receipt if validation fails on iOS
    [[RMStore defaultStore] refreshReceiptOnSuccess:^{
        const BOOL verified = [self verifyReceiptWithCustomLogic];
        if (verified)
        {
            // Verification succeeded
        }
        else
        {
            // Verification failed
        }
    } failure:^(NSError *error) {
            // Verification failed
    }];
}

您的验证逻辑似乎在哪里:

- (BOOL)verifyReceiptWithCustomLogic
{
    RMStoreAppReceiptVerificator *verificator = [RMStoreAppReceiptVerificator new];
    if ([verificator verifyAppReceipt])
    {
        return [[RMAppReceipt bundleReceipt] containsInAppPurchaseOfProductIdentifier:xxx];
    }
    return NO;
}

请注意,刷新收据会使收据验证成为异步过程。

【讨论】:

  • 我将在RMStoreAppReceiptVerificator 代码文档中添加注释以明确这一点。
  • 太好了,谢谢!还有一个问题:收据验证何时会失败?我可以以某种方式强迫它进行测试吗?所以我的更新应该可以正常工作?
  • 这是一个不同的问题,它完全独立于 RMStore。我鼓励你也可以在 StackOverflow 上提问。
  • 如果验证失败,我会小心在应用启动时自动刷新收据。因此,我让 Apple 拒绝了我的应用程序。现在我只在用户选择恢复购买时刷新收据。链接的 Apple 编程指南暗示这应该没问题,但我的经验并非如此。
  • @scompt.com 我相信刷新收据会提示用户输入他们的 Apple 密码,如果您每次在启动时甚至在第一次运行时都这样做,那么用户体验会很差。根据我的经验,收据可能无法验证一次,但一旦通过,您就不必再次刷新它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-02-12
  • 1970-01-01
  • 2014-02-16
  • 2012-01-24
  • 2023-04-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多