Вопрос по in-app-purchase, ios, iphone, ios4 – iOS - Восстановление автообновляемой подписки

9

Я внедряю автоматическую возобновляемую подписку. У меня следующий вопрос

Может ли пользователь восстановить содержимое подписки даже после истечения срока его действия?

если да, то как я могу проверить их и позволить загрузить

Ваш Ответ

2   ответа
5

Восстановление автоматически возобновляемых подписок

В основном вам нужно позвонить[[SKPaymentQueue defaultQueue] restoreCompletedTransactions] и вы вернете восстановленные транзакции. Вы должны поoriginalTransaction имущество. Вы будете знать дату транзакции для каждой транзакции (также для истекших). Затем вы просматриваете идентификатор продукта, и ваше приложение должно знать, какова длина подписки для каждого идентификатора продукта. А так как вы знаете дату начала и продолжительность каждой транзакции, вы можете рассчитать периоды времени, в течение которых подписка была действительной. Вы проверяете их как любую другую транзакцию - отправьте их на свой сервер, который затем отправит наhttp://buy.itunes.apple.com/verifyReceipt (поменять покупку на песочницу для тестирования)

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

    }
}

еспечивает начало подписки и дату истечения срока действия.

Tips--

Реализуйте проверку подписки, используя метод делегата приложения applicationDidEnterBackground.

Похожие вопросы