// // SPWebViewController+ScriptMessage.swift // MoviaBox // // Created by Overseas on 2025/4/24. // import UIKit import WebKit typealias SPWebViewMessageName = String ///APP交互 let WebMessageAPP: SPWebViewMessageName = "js2app" ///打开反馈列表 let WebMessageOpenFeedbackList: SPWebViewMessageName = "openFeedbackList" ///打开反馈详情 let WebMessageOpenFeedbackDetail: SPWebViewMessageName = "openFeedbackDetail" ///打开相册 let WebMessageOpenPhotoPicker: SPWebViewMessageName = "openPhotoPicker" extension SPWebViewController { func _webViewUserContentController(didReceive message: WKScriptMessage) { let name = message.name let body = message.body spLog(message: body) if name == WebMessageOpenFeedbackList { let vc = SPCampaignWebViewController() vc.urlStr = SPFeedBackListWebUrl self.navigationController?.pushViewController(vc, animated: true) } else if name == WebMessageOpenFeedbackDetail { guard let body = message.body as? [String : Any] else { return } guard let id = body["id"] as? Int else { return } let vc = SPCampaignWebViewController() vc.id = "\(id)" vc.urlStr = SPFeedBackDetailWebUrl self.navigationController?.pushViewController(vc, animated: true) } else if name == WebMessageOpenPhotoPicker { let vc = SPImagePickerManager.createImagePicker(delegate: self) self.present(vc, animated: true) } else if name == WebMessageAPP { guard let body = message.body as? [String : Any] else { return } guard let model = SPWebMessageModel.deserialize(from: body) else { return } let type = model.type let data = model.data if type == "login" {//登录 SPLoginManager.manager.openLoginVC() } else if type == "open_notify" {//打开通知 openNotify() } else if type == "watch_video" { //去看剧 let vc = SPPlayerDetailViewController() vc.shortPlayId = data?.short_play_id vc.activityId = data?.activity_id self.navigationController?.pushViewController(vc, animated: true) } else { guard let urlStr = data?.link else { return } guard let url = URL(string: urlStr) else { return } if UIApplication.shared.canOpenURL(url) { UIApplication.shared.open(url) } } } } } extension SPWebViewController { ///打开系统通知 func openNotify() { UNUserNotificationCenter.current().getNotificationSettings { settings in DispatchQueue.main.async { [weak self] in guard let self = self else { return } if settings.authorizationStatus != .authorized {//未开启通知打开设置 SPAPPTool.openApnsSetting() } else {//开启通知上报结果 SPRewardsAPI.requestUploadOpenNotify(completer: nil) } } } } } //MARK: -------------- TZImagePickerControllerDelegate -------------- extension SPWebViewController: TZImagePickerControllerDelegate { func imagePickerController(_ picker: TZImagePickerController!, didFinishPickingPhotos photos: [UIImage]!, sourceAssets assets: [Any]!, isSelectOriginalPhoto: Bool) { guard let image = photos.first else { return } guard let imageData = image.jpegData(compressionQuality: 0.8) else { return } let imageDataStr = imageData.base64EncodedString(options: .endLineWithCarriageReturn) let js = "uploadConvertImage('\(imageDataStr)')" self.webView.evaluateJavaScript(js) } }