48 行
1.8 KiB
Swift
48 行
1.8 KiB
Swift
|
|
import UIKit
|
||
|
|
import XuqmCoreSDK
|
||
|
|
import XuqmWebViewSDK
|
||
|
|
import XuqmPushSDK
|
||
|
|
|
||
|
|
final class AppDelegate: NSObject, UIApplicationDelegate, PushMessageDelegate, @unchecked Sendable {
|
||
|
|
|
||
|
|
func application(
|
||
|
|
_ application: UIApplication,
|
||
|
|
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
|
||
|
|
) -> Bool {
|
||
|
|
PushSDK.shared.delegate = self
|
||
|
|
return true
|
||
|
|
}
|
||
|
|
|
||
|
|
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
|
||
|
|
XuqmSDK.shared.registerDeviceToken(deviceToken)
|
||
|
|
}
|
||
|
|
|
||
|
|
func application(_ application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: Error) {
|
||
|
|
print("[Push] Failed to register for remote notifications: \(error)")
|
||
|
|
}
|
||
|
|
|
||
|
|
// MARK: - PushMessageDelegate
|
||
|
|
|
||
|
|
func pushSDK(_ sdk: PushSDK, didReceiveMessage message: PushMessage) {
|
||
|
|
// Foreground notification: post to JS if WebView is active
|
||
|
|
if let payload = try? JSONSerialization.data(withJSONObject: message.payload),
|
||
|
|
let json = String(data: payload, encoding: .utf8) {
|
||
|
|
let js = "window.SZYX_YWX_WebViewBridge&&window.SZYX_YWX_WebViewBridge.onPushMessage(\(json))"
|
||
|
|
Task { @MainActor in
|
||
|
|
XWebViewBridge.shared.postMessageToWeb(js)
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
func pushSDK(_ sdk: PushSDK, didTapNotification message: PushMessage) {
|
||
|
|
// User tapped notification — navigate to relevant page via JS bridge
|
||
|
|
if let payload = try? JSONSerialization.data(withJSONObject: message.payload),
|
||
|
|
let json = String(data: payload, encoding: .utf8) {
|
||
|
|
let js = "window.SZYX_YWX_WebViewBridge&&window.SZYX_YWX_WebViewBridge.onPushTapped(\(json))"
|
||
|
|
Task { @MainActor in
|
||
|
|
XWebViewBridge.shared.postMessageToWeb(js)
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|