Objective c 跟踪magazins的自动续费订阅

Objective c 跟踪magazins的自动续费订阅,objective-c,ios,subscriptions,in-app-purchase,auto-renewing,Objective C,Ios,Subscriptions,In App Purchase,Auto Renewing,我正在尝试实现自动续费订阅,但有些事情对我来说还不是很清楚 例如,如果我有一个类似杂志的应用程序,并且想要跟踪订阅,即使订阅现在无效,我是否必须在我的应用程序中保存收据(例如核心数据)?我必须跟踪所有问题,因为即使订阅无效,我也必须让用户访问旧问题。因此,它的状态代码为0或21006 另一个问题是,为什么苹果会将21006状态码用于被苹果取消的订阅,例如,有人错误地进行了订阅。当我现在只知道它无效时,我如何确定它是否发生了?它也可能因超出订阅期而无效。我从iTunes U上的WWDC 2011视

我正在尝试实现自动续费订阅,但有些事情对我来说还不是很清楚

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

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


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

苹果建议您在服务器上存储并验证所有收据,而不一定在应用程序上。要检查Someone订阅的状态,只需验证您为该用户存储的任何收据。(必须是来自同一订阅系列的收据)然后苹果将以该订阅中的最新收据作出回应。您可以使用此信息向用户提供该杂志截至该收据到期日的所有版本。如果你愿意,你可以在应用程序上完成这一切,但苹果不鼓励这样做,因为你必须将iTunes验证
secret
存储在应用程序本身中


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

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

(或)

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+版本)

收据验证

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;
 }
有关更多详细信息,请访问以下链接

欢迎光临

希望它能帮助你

  - (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;
 }