1

我正在尝试实现自动续订订阅,但对我来说并不是很清楚。

例如,如果我有一个杂志之类的应用程序并且想要跟踪订阅,即使它们现在无效,我是否必须将收据保存在我的应用程序中(例如核心数据)?我必须跟踪它们,因为即使订阅无效,我也必须让用户访问旧问题。所以要么它的状态码为 0 要么 21006。

另一个问题是为什么 Apple 使用 21006 状态代码来取消被 Apple 取消的订阅,因为例如有人错误地进行了订阅。当我现在只知道它无效时,如何确定是否发生了这种情况?它也可能因为超出订阅期而失效。我从 iTunes U 上的 WWDC 2011 视频中获得了此信息。

任何帮助,将不胜感激 ;-)

4

2 回答 2

0

Apple 建议您在服务器上存储并验证所有收据。

(或者)

RMStore 委托事务持久性并提供两个可选的参考实现,用于将事务存储在 Keychain 或 NSUserDefaults 中。您可以实施您的交易,使用图书馆提供的参考实施,或者在非消耗品和自动更新订阅的情况下,直接从收据中获取交易。

  -(void) startProductPurchase{

 [[RMStore defaultStore] requestProducts:[NSSet setWithArray:_products] success:^(NSArray   *products, NSArray *invalidProductIdentifiers) {

    _productsRequestFinished = YES;
    NSLog(@"Product Request Finished");
    [self buyApplication:products];
   } failure:^(NSError *error) {

    UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:NSLocalizedString(@"Products Request Failed", @"")
                                                        message:error.localizedDescription
                                                       delegate:nil
                                              cancelButtonTitle:NSLocalizedString(@"OK", @"")
                                              otherButtonTitles:nil];
    [alertView show];
   }];

刷新收据通知(仅限 iOS 7+)

 - (void)storeRefreshReceiptFailed:(NSNotification*)notification;
 {
 NSError *error = notification.rm_storeError;
}

 - (void)storeRefreshReceiptFinished:(NSNotification*)notification { }

收据验证

RMStore 默认不执行收据验证,但提供参考实现。您可以实现自己的自定义验证或使用库提供的参考验证器。

下面概述了这两个选项。有关更多信息,请查看 wiki。

参考验证器

RMStore 通过 RMStoreAppReceiptVerificator(适用于 iOS 7 或更高版本)和 RMStoreTransactionReceiptVerificator(适用于 iOS 6 或更低版本)提供收据验证。要使用其中任何一个,请将 RMStore/Optional 中的相应文件添加到您的项目中,并在启动时设置验证器委托 (receiptVerificator)。例如:

  - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
 {
  const BOOL iOS7OrHigher = floor(NSFoundationVersionNumber) > NSFoundationVersionNumber_iOS_6_1;
_receiptVerificator = iOS7OrHigher ? [[RMStoreAppReceiptVerificator alloc] init] : [[RMStoreTransactionReceiptVerificator alloc] init];
[RMStore defaultStore].receiptVerificator = _receiptVerificator;
// Your code
return YES;
 }

有关更多详细信息,请点击以下链接。

iOS 应用内购买变得简单

用于应用内购买的轻量级 iOS 库

欢迎。

希望对你有帮助............

于 2014-09-09T07:51:15.883 回答
0

Apple 建议您将所有收据存储并验证在您的服务器上,而不一定在应用程序上。要检查某人的订阅状态,只需验证您为该用户存储的任何收据。(它必须是来自同一订阅系列的收据)然后 Apple 将使用该订阅中的最新收据进行响应。您可以使用此信息向用户提供该杂志的所有问题,直到该收据的到期日为止。如果需要,您可以在应用程序上完成所有这些操作,但 Apple 不鼓励这样做,因为您必须将 iTunes 验证存储secret在应用程序本身中。

至于你的第二个问题,我的假设是苹果认为退款是不正常的。所以他们不想为此做出任何让步。他们不想让它变得更容易或自动化。这就是为什么您没有收到表示“用户的订阅因退款而被取消”的特殊代码的原因。我希望这种情况足够罕见,以至于简单地将杂志文章免费提供给退款的用户,不会让你破产。(并且由于您的收据验证将显示他们的帐户没有更新,您不必给他们新的问题)。

于 2012-03-07T08:56:47.303 回答