跟踪杂志的自动续订订阅

时间:2011-09-26 09:52:52

标签: objective-c ios subscriptions in-app-purchase auto-renewing

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

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

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

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

2 个答案:

答案 0 :(得分:0)

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

至于你的第二个问题,我的假设是Apple认为退款是非常规的。所以他们不想为此作出任何让步。他们不想让它更容易或自动化。这就是为什么你没有得到一个特殊的代码,这意味着'用户的订阅因退款而被取消'。我希望这种情况非常罕见,只需免费向退款用户提供杂志文章,就不会让你破产。 (并且由于您的收据验证会显示其帐户未续订,因此您无需向他们提供新问题)。

答案 1 :(得分:0)

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

(OR)

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不会执行收据验证,但会提供参考实施。您可以实施自己的自定义验证或使用库提供的参考验证器。

以下概述了两种选择。有关更多信息,请查看维基。

参考验证员

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 In-App purchases made easy

A lightweight iOS library for In-App Purchases

欢迎。

希望它会帮助你.............

相关问题