iOS - 恢复自动续订订阅

9

我正在实现自动续订订阅。在此过程中,我遇到了以下问题:

即使订阅已经过期,用户是否仍然可以恢复订阅内容?

如果可以,我该如何验证用户并允许他们下载?

2个回答

5

请查看恢复自动续订订阅

基本上,您需要调用[[SKPaymentQueue defaultQueue] restoreCompletedTransactions],然后您将获得已恢复的交易。 您应该查看originalTransaction属性。 您将了解每个交易(包括过期的交易)的交易日期。 然后,您可以查看产品标识符,并且您的应用程序应该知道每个产品标识符的订阅期限的长度。 因为您知道每个交易的开始日期和持续时间,所以您可以计算订阅有效的时间段。 与任何其他事务一样验证它们-将它们发送到您的服务器,服务器然后将它们发送到http://buy.itunes.apple.com/verifyReceipt(测试时更改购买为sandbox)。


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

    }
}

你可以使用这种方法验证订阅,因为它提供了订阅开始和到期日期。
提示 - 实现检查订阅,使用应用程序委托方法applicationDidEnterBackground。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接