152 lines
5.7 KiB
Swift
152 lines
5.7 KiB
Swift
//
|
|
// SubscriptionDetailViewController.swift
|
|
// Earthquake Network
|
|
//
|
|
// Created by Busi Andrea on 29/07/2020.
|
|
// Copyright © 2020 Earthquake Network. All rights reserved.
|
|
//
|
|
|
|
import UIKit
|
|
import SafariServices
|
|
import StoreKit
|
|
|
|
|
|
class SubscriptionDetailViewController: UIViewController {
|
|
|
|
/// Enable this allows shake to enable the current subscription
|
|
private static let ShakeToEnableSubscription = false
|
|
|
|
var product: SKProduct? {
|
|
didSet {
|
|
updateUI()
|
|
}
|
|
}
|
|
|
|
@IBOutlet private weak var containerView: UIView!
|
|
@IBOutlet private weak var productTitleLabel: UILabel!
|
|
@IBOutlet private weak var productImageView: UIImageView!
|
|
@IBOutlet private weak var productDescriptionLabel: UILabel!
|
|
@IBOutlet private weak var subscriptionDetailsLabel: UILabel!
|
|
@IBOutlet private weak var openPrivacyButton: UIButton!
|
|
@IBOutlet private weak var openTermsButton: UIButton!
|
|
@IBOutlet private weak var purchaseRecapLabel: UILabel!
|
|
@IBOutlet private weak var productPriceLabel: UILabel!
|
|
@IBOutlet private weak var purchaseButton: UIButton!
|
|
|
|
|
|
// MARK: - View Lifecycle
|
|
|
|
override func viewDidLoad() {
|
|
super.viewDidLoad()
|
|
|
|
NotificationCenter.default.addObserver(self, selector: #selector(handlePurchaseNotification(_:)),
|
|
name: .EQNInAppPurchaseDidComplete,
|
|
object: nil)
|
|
|
|
updateUI()
|
|
setupUI()
|
|
}
|
|
|
|
// MARK: - Private
|
|
|
|
private func setupUI() {
|
|
containerView.eqn_applyShadowAndRoundedCorners()
|
|
}
|
|
|
|
private func updateUI() {
|
|
guard let product = product, isViewLoaded else { return }
|
|
|
|
productImageView.image = VersioneProProducts.image(for: product.productIdentifier)
|
|
productTitleLabel.text = product.localizedTitle
|
|
productDescriptionLabel.text = product.localizedDescription
|
|
|
|
var purchaseRecapString = ""
|
|
var subscriptionDetailsString = ""
|
|
switch product.productIdentifier {
|
|
case VersioneProProducts.Identifier.Subscription10kMonthly,
|
|
VersioneProProducts.Identifier.Subscription100kMonthly:
|
|
purchaseRecapString = "inapp_monthly_payment"
|
|
subscriptionDetailsString = "inapp_detail_description"
|
|
case VersioneProProducts.Identifier.Subscription100kYearly,
|
|
VersioneProProducts.Identifier.Subscription100kYearlyDiscounted,
|
|
VersioneProProducts.Identifier.Subscription10kYearly,
|
|
VersioneProProducts.Identifier.Subscription10kYearlyDiscounted:
|
|
purchaseRecapString = "inapp_yearly_payment"
|
|
subscriptionDetailsString = "inapp_detail_description"
|
|
case VersioneProProducts.Identifier.Subscription10kPerpetual,
|
|
VersioneProProducts.Identifier.Subscription100kPerpetual:
|
|
purchaseRecapString = "inapp_lifetime_payment"
|
|
subscriptionDetailsString = "inapp_lifetime_detail_description"
|
|
default:
|
|
break
|
|
}
|
|
|
|
subscriptionDetailsLabel.text = NSLocalizedString(subscriptionDetailsString, comment: "")
|
|
openPrivacyButton.setTitle(NSLocalizedString("network_pro_privacy_disclaimer", comment: ""), for: .normal)
|
|
openTermsButton.setTitle(NSLocalizedString("network_pro_terms_conditions", comment: ""), for: .normal)
|
|
|
|
purchaseRecapLabel.text = "\(product.localizedDescription), \(NSLocalizedString(purchaseRecapString, comment: ""))"
|
|
|
|
priceFormatter.locale = product.priceLocale
|
|
productPriceLabel.text = priceFormatter.string(from: product.price)
|
|
purchaseButton.setTitle(NSLocalizedString("inapp_purchase", comment: ""), for: .normal)
|
|
}
|
|
|
|
// MARK: - Notifications
|
|
|
|
@objc func handlePurchaseNotification(_ notification: Notification) {
|
|
navigationController?.popViewController(animated: true)
|
|
}
|
|
|
|
// MARK: - Actions
|
|
|
|
@IBAction func openExternalLinkTapped(_ sender: UIButton) {
|
|
var linkUrl: URL?
|
|
if sender == openPrivacyButton {
|
|
linkUrl = URL(string: "\(EQNWebsiteAddress)/privacy/")
|
|
} else if sender == openTermsButton {
|
|
linkUrl = URL(string: "\(EQNWebsiteAddress)/terms-conditions/")
|
|
|
|
}
|
|
|
|
if let url = linkUrl {
|
|
let controller = SFSafariViewController(url: url)
|
|
present(controller, animated: true, completion: nil)
|
|
}
|
|
}
|
|
|
|
@IBAction func subscribeTapped(_ sender: UIButton) {
|
|
guard let product = product else { return }
|
|
|
|
VersioneProProducts.store.buyProduct(product)
|
|
}
|
|
|
|
// MARK: - Helper
|
|
|
|
private var priceFormatter: NumberFormatter = {
|
|
let formatter = NumberFormatter()
|
|
formatter.formatterBehavior = .behavior10_4
|
|
formatter.numberStyle = .currency
|
|
return formatter
|
|
}()
|
|
}
|
|
|
|
|
|
extension SubscriptionDetailViewController {
|
|
override func motionEnded(_ motion: UIEvent.EventSubtype, with event: UIEvent?) {
|
|
guard let product = product, event?.subtype == .motionShake, Self.ShakeToEnableSubscription else {
|
|
return
|
|
}
|
|
|
|
let alert = UIAlertController(title: "🧑💻", message: "Please select an action", preferredStyle: .alert)
|
|
alert.addAction(UIAlertAction(title: "Reset all purchases", style: .default) { action in
|
|
EQNPurchaseUtility.resetInAppPurchases()
|
|
})
|
|
alert.addAction(UIAlertAction(title: "Activate this subscription", style: .default) { action in
|
|
EQNPurchaseUtility.simulateProPurchase(identifier: product.productIdentifier)
|
|
})
|
|
alert.addAction(UIAlertAction(title: "Cancel", style: .cancel, handler: nil))
|
|
present(alert, animated: true, completion: nil)
|
|
}
|
|
}
|