как определить текущий тарифный план в приложении покупки [автообновление] - PullRequest
0 голосов
/ 19 июня 2019

У меня есть три плана подписки в in-app-purchase 1 месяц , 6 месяцев , 1 год , поэтому я хочу проверить текущую подписку пользователей план и дата истечения срока действия , так что я сейчас делаю с получения квитанции latest_receipt_info в том смысле, что я использую последний объект.из последнего объекта я беру product_id и использую его в качестве текущей подписки плана и expires_date используется для проверки активности или нет.Ниже блок code, который я использую.Так это правильный подход?

if([dict[@"status"] integerValue] == 0) {
    if([dict.allKeys containsObject:@"latest_receipt_info"]) {
        NSArray *iapReceipts = dict[@"latest_receipt_info"];
        if(iapReceipts) {
            if(iapReceipts.count > 0) {
                NSDictionary *latestReceipt = [iapReceipts lastObject];
                if(latestReceipt) {
                    _currentIAPID = latestReceipt[@"product_id"];
                    NSDate *expireDate = latestReceipt[@"expires_date"];
                    if(expireDate) {
                        NSInteger days = DaysBetween(NSDate.date, expireDate);
                        if(days >= 0) {
                            NSLog(@"days %ld",(long)days);
                            status = SubscriptionStatusActive;

                        } else {
                            NSLog(@"Subs :NEGATIVE DAYS");
                            status = SubscriptionStatusExpired;
                        }
                    }
                }
            }
        }
    }
}

Любые предложения будут более полезными.

1 Ответ

0 голосов
/ 19 июня 2019

Нет, это неправильный подход.Вы не должны получить последний объект, потому что этот массив не отсортирован.Он содержит все ваши транзакции, включая все продления.Этот пример кода не учитывает cancellation_date:

- (void)parseResponse:(NSDictionary*)dict{
    if ([dict[@"status"] integerValue] != 0) {return;}

    NSArray *iapReceipts = dict[@"latest_receipt_info"];

    NSDateFormatter *formatter = [NSDateFormatter new];
    formatter.dateFormat = @"yyyy-MM-dd HH:mm:ss VV";

    for (NSDictionary *iapReceipt in iapReceipts){
        NSString *productID = iapReceipt[@"product_id"];
        NSDate *date = [formatter dateFromString:iapReceipt[@"expires_date"]?:@""];

        if (date && [date timeIntervalSinceDate:[NSDate date]] > 0){
            [[NSUserDefaults standardUserDefaults] setObject:date forKey:productID];
        }
    }
}

- (BOOL)isSubscriptionActive:(NSString*)productID {
    NSDate *date = [[NSUserDefaults standardUserDefaults] objectForKey:productID];
    if (date && [date timeIntervalSinceDate:[NSDate date]] > 0){
        return YES;
    } else {
        return NO;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...