我正在实现自动续订订阅。在此过程中,我遇到了以下问题:
即使订阅已经过期,用户是否仍然可以恢复订阅内容?
如果可以,我该如何验证用户并允许他们下载?
我正在实现自动续订订阅。在此过程中,我遇到了以下问题:
即使订阅已经过期,用户是否仍然可以恢复订阅内容?
如果可以,我该如何验证用户并允许他们下载?
请查看恢复自动续订订阅
基本上,您需要调用[[SKPaymentQueue defaultQueue] restoreCompletedTransactions]
,然后您将获得已恢复的交易。 您应该查看originalTransaction
属性。 您将了解每个交易(包括过期的交易)的交易日期。 然后,您可以查看产品标识符,并且您的应用程序应该知道每个产品标识符的订阅期限的长度。 因为您知道每个交易的开始日期和持续时间,所以您可以计算订阅有效的时间段。
与任何其他事务一样验证它们-将它们发送到您的服务器,服务器然后将它们发送到http://buy.itunes.apple.com/verifyReceipt
(测试时更改购买为sandbox)。
-(void)restoreSubscription:(SKPaymentTransaction *)transaction {
NSUserDefaults *defaultData = [NSUserDefaults standardUserDefaults];
NSArray *productID = [defaultData objectForKey:@"productID"];
NSArray *subMonths = [defaultData objectForKey:@"SubMonth"];
NSLog(@"%@",productID.description);
NSLog(@"Array ==%@",objContantManeger.subscriptionMonth);
NSMutableArray *arrID = [[NSMutableArray alloc] initWithArray:objContantManeger.subscriptionProductID];
NSMutableArray *arrMonth = [[NSMutableArray alloc] initWithArray:subMonths];
NSDate *date;
NSDate *exDate;
for (int i =0;i<arrID.count;i++)
{
NSString *idStr =[arrID objectAtIndex:i];
NSString *monthStr = [arrMonth objectAtIndex:i];
int addsubMonth = [monthStr intValue];
NSLog(@"%i--%@",i,idStr);
NSLog(@"%i-->%i",i,addsubMonth);
NSLog(@"Transaction Date--%@",transaction.originalTransaction.payment.productIdentifier);
if ([transaction.originalTransaction.payment.productIdentifier isEqualToString:idStr])
{
NSLog(@"Date..%@",transaction.originalTransaction.transactionDate);
date = transaction.originalTransaction.transactionDate;
NSString *dateStr = [date description];
NSRange range;
// year
range.location = 0;
range.length = 4;
NSString *yearStr = [dateStr substringWithRange:range];
int year = [yearStr intValue];
NSLog(@"%i",year);
// month
range.location = 5;
range.length = 2;
NSString *monthStr = [dateStr substringWithRange:range];
int month = [monthStr intValue];
NSLog(@"%i",month);
// day
range.location = 8;
range.length = 2;
NSString *dayStr = [dateStr substringWithRange:range];
int day = [dayStr intValue];
NSLog(@"%i",month);
NSCalendar *calendar = [NSCalendar currentCalendar];
NSDateComponents *components = [[NSDateComponents alloc] init];
NSLog(@"addsubMonth---)%i",addsubMonth);
[components setYear:year];
[components setMonth:month+addsubMonth];
[components setDay:day];
NSLog(@"Expire DATE-->%@",[calendar dateFromComponents:components]);
exDate = [calendar dateFromComponents:components];
NSUserDefaults *defult = [NSUserDefaults standardUserDefaults];
[defult setObject:exDate forKey:@"subexpiredate"];
[defult synchronize];
// return;
}
}