mirror of
https://github.com/confirmedcode/Lockdown-iOS.git
synced 2025-12-21 12:14:02 +01:00
78 lines
2.2 KiB
Swift
78 lines
2.2 KiB
Swift
//
|
|
// PaywallService.swift
|
|
// LockdowniOS
|
|
//
|
|
// Created by Aliaksandr Dvoineu on 4.05.23.
|
|
// Copyright © 2023 Confirmed Inc. All rights reserved.
|
|
//
|
|
|
|
import CocoaLumberjackSwift
|
|
import StoreKit
|
|
import UIKit
|
|
|
|
protocol PaywallService: AnyObject {
|
|
var context: PaywallContext { get set }
|
|
|
|
func showPaywall(on vc: UIViewController, forceSpecialOffer: Bool)
|
|
|
|
func showRedemptionSheet()
|
|
}
|
|
|
|
final class BasePaywallService: PaywallService {
|
|
|
|
var context: PaywallContext = .normal
|
|
|
|
var countdownDisplayService: CountdownDisplayService = BaseCountdownDisplayService.shared
|
|
|
|
static let shared = BasePaywallService()
|
|
|
|
private init() {}
|
|
|
|
func showPaywall(on vc: UIViewController, forceSpecialOffer: Bool = false) {
|
|
defer {
|
|
UserDefaults.lastPaywallDisplayDate = Date()
|
|
}
|
|
// let paywall = TablePaywallViewController()
|
|
// paywall.modalPresentationStyle = .formSheet
|
|
|
|
// if let delegate = vc as? PaywallViewControllerCloseDelegate {
|
|
// paywall.delegate = delegate
|
|
// }
|
|
//
|
|
// vc.definesPresentationContext = true
|
|
// vc.present(paywall, animated: true) {
|
|
// vc.definesPresentationContext = false
|
|
// }
|
|
|
|
}
|
|
|
|
func showRedemptionSheet() {
|
|
guard #available(iOS 14.0, *) else { return }
|
|
SKPaymentQueue.default().presentCodeRedemptionSheet()
|
|
context = .redeemOfferCode
|
|
DDLogInfo("Showing redemption sheet, changing context to \(context)")
|
|
}
|
|
}
|
|
|
|
extension BasePaywallService: CountdownDisplayDelegate {
|
|
func didFinishCountdown() {
|
|
countdownDisplayService.pauseUpdating()
|
|
context = .normal
|
|
}
|
|
}
|
|
|
|
extension BasePaywallService: Keychainable {}
|
|
|
|
enum PaywallContext {
|
|
/// The context that shows a normal paywall without LTO discounts.
|
|
case normal
|
|
|
|
/// The context that shows an LTO paywall with a holiday discount
|
|
/// Only after an ordinary paywall has been closed.
|
|
case followUpLimitedTimeOffer
|
|
|
|
/// When user is in the process of code redemption after calling presentCodeRedemptionSheet() method.
|
|
case redeemOfferCode
|
|
}
|
|
|