-
iOS Swift Notification 권한 확인하는 방법Language/iOS,AOS 2024. 7. 10. 16:50
iOS 단말기에서 알림설정 정보를 가져와서 표시해주자.
JavaScript
common.js
class Common { ... static isNotificationAuthorization() { if (Util.Browser.isAndroidApp()) { } else if (Util.Browser.isIosApp()) { window.isNotificationAuthorization = (jsonData) => { console.log('jsonData : ', jsonData); if (jsonData['isAllowedNotification'] === true) { console.log('AUTH OK'); } else { console.log('AUTH NO'); } }; const message = { action: 'isNotificationAuthorization', callback: 'window.isNotificationAuthorization', }; window.webkit.messageHandlers.IosBridge1.postMessage(message); } } ... } export default Common;
호출
Common.isNotificationAuthorization();
Swift (네이티브)MainViewController
// MARK: - iOS Bridge // 웹 액션 정의 : WebAction을 구분하는데 사용되는 타입 enum WebAction: String { ... case isNotificationAuthorization ... } extension MainViewController: WKScriptMessageHandler { func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) { guard message.name == IOS_BRIDGE_NAME, let messageBody = message.body as? [String: Any], let action = messageBody["action"] as? String else { return } let webAction = WebAction(rawValue: action) Utils.Log("@@@@@@@@@@@@@@@@@@@@@@@ \(action)") switch webAction { ... case .isNotificationAuthorization: // 콜백 함수 실행 guard let callback = messageBody["callback"] as? String else { return } Utils.isNotificationAuthorization(completion: { result in if result { // Utils.Log("권한이 있습니다.") let jsonData: [String: Any] = [ "isAllowedNotification": true ] if let jsonString = Utils.convertDictionaryToJSONString(dictionary: jsonData) { self.executeJavasScript(wKWeb: self.getActiveWkWebView(), callback: "\(callback)(\(jsonString));") } } else { // Utils.Log("권한이 없습니다.") let jsonData: [String: Any] = [ "isAllowedNotification": false ] if let jsonString = Utils.convertDictionaryToJSONString(dictionary: jsonData) { self.executeJavasScript(wKWeb: self.getActiveWkWebView(), callback: "\(callback)(\(jsonString));") } } }) .... } }
Utils
import Foundation import UIKit import WebKit import UserNotifications class Utils: NSObject { ... // 알림 권한 상태를 확인하는 함수 static func checkNotificationAuthorizationStatus(completion: @escaping (UNAuthorizationStatus) -> Void) { UNUserNotificationCenter.current().getNotificationSettings { settings in DispatchQueue.main.async { completion(settings.authorizationStatus) } } } static func isNotificationAuthorization(completion: @escaping (Bool) -> Void) { checkNotificationAuthorizationStatus { status in switch status { case .authorized: Utils.Log("알림 권한이 허용되었습니다.") completion(true) case .denied: Utils.Log("알림 권한이 거부되었습니다.") completion(false) case .notDetermined: Utils.Log("아직 알림 권한을 설정하지 않았습니다.") completion(false) case .provisional: Utils.Log("알림 권한이 임시로 허용되었습니다.") completion(false) case .ephemeral: Utils.Log("임시 알림 권한이 허용되었습니다.") completion(false) @unknown default: Utils.Log("Unknown case") completion(false) } } } }
iOS 단말기
설정 > 알림 > 알림 허용을 변경하면서 테스트 진행
'Language > iOS,AOS' 카테고리의 다른 글
iOS/Swift WKWebView 쿠키 공유하기 (2) 2024.09.23 iOS에서 코코아팟 버전 업데이트 (0) 2024.09.23 네이티브 & React 배포 버전 이슈 처리 (0) 2024.07.10 Swift 외부 브라우저(사파리)로 링크 열기 (0) 2024.07.10 Xcode에서 archive 키체인 로그인 오류 (0) 2024.07.01