YwxMobileApp-iOS/Yiwangxin/PushNotificationHandler.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)
}
}
}
}