BuyInAppStore button

This commit is contained in:
Kylmakalle 2025-03-15 12:22:01 +02:00
parent 6e70a5b77c
commit 745078e2d4
5 changed files with 21 additions and 9 deletions

View File

@ -13,7 +13,7 @@ import TelegramUIPreferences
@available(iOS 13.0, *)
public func sgPayWallController(statusSignal: Signal<Int64, NoError>, replacementController: ViewController, presentationData: PresentationData? = nil, SGIAPManager: SGIAPManager, openUrl: @escaping (String) -> Void, paymentsEnabled: Bool) -> ViewController {
public func sgPayWallController(statusSignal: Signal<Int64, NoError>, replacementController: ViewController, presentationData: PresentationData? = nil, SGIAPManager: SGIAPManager, openUrl: @escaping (String) -> Void, paymentsEnabled: Bool, canBuyInBeta: Bool, openAppStorePage: @escaping () -> Void) -> ViewController {
// let theme = presentationData?.theme ?? (UITraitCollection.current.userInterfaceStyle == .dark ? defaultDarkColorPresentationTheme : defaultPresentationTheme)
let theme = defaultDarkColorPresentationTheme
let strings = presentationData?.strings ?? defaultPresentationStrings
@ -30,7 +30,7 @@ public func sgPayWallController(statusSignal: Signal<Int64, NoError>, replacemen
let swiftUIView = SGSwiftUIView<SGPayWallView>(
legacyController: legacyController,
content: {
SGPayWallView(wrapperController: legacyController, replacementController: replacementController, SGIAP: SGIAPManager, statusSignal: statusSignal, openUrl: openUrl, paymentsEnabled: paymentsEnabled)
SGPayWallView(wrapperController: legacyController, replacementController: replacementController, SGIAP: SGIAPManager, statusSignal: statusSignal, openUrl: openUrl, openAppStorePage: openAppStorePage, paymentsEnabled: paymentsEnabled, canBuyInBeta: canBuyInBeta)
}
)
let controller = UIHostingController(rootView: swiftUIView, ignoreSafeArea: true)
@ -106,7 +106,9 @@ struct SGPayWallView: View {
let SGIAP: SGIAPManager
let statusSignal: Signal<Int64, NoError>
let openUrl: (String) -> Void
let openAppStorePage: () -> Void
let paymentsEnabled: Bool
let canBuyInBeta: Bool
private enum PayWallState: Equatable {
case ready // ready to buy
@ -405,6 +407,8 @@ struct SGPayWallView: View {
} else if let product = product {
if !SGIAP.canMakePayments || paymentsEnabled == false {
return "PayWall.Button.PaymentsUnavailable".i18n(lang)
} else if Bundle.main.appStoreReceiptURL?.lastPathComponent == "sandboxReceipt" && !canBuyInBeta {
return "PayWall.Button.BuyInAppStore".i18n(lang)
} else {
return "PayWall.Button.Subscribe".i18n(lang, args: product.price)
}
@ -429,12 +433,16 @@ struct SGPayWallView: View {
private func handlePurchase() {
if currentStatus > 1 {
wrapperController?.replace(with: replacementController)
} else {
if Bundle.main.appStoreReceiptURL?.lastPathComponent == "sandboxReceipt" && !canBuyInBeta {
openAppStorePage()
} else {
guard let product = product else { return }
state = .purchasing
SGIAP.buyProduct(product.skProduct)
}
}
}
private func handleRestorePurchases() {
state = .restoring

View File

@ -227,6 +227,7 @@
"PayWall.Button.Restoring" = "Restoring Purchases...";
"PayWall.Button.Validating" = "Validating Purchase...";
"PayWall.Button.PaymentsUnavailable" = "Payments unavailable";
"PayWall.Button.BuyInAppStore" = "Subscribe in App Store version";
"PayWall.Button.Subscribe" = "Subscribe for %@ / month";
"PayWall.Button.ContactingAppStore" = "Contacting App Store...";

View File

@ -194,10 +194,10 @@
"PayWall.Text" = "Заряжен Pro функциями";
"PayWall.SessionBackup.Title" = "Бэкап Аккаунтов";
"PayWall.SessionBackup.Notice" = "Вход в аккаунты без кодов, даже после переустановки. Безопасное хранение в Keychain на устройстве.";
"PayWall.SessionBackup.Notice" = "Вход в аккаунты без кода, даже после переустановки. Безопасное хранение в Keychain на устройстве.";
"PayWall.MessageFilter.Title" = "Фильтр сообщений";
"PayWall.MessageFilter.Notice" = "Уменьшает видимость надоедливых сообщений со СПАМом или рекламой";
"PayWall.MessageFilter.Notice" = "Уменьшает видимость надоедливых сообщений со СПАМом или рекламой.";
"PayWall.Notifications.Title" = "Отключение @тэгов и ответов";
"PayWall.Notifications.Notice" = "Скрывает или приглушает неважные уведомления.";
@ -227,6 +227,7 @@
"PayWall.Button.Restoring" = "Восстановление покупок...";
"PayWall.Button.Validating" = "Проверка покупки...";
"PayWall.Button.PaymentsUnavailable" = "Платежи недоступны";
"PayWall.Button.BuyInAppStore" = "Подписаться в App Store версии";
"PayWall.Button.Subscribe" = "Подписаться за %@ / месяц";
"PayWall.Button.ContactingAppStore" = "Подключение к App Store...";

View File

@ -5,7 +5,7 @@ public struct SGWebSettings: Codable, Equatable {
public let user: SGUserSettings
public static var defaultValue: SGWebSettings {
return SGWebSettings(global: SGGlobalSettings(ytPip: true, qrLogin: true, storiesAvailable: false, canViewMessages: true, canEditSettings: false, canShowTelescope: false, announcementsData: nil, regdateFormat: "full", botMonkeys: [], forceReasons: [], unforceReasons: [], paymentsEnabled: true, duckyAppIconAvailable: true, canGrant: false), user: SGUserSettings(contentReasons: [], canSendTelescope: false))
return SGWebSettings(global: SGGlobalSettings(ytPip: true, qrLogin: true, storiesAvailable: false, canViewMessages: true, canEditSettings: false, canShowTelescope: false, announcementsData: nil, regdateFormat: "full", botMonkeys: [], forceReasons: [], unforceReasons: [], paymentsEnabled: true, duckyAppIconAvailable: true, canGrant: false), user: SGUserSettings(contentReasons: [], canSendTelescope: false, canBuyInBeta: true))
}
}
@ -37,6 +37,7 @@ public struct SGBotMonkeys: Codable, Equatable {
public struct SGUserSettings: Codable, Equatable {
public let contentReasons: [String]
public let canSendTelescope: Bool
public let canBuyInBeta: Bool
}

View File

@ -3624,7 +3624,8 @@ extension SharedAccountContextImpl {
}
let proController = self.makeSGProController(context: context)
let payWallController = sgPayWallController(statusSignal: statusSignal, replacementController: proController, presentationData: self.currentPresentationData.with { $0 }, SGIAPManager: sgIAP, openUrl: self.applicationBindings.openUrl, paymentsEnabled: context.currentAppConfiguration.with { $0 }.sgWebSettings.global.paymentsEnabled)
let sgWebSettings = context.currentAppConfiguration.with { $0 }.sgWebSettings
let payWallController = sgPayWallController(statusSignal: statusSignal, replacementController: proController, presentationData: self.currentPresentationData.with { $0 }, SGIAPManager: sgIAP, openUrl: self.applicationBindings.openUrl, paymentsEnabled: sgWebSettings.global.paymentsEnabled, canBuyInBeta: sgWebSettings.user.canBuyInBeta, openAppStorePage: self.applicationBindings.openAppStorePage)
return payWallController
}