From 6e4051494ee2b97d805b93efcd553d6e6a6a166c Mon Sep 17 00:00:00 2001 From: zeng Date: Thu, 26 Jun 2025 14:40:11 +0800 Subject: [PATCH] =?UTF-8?q?=E5=BB=B6=E8=BF=9F=E6=B7=B1=E5=BA=A6=E9=93=BE?= =?UTF-8?q?=E6=8E=A5=E5=BC=80=E5=8F=91=EF=BC=8C=E5=85=85=E5=80=BC=E9=A1=B5?= =?UTF-8?q?=E9=9D=A2=E6=8E=92=E5=BA=8F=E5=BC=80=E5=8F=91=EF=BC=8C1.1.2?= =?UTF-8?q?=E6=8F=90=E5=AE=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../AppDelegate/AppDelegate+OpenApp.swift | 38 +++++++++---------- .../AppDelegate/AppDelegate+Thirdparty.swift | 20 ++++++++++ ThimraTV/AppDelegate/SceneDelegate.swift | 1 + ThimraTV/Base/Networking/Base/SPApi.swift | 1 - ThimraTV/Base/WebView/SPWebView.swift | 3 +- .../Class/Player/View/SPPlayBuyView.swift | 35 ++++++++++++----- .../Controller/SPStoreViewController.swift | 33 +++++++++++----- .../Wallet/Model/SPPayTemplateModel.swift | 7 ++++ 8 files changed, 97 insertions(+), 41 deletions(-) diff --git a/ThimraTV/AppDelegate/AppDelegate+OpenApp.swift b/ThimraTV/AppDelegate/AppDelegate+OpenApp.swift index 3da54bc..88f0269 100644 --- a/ThimraTV/AppDelegate/AppDelegate+OpenApp.swift +++ b/ThimraTV/AppDelegate/AppDelegate+OpenApp.swift @@ -9,6 +9,7 @@ import UIKit #if canImport(FacebookCore) import FacebookCore #endif +import AdjustSdk extension SceneDelegate { @@ -24,6 +25,9 @@ extension SceneDelegate { result = ApplicationDelegate.shared.application(UIApplication.shared, open: url, sourceApplication: nil, annotation: [UIApplication.OpenURLOptionsKey.annotation]) #endif if !result { + if let link = ADJDeeplink(deeplink: url) { + Adjust.processDeeplink(link) + } handleOpenAppMessage(webpageURL: url) } @@ -32,15 +36,19 @@ extension SceneDelegate { ///UniversalLink 打开app func scene(_ scene: UIScene, continue userActivity: NSUserActivity) { guard let webpageURL = userActivity.webpageURL else { return } + let result = ApplicationDelegate.shared.application(UIApplication.shared, continue: userActivity) - handleOpenAppMessage(webpageURL: webpageURL) + if !result { + handleOpenAppMessage(webpageURL: webpageURL) + } } } extension SceneDelegate { - static var hasOpenMessage = false + ///是否允许打开消息(每次打开APP只允许打开一次消息) + static var allowOpenMessage = true ///是否需要重试 static var isNeedRetry = false @@ -48,7 +56,7 @@ extension SceneDelegate { func handleOpenAppMessage(webpageURL: URL?) { guard SPNetworkReachabilityManager.manager.isReachable == true, - AppDelegate.haveBeenShownAPNS, +// AppDelegate.haveBeenShownAPNS, SPAPPTool.isAppOpen, SPAPPTool.idfaAuthorizationFinish //idfa授权完成 else { @@ -74,21 +82,15 @@ extension SceneDelegate { } private func _handleOpenAppMessage(webpageURL: URL?) { - if !SPAPPTool.isAppOpen { return } - if Self.hasOpenMessage { return } - DispatchQueue.main.asyncAfter(deadline: .now() + 3) { - Self.hasOpenMessage = false - } - - Self.hasOpenMessage = true + guard SceneDelegate.allowOpenMessage else { return } + SceneDelegate.allowOpenMessage = false //统计用URL - var statUrlStr: String? - var data: [String : Any]? + var statUrlStr: String? = webpageURL?.absoluteString + var data: [String : Any]? = webpageURL?.query?.urlQuryToDictionary() - if let pasteStr = UIPasteboard.general.string, pasteStr.contains("movia") { - UIPasteboard.general.string = nil + if statUrlStr == nil, let pasteStr = UIPasteboard.general.string, pasteStr.contains("movia") { let tempArr = pasteStr.components(separatedBy: "?") let query = tempArr.last @@ -98,13 +100,7 @@ extension SceneDelegate { statUrlStr = pasteStr } } - - - - if data == nil { - data = webpageURL?.query?.urlQuryToDictionary() - statUrlStr = webpageURL?.absoluteString - } + UIPasteboard.general.string = nil if let urlStr = statUrlStr {//上报结果 SPStatAPI.requestStatW2a(data: urlStr) diff --git a/ThimraTV/AppDelegate/AppDelegate+Thirdparty.swift b/ThimraTV/AppDelegate/AppDelegate+Thirdparty.swift index a4b555a..cbe61a5 100644 --- a/ThimraTV/AppDelegate/AppDelegate+Thirdparty.swift +++ b/ThimraTV/AppDelegate/AppDelegate+Thirdparty.swift @@ -22,12 +22,32 @@ extension AppDelegate { registAdjust() ///设置刷新控件的语言 MJRefreshConfig.default.languageCode = SPLocalizedManager.shared.mjLocalizedKey + + AppLinkUtility.fetchDeferredAppLink { url, error in + if let url = url, error != nil { + SPAPPTool.sceneDelegate?.handleOpenAppMessage(webpageURL: url) + } + } } private func registAdjust() { + #if DEBUG + let config = ADJConfig(appToken: "7z38v0rvceww", environment: ADJEnvironmentSandbox) + config?.logLevel = .verbose + #else let config = ADJConfig(appToken: "7z38v0rvceww", environment: ADJEnvironmentProduction) + #endif + + config?.delegate = self Adjust.initSdk(config) } } + +//MARK: -------------- AdjustDelegate -------------- +extension AppDelegate: AdjustDelegate { + func adjustDeferredDeeplinkReceived(_ deeplink: URL?) -> Bool { + return true + } +} diff --git a/ThimraTV/AppDelegate/SceneDelegate.swift b/ThimraTV/AppDelegate/SceneDelegate.swift index 0e529dc..acefb9f 100644 --- a/ThimraTV/AppDelegate/SceneDelegate.swift +++ b/ThimraTV/AppDelegate/SceneDelegate.swift @@ -76,6 +76,7 @@ class SceneDelegate: UIResponder, UIWindowSceneDelegate { // Called as the scene transitions from the foreground to the background. // Use this method to save data, release shared resources, and store enough scene-specific state information // to restore the scene back to its current state. + SceneDelegate.allowOpenMessage = true } diff --git a/ThimraTV/Base/Networking/Base/SPApi.swift b/ThimraTV/Base/Networking/Base/SPApi.swift index b311dae..fbbabc0 100644 --- a/ThimraTV/Base/Networking/Base/SPApi.swift +++ b/ThimraTV/Base/Networking/Base/SPApi.swift @@ -84,7 +84,6 @@ extension SPApi: TargetType { "lang-key" : SPLocalizedManager.shared.currentLocalizedKey,//当前语言 "time-zone" : String.timeZone(), //时区 "app-version" : kSPAPPVersion, -// "device-id" : JXUUID.systemUUID(), //设备id "device-id" : JXUUID.uuid(), //设备id "brand" : "apple", //品牌 "app-name" : kSPAPPBundleIdentifier, diff --git a/ThimraTV/Base/WebView/SPWebView.swift b/ThimraTV/Base/WebView/SPWebView.swift index 90f7e6f..039d215 100644 --- a/ThimraTV/Base/WebView/SPWebView.swift +++ b/ThimraTV/Base/WebView/SPWebView.swift @@ -62,7 +62,8 @@ class SPWebView: WKWebView { func load(urlStr: String) { guard let url = URL(string: urlStr) else { return } - var request = URLRequest(url: url, cachePolicy: .reloadIgnoringLocalCacheData, timeoutInterval: 30) +// var request = URLRequest(url: url, cachePolicy: .reloadIgnoringLocalCacheData, timeoutInterval: 30) + var request = URLRequest(url: url, cachePolicy: .returnCacheDataElseLoad, timeoutInterval: 30) self.load(request) } diff --git a/ThimraTV/Class/Player/View/SPPlayBuyView.swift b/ThimraTV/Class/Player/View/SPPlayBuyView.swift index 8d9b206..dd97fa8 100644 --- a/ThimraTV/Class/Player/View/SPPlayBuyView.swift +++ b/ThimraTV/Class/Player/View/SPPlayBuyView.swift @@ -250,15 +250,17 @@ extension SPPlayBuyView { guard let self = self else { return } self.stackView.removeAllArrangedSubview() - - if let list = templateModel?.list_sub_vip, list.count > 0 { - self.memberView.setDataArr(dataArr: templateModel?.list_sub_vip) - self.stackView.addArrangedSubview(self.memberView) - } - - if let list = templateModel?.list_coins, list.count > 0 { - self.rechargeView.dataArr = templateModel?.list_coins - self.stackView.addArrangedSubview(self.rechargeView) + if let sort = templateModel?.sort, sort.count > 0 { + sort.forEach { + if $0 == .vip { + self.addMemberView(list: templateModel?.list_sub_vip) + } else if $0 == .coin { + self.addCoinView(list: templateModel?.list_coins) + } + } + } else { + self.addMemberView(list: templateModel?.list_sub_vip) + self.addCoinView(list: templateModel?.list_coins) } DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) { @@ -268,5 +270,20 @@ extension SPPlayBuyView { } } + private func addMemberView(list: [SPPayTemplateItem]?) { + if let list = list, list.count > 0 { + self.memberView.setDataArr(dataArr: list) + self.stackView.addArrangedSubview(self.memberView) + } + } + + private func addCoinView(list: [SPPayTemplateItem]?) { + if let list = list, list.count > 0 { + self.rechargeView.dataArr = list + self.stackView.addArrangedSubview(self.rechargeView) + } + } + + } diff --git a/ThimraTV/Class/Wallet/Controller/SPStoreViewController.swift b/ThimraTV/Class/Wallet/Controller/SPStoreViewController.swift index ca34e59..81d4c48 100644 --- a/ThimraTV/Class/Wallet/Controller/SPStoreViewController.swift +++ b/ThimraTV/Class/Wallet/Controller/SPStoreViewController.swift @@ -188,19 +188,34 @@ extension SPStoreViewController { guard let self = self else { return } self.stackView.removeAllArrangedSubview() - if let list = templateModel?.list_sub_vip, list.count > 0 { - self.memberView.setDataArr(dataArr: templateModel?.list_sub_vip) - self.stackView.addArrangedSubview(self.memberView) + if let sort = templateModel?.sort, sort.count > 0 { + sort.forEach { + if $0 == .vip { + self.addMemberView(list: templateModel?.list_sub_vip) + } else if $0 == .coin { + self.addCoinView(list: templateModel?.list_coins) + } + } + } else { + self.addMemberView(list: templateModel?.list_sub_vip) + self.addCoinView(list: templateModel?.list_coins) } - - if let list = templateModel?.list_coins, list.count > 0 { - self.rechargeView.dataArr = templateModel?.list_coins - self.stackView.addArrangedSubview(self.rechargeView) - } - } } + private func addMemberView(list: [SPPayTemplateItem]?) { + if let list = list, list.count > 0 { + self.memberView.setDataArr(dataArr: list) + self.stackView.addArrangedSubview(self.memberView) + } + } + + private func addCoinView(list: [SPPayTemplateItem]?) { + if let list = list, list.count > 0 { + self.rechargeView.dataArr = list + self.stackView.addArrangedSubview(self.rechargeView) + } + } } diff --git a/ThimraTV/Class/Wallet/Model/SPPayTemplateModel.swift b/ThimraTV/Class/Wallet/Model/SPPayTemplateModel.swift index 9ed6801..e20309d 100644 --- a/ThimraTV/Class/Wallet/Model/SPPayTemplateModel.swift +++ b/ThimraTV/Class/Wallet/Model/SPPayTemplateModel.swift @@ -9,7 +9,14 @@ import UIKit import SmartCodable class SPPayTemplateModel: SPModel, SmartCodable { + + enum SortName: String, SmartCaseDefaultable { + case coin = "list_coins" + case vip = "list_sub_vip" + } var list_coins: [SPPayTemplateItem]? var list_sub_vip: [SPPayTemplateItem]? + + var sort: [SortName]? }