ThimraTV/MoviaBox/AppDelegate/AppDelegate+OpenApp.swift
2025-06-17 09:40:35 +08:00

123 lines
3.5 KiB
Swift

//
// AppDelegate+OpenApp.swift
// MoviaBox
//
// Created by on 2025/4/25.
//
import UIKit
#if canImport(FacebookCore)
import FacebookCore
#endif
extension SceneDelegate {
///URLAPP
func scene(_ scene: UIScene, openURLContexts URLContexts: Set<UIOpenURLContext>) {
guard let url = URLContexts.first?.url else {
return
}
var result = false
#if canImport(FacebookCore)
result = ApplicationDelegate.shared.application(UIApplication.shared, open: url, sourceApplication: nil, annotation: [UIApplication.OpenURLOptionsKey.annotation])
#endif
if !result {
handleOpenAppMessage(webpageURL: url)
}
}
///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
///
static var isNeedRetry = false
private static var webpageURL: URL?
func handleOpenAppMessage(webpageURL: URL?) {
guard SPNetworkReachabilityManager.manager.isReachable == true, AppDelegate.haveBeenShownAPNS, SPAPPTool.isAppOpen else {
if let webpageURL = webpageURL {
SceneDelegate.webpageURL = webpageURL
}
Self.isNeedRetry = true
return
}
Self.isNeedRetry = false
SceneDelegate.webpageURL = nil
DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) {
self._handleOpenAppMessage(webpageURL: webpageURL)
}
}
///
func retryHandleOpenAppMessage() {
guard Self.isNeedRetry else { return }
handleOpenAppMessage(webpageURL: SceneDelegate.webpageURL)
}
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
//URL
var statUrlStr: String?
var data: [String : Any]?
if let pasteStr = UIPasteboard.general.string, pasteStr.contains("movia") {
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 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)
}
}