Получите продолжительность `SKProduct` в подписках Apple - PullRequest
0 голосов
/ 04 августа 2020

Бэкэнду для моего приложения нужны две вещи, помимо проверки квитанции, чтобы гарантировать, что пользователь имеет доступ к подписке. А subscriptionStartTimestamp и subscriptionDuration. Мне было интересно, предлагает ли SKProduct что-то подобное, и я наткнулся на SKProduct.subscriptionPeriod, который содержит numberOfUnits и unit. Это может быть day, month или другое.

Тогда меня задал другой вопрос; «всегда ли Apple считает месяц 30-дневным?», «как насчет високосных лет?». Как я могу найти subscriptionDuration вместо SKProduct?

1 Ответ

0 голосов
/ 04 августа 2020

Я нашел это .

Согласно ответу, упомянутому выше, я разработал функцию, которая принимает SKProduct и возвращает продолжительность подписки.

частное развлечение c subscriptionDuration (product: SKProduct) -> TimeInterval {

    let currentDate = Date()
        
    guard let subscriptionPeriod = product.subscriptionPeriod else {
        return 0
    }
    
    let numberOfUnits = subscriptionPeriod.numberOfUnits
    let unit = subscriptionPeriod.unit
    
    var calendarComponent: Calendar.Component? = nil
    
    switch unit {
        
    case .day:
        calendarComponent = .day
        break
        
    case .month:
        calendarComponent = .month
        break
        
    case .week:
        calendarComponent = .weekOfYear
        break
        
    case .year:
        calendarComponent = .year
        break
        
    default:
        break
        
    }
    
    guard let component = calendarComponent else {
        return 0
    }
    
    let calendar = Calendar(identifier: .iso8601)
    
    guard let newDate = calendar.date(byAdding: component, value: numberOfUnits, to: currentDate) else {
        return 0
    }
    
    return newDate.timeIntervalSince1970 - currentDate.timeIntervalSince1970
}
...