// // AppDelegate+OpenApp.swift // MoviaBox // // Created by 佳尔 on 2025/4/25. // import UIKit #if canImport(FacebookCore) import FacebookCore #endif extension SceneDelegate { ///URL打开APP func scene(_ scene: UIScene, openURLContexts URLContexts: Set) { guard let url = URLContexts.first?.url else { return } #if canImport(FacebookCore) ApplicationDelegate.shared.application(UIApplication.shared, open: url, sourceApplication: nil, annotation: [UIApplication.OpenURLOptionsKey.annotation]) #endif } ///UniversalLink 打开app func scene(_ scene: UIScene, continue userActivity: NSUserActivity) { guard let webpageURL = userActivity.webpageURL else { return } handleOpenAppMessage(webpageURL: webpageURL) } } extension SceneDelegate { static var hasOpenMessage = false func handleOpenAppMessage(webpageURL: URL?) { //统计用URL var statUrlStr: String? var data: [String : Any]? if let pasteStr = UIPasteboard.general.string { UIPasteboard.general.string = nil let tempArr = pasteStr.components(separatedBy: "?") let query = tempArr.last let tempData = query?.urlQuryToDictionary() if tempData?["short_play_id"] != nil { data = tempData statUrlStr = pasteStr } } if Self.hasOpenMessage { return } DispatchQueue.main.asyncAfter(deadline: .now() + 1) { Self.hasOpenMessage = false } Self.hasOpenMessage = true if data == nil { data = webpageURL?.query?.urlQuryToDictionary() statUrlStr = webpageURL?.absoluteString } if let urlStr = statUrlStr {//上报结果 SPStatAPI.requestStatW2a(data: urlStr) } guard let data = data else { return } guard let model = SPOpenAppModel.deserialize(from: data) else { return } guard let shortPlayId = model.short_play_id, shortPlayId.count > 0 else { return } let vc = SPPlayerDetailViewController() vc.shortPlayId = shortPlayId SPAPPTool.topViewController()?.navigationController?.pushViewController(vc, animated: true) } }