90 lines
2.6 KiB
Swift
90 lines
2.6 KiB
Swift
//
|
|
// AppDelegate+Open.swift
|
|
// Veloria
|
|
//
|
|
// Created by 湖南秦九 on 2025/6/4.
|
|
//
|
|
|
|
import UIKit
|
|
import FacebookCore
|
|
|
|
extension SceneDelegate {
|
|
|
|
func scene(_ scene: UIScene, openURLContexts URLContexts: Set<UIOpenURLContext>) {
|
|
guard let url = URLContexts.first?.url else {
|
|
return
|
|
}
|
|
|
|
//facebook
|
|
var result = ApplicationDelegate.shared.application(UIApplication.shared, open: url, sourceApplication: nil, annotation: [UIApplication.OpenURLOptionsKey.annotation])
|
|
|
|
if !result {
|
|
vp_handleOpenAppMessage(webpageURL: url)
|
|
}
|
|
}
|
|
|
|
func scene(_ scene: UIScene, continue userActivity: NSUserActivity) {
|
|
guard let webpageURL = userActivity.webpageURL else { return }
|
|
vp_handleOpenAppMessage(webpageURL: webpageURL)
|
|
}
|
|
|
|
}
|
|
|
|
extension SceneDelegate {
|
|
|
|
static var hasOpenMessage = false
|
|
|
|
func vp_handleOpenAppMessage(webpageURL: URL?) {
|
|
guard VPNetworkReachabilityManager.manager.isReachable == true else { return }
|
|
|
|
|
|
|
|
DispatchQueue.main.asyncAfter(deadline: .now() + 1) {
|
|
self._handleOpenAppMessage(webpageURL: webpageURL)
|
|
}
|
|
|
|
}
|
|
|
|
private func _handleOpenAppMessage(webpageURL: URL?) {
|
|
if Self.hasOpenMessage { return }
|
|
|
|
Self.hasOpenMessage = true
|
|
|
|
DispatchQueue.main.asyncAfter(deadline: .now() + 2) {
|
|
Self.hasOpenMessage = false
|
|
}
|
|
|
|
//统计用URL
|
|
var statUrlStr: String? = webpageURL?.absoluteString
|
|
var data: [String : Any]? = webpageURL?.query?.vp_urlQuryToDictionary()
|
|
|
|
if let pasteStr = UIPasteboard.general.string {
|
|
UIPasteboard.general.string = nil
|
|
let tempArr = pasteStr.components(separatedBy: "?")
|
|
let query = tempArr.last
|
|
|
|
let tempData = query?.vp_urlQuryToDictionary()
|
|
if tempData?["short_play_id"] != nil {
|
|
data = tempData
|
|
statUrlStr = pasteStr
|
|
}
|
|
}
|
|
|
|
if let urlStr = statUrlStr {//上报结果
|
|
VPStatAPI.requestStatW2a(data: urlStr)
|
|
}
|
|
|
|
|
|
guard let data = data else { return }
|
|
guard let model = VPOpenAppModel.deserialize(from: data) else { return }
|
|
guard let shortPlayId = model.short_play_id, shortPlayId.count > 0 else { return }
|
|
|
|
|
|
let vc = VPDetailPlayerViewController()
|
|
vc.shortPlayId = shortPlayId
|
|
VPAppTool.topViewController?.navigationController?.pushViewController(vc, animated: true)
|
|
|
|
}
|
|
|
|
}
|