跟踪自动再生订阅的magazins
我想实现自动再生订阅,但自己是不是真的对我清楚。跟踪自动再生订阅的magazins
如果我有像例如应用一本杂志,要跟踪的订阅,即使他们现在是无效的,我必须保存收据在我的应用程序(如核心数据)?我必须跟踪他们,因为即使订阅无效,我也必须让用户访问旧版问题。因此,无论它有状态码0奥德21006.
的另一个问题是,为什么苹果公司将使用该由苹果,因为例如某人取消误发的订阅取消订阅的21006个状态代码。我怎么能确定是否发生这种情况,当我只知道它现在是无效的?它也可能因为超出订阅期而失效。我从WWDC 2011本资料视频上的iTunes U.
任何帮助,将不胜感激;-)
Apple建议您存储和验证所有收据您的服务器上,不一定上的应用程序。要检查某人订阅的状态,只需验证您为该用户存储的任何收据。 (它必须是来自同一个订阅系列的收据)然后Apple会回应该订阅中的最新收据。您可以使用此信息向用户提供该杂志的所有问题,直至该收据的有效期限。如果你愿意,你可以在应用程序上完成这一切,但苹果不鼓励它,因为你必须在应用程序本身存储你的iTunes验证secret
。
关于你的第二个问题,我的假设是,苹果认为退款作为外的范数。所以他们不想为此做出任何让步。他们不想让它更容易或自动化。这就是为什么你没有得到一个特殊的代码,这意味着'用户的订阅因退款而被取消'。我希望这是非常罕见的,只需提供免费退款用户的杂志文章,不会让你破产。 (并且由于您的收据验证将显示他们的帐户不会续订,因此您不必给他们新的问题)。
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
欢迎。
希望它能帮到你.............