Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- UICollectionView
- UITextView
- combine
- uitableview
- Clean Code
- HIG
- Refactoring
- swift documentation
- ribs
- MVVM
- SWIFT
- Human interface guide
- ios
- clean architecture
- 클린 코드
- 애니메이션
- map
- collectionview
- 스위프트
- 리펙토링
- 리펙터링
- Protocol
- swiftUI
- uiscrollview
- 리팩토링
- tableView
- Observable
- rxswift
- Xcode
- RxCocoa
Archives
- Today
- Total
김종권의 iOS 앱 개발 알아가기
[iOS - swift] 앱 푸시 설정 상태 확인 방법 (.authorized, .denied, .notDetermined, .provisional, .ephemeral) 본문
iOS 응용 (swift)
[iOS - swift] 앱 푸시 설정 상태 확인 방법 (.authorized, .denied, .notDetermined, .provisional, .ephemeral)
jake-kim 2022. 8. 10. 01:31푸시 설정
- 설정앱에서 푸시 세팅한 것을 코드에서 알아내는 방법?
- 푸시 설정을 바꾸었을때는 바로 알 수 없고, 해당 앱의 foreground에 진입했을때 확인이 가능
- AppDelegate에서 NotificationCenter를 통해 foreground 상태를 구독하고, 이 안에서 체크
* NotificationCenter 개념은 이전 포스팅 글 참고
@main
class AppDelegate: UIResponder, UIApplicationDelegate {
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
NotificationCenter.default.addObserver(
self,
selector: #selector(checkNotificationSetting),
name: UIApplication.willEnterForegroundNotification,
object: nil
)
return true
}
@objc private func checkNotificationSetting() {
}
}
- 푸시 세팅 확인 방법은UNUserNotificationCenter.current() 인스턴스를 사용
@objc private func checkNotificationSetting() {
UNUserNotificationCenter.current()
.getNotificationSettings { permission in
switch permission.authorizationStatus {
// TODO: 분류
}
}
- permission 상태는 5가지가 존재
@objc private func checkNotificationSetting() {
UNUserNotificationCenter.current()
.getNotificationSettings { permission in
switch permission.authorizationStatus {
case .authorized:
print("푸시 수신 동의")
case .denied:
print("푸시 수신 거부")
case .notDetermined:
print("한 번 허용 누른 경우")
case .provisional:
print("푸시 수신 임시 중단")
case .ephemeral:
// @available(iOS 14.0, *)
print("푸시 설정이 App Clip에 대해서만 부분적으로 동의한 경우")
@unknown default:
print("Unknow Status")
}
}
}
- .authorized: 동의
- .denied: 거부
- .notDetermined: `한번 허용`이나 `나중에 선택` 같은 옵션을 선택하고 앱을 종료했다가 다시 킨 경우, 아래처럼 세팅앱에서는 다음번에 묻기로 되어있음
(다시 시스템 팝업으로 동의할건지 물어봄)
- .provisional(임시의): 소리나 배너 없이 사용자에게 알려주는 푸시
- 아래 사진은 provisional push를 의미
- .empemeral(일시적인): App Clip에서 사용하는 푸시이며, 사용자에게 프롬프트 없이 자동으로 활성화되지만, 8시간 후에 만료
(푸시에는 아래처럼 사용자에게 비활성화할 수 있는 옵션이 있다는 메시지 포함)
* 참고
https://onesignal.com/blog/ios-14-and-macos-big-sur-changes-that-affect-push-notifications/
https://support.discord.com/hc/ko/articles/4404980647831--iOS-Provisional-Push-Notifications
https://documentation.onesignal.com/docs/ios-provisional-push-notifications
'iOS 응용 (swift)' 카테고리의 다른 글
Comments