BeeReel/BeeReel/Delegate/SceneDelegate+Open.swift
2025-07-30 11:29:42 +08:00

103 lines
3.1 KiB
Swift

//
// SceneDelegate+Open.swift
// BeeReel
//
// Created by 鸿 on 2025/7/28.
//
import AdjustSdk
extension SceneDelegate {
func scene(_ scene: UIScene, openURLContexts URLContexts: Set<UIOpenURLContext>) {
guard let url = URLContexts.first?.url else {
return
}
br_handleOpenAppMessage(webpageURL: url)
}
func scene(_ scene: UIScene, continue userActivity: NSUserActivity) {
guard let webpageURL = userActivity.webpageURL else { return }
br_handleOpenAppMessage(webpageURL: webpageURL)
}
}
extension SceneDelegate {
///(APP)
static var allowOpenMessage = true
///
static var isNeedRetry = false
private static var webpageURL: URL?
func br_handleOpenAppMessage(webpageURL: URL?) {
guard BRNetworkStatusManager.manager.isReachable == true, //
AppDelegate.haveBeenShownAPNS, //
self.isOpenApp, //APP
BRAppTool.idfaAuthorizationFinish
else {
if let webpageURL = webpageURL {
SceneDelegate.webpageURL = webpageURL
}
Self.isNeedRetry = true
return
}
Self.isNeedRetry = false
SceneDelegate.webpageURL = nil
DispatchQueue.main.asyncAfter(deadline: .now() + 0.2) {
self._handleOpenAppMessage(webpageURL: webpageURL)
}
}
private func _handleOpenAppMessage(webpageURL: URL?) {
guard SceneDelegate.allowOpenMessage else { return }
SceneDelegate.allowOpenMessage = false
//URL
var statUrlStr: String? = webpageURL?.absoluteString
var data: [String : Any]? = webpageURL?.query?.br_urlQuryToDictionary()
if statUrlStr == nil, let pasteStr = UIPasteboard.general.string, pasteStr.contains("beereel") {
let tempArr = pasteStr.components(separatedBy: "?")
let query = tempArr.last
let tempData = query?.br_urlQuryToDictionary()
if tempData?["short_play_id"] != nil {
data = tempData
statUrlStr = pasteStr
}
}
UIPasteboard.general.string = nil
if let urlStr = statUrlStr {//
BRStatAPI.requestStatW2a(data: urlStr)
}
guard let data = data else { return }
guard let model = BROpenAppModel.deserialize(from: data) else { return }
guard let shortPlayId = model.short_play_id, shortPlayId.count > 0 else { return }
let vc = BRVideoDetailViewController()
vc.shortPlayId = shortPlayId
BRAppTool.topViewController?.navigationController?.pushViewController(vc, animated: true)
}
///
func br_retryHandleOpenAppMessage() {
guard Self.isNeedRetry else { return }
br_handleOpenAppMessage(webpageURL: SceneDelegate.webpageURL)
}
}