1

我想实现自动再生订阅,但自己是不是真的对我清楚。跟踪自动再生订阅的magazins

如果我有像例如应用一本杂志,要跟踪的订阅,即使他们现在是无效的,我必须保存收据在我的应用程序(如核心数据)?我必须跟踪他们,因为即使订阅无效,我也必须让用户访问旧版问题。因此,无论它有状态码0奥德21006.

的另一个问题是,为什么苹果公司将使用该由苹果,因为例如某人取消误发的订阅取消订阅的21006个状态代码。我怎么能确定是否发生这种情况,当我只知道它现在是无效的?它也可能因为超出订阅期而失效。我从WWDC 2011本资料视频上的iTunes U.

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

回答

0

Apple建议您存储和验证所有收据您的服务器上,不一定上的应用程序。要检查某人订阅的状态,只需验证您为该用户存储的任何收据。 (它必须是来自同一个订阅系列的收据)然后Apple会回应该订阅中的最新收据。您可以使用此信息向用户提供该杂志的所有问题,直至该收据的有效期限。如果你愿意,你可以在应用程序上完成这一切,但苹果不鼓励它,因为你必须在应用程序本身存储你的iTunes验证secret

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

0

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

(OR)

RMStore代表交易的持久性和提供了用于存储在钥匙串或在交易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。

参考verificators

RMStore经由RMStoreAppReceiptVerificator提供收据验证(针对iOS 7或更高)andRMStoreTransactionReceiptVerificator(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

欢迎。

希望它能帮到你.............