103 lines
3.1 KiB
Swift
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)
|
|
}
|
|
}
|