【问题标题】:iOS - Restoring auto renewable subscriptioniOS - 恢复自动续订订阅
【发布时间】:2012-08-20 09:08:25
【问题描述】:

我正在实施自动续订订阅。我有以下问题

订阅内容过期后用户能否恢复?

如果是这样,我如何验证它们并让它们下载

【问题讨论】:

    标签: iphone ios ios4 in-app-purchase


    【解决方案1】:

    Restoring Auto-Renewable Subscriptions

    基本上,您需要致电[[SKPaymentQueue defaultQueue] restoreCompletedTransactions],您将获得恢复的交易。您应该查看originalTransaction 属性。您将知道每笔交易的交易日期(也适用于过期交易)。然后您查看产品标识符,您的应用应该知道每个产品标识符的订阅长度。由于您知道每笔交易的开始日期和长度,您可以计算订阅有效的时间段。 您将它们验证为任何其他交易 - 将它们发送到您的服务器,然后发送到http://buy.itunes.apple.com/verifyReceipt(将购买更改为沙盒进行测试)。

    【讨论】:

      【解决方案2】:
      -(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 实现检查订阅。

      【讨论】:

        猜你喜欢
        • 2014-04-17
        • 2018-05-23
        • 2013-11-24
        • 1970-01-01
        • 2011-06-29
        • 2013-05-20
        • 1970-01-01
        • 1970-01-01
        • 2014-04-26
        相关资源
        最近更新 更多