티스토리 뷰

iOS

iOS12 ) Notification

Zedd0202 2018. 9. 13. 14:33
반응형

안녕하세요 :) Zedd입니다.

오늘은...Notification쪽 보다가

 


이런게 있길래요...ㅎ

베타라고 적혀있으면,,괜히,,,한번,,,써보고싶은것이,,,,iOS개발자의 마음,,,,아니겠읍니까,,,

이번에 iOS12에서 Notification이 엄청 많이(?) 바뀐건 아시죠!?!?


출처 : https://appletoolbox.com/2018/06/ios-12-notifications-features/


그래서인지 더 써보고싶더라구욥..!!

그럼 써보러갑시다.

반드시 Xcode10베타 (지금은 베타임) 아무튼 Xcode 10을 준비해주세요. 


예전에 Notification에 대한 글을 하나 썼었는데요, 

iOS10 ) 왕초보를 위한 UserNotifications사용해보기 에서 간단한 local notification을 만들어보는 예제가 들어있으니 참고하세요 :)


그리고 제가 위 글에 쓴 예제를 이번에 걍 쓸건데요..!! github에 가서 클론받아주세요 XD...




와 대문자;;;;

2017년 8월에 무슨일이 있었지..??? 부끄럽네오

암튼 실행해봅시다. 

실행시키면 처음으로 이게 뜰텐데요, 당연히 Allow해주세요.

그리고 누르고 5초뒤에 정상적으로 local notification이 오는 것을 볼 수 있네요.

iOS12의 꽃....Notification grouping을 만들어 봅시다.

그럼 일단 "여러개"가 와야겠죠???



저 buttonPressed안에 코드들을 for문으로 한번 감싸주시고, 



저 identifier를 매번 다르게 설정 할 수 있도록 지정해주세요.


그리고 실행하고, 버튼을 눌러주세요.

저는 버튼을 누르고 잠금 화면으로 갈건데, 시뮬레이터에서 잠금 화면으로 가는 단축키는 Command+L입니다.

5초 뒤에,



짜잔~ 이렇게 Notification grouping이 성공적으로 되었습니닷..!!

Notification Grouping은 그냥..한번..이렇게..해봤고..

진짜 제가 오늘 해보고싶은



이걸 해볼게요. 

지금 코드에


UNUserNotificationCenter.current().requestAuthorization(options: [.alert,.sound,.badge], completionHandler: { (didAllow, error) in

})



이렇게 되어있죠? 이것이 바로, UNAuthorizationOptions인데요, 여기 옵션이 몇개 추가된거에요.



와 어제까지만해도 베타라고 붙어있었는데..GM이 나오면서 베타가 쏙 사라졌네욥..!!!!

암튼 여기에 하나씩 추가해봅시다. carPlay는 넘어갈게요



 criticalAlert


 criticalAlert는 말그대로 critical alert를 위해 sound를 play할 수 있는 기능이 들어있어요. 

criticalAlert의 가장 큰 특징 중 하나는, 음소거 스위치(mute switch)와 방해금지모드(Do Not Disturb)를 무시합니다.

시스템은 디바이스의 음소거 또는 방해금지 설정에 관계없이 critical Alert를 재생합니다. 

사용자 정의 사운드 및 볼륨을 지정할 수 있으며 

critical Alert는 Apple에서 발행한 special entitlement이 필요합니다. 



......

실험을 못해보겠네요. ㅇㄴ


 


~~.requestAuthorization(options: [.alert,.sound,.badge, .criticalAlert], completionHandler: { (didAllow, error) in

})



이렇게 추가해주면




이런 권한 요청 팝업이 뜬다고 합니다 :)



let content = UNMutableNotificationContent()


content.sound = UNNotificationSound.defaultCritical

content.sound = UNNotificationSound.defaultCriticalSound(withAudioVolume: 1.0)


위에서 "사용자 정의 사운드 및 볼륨을 지정할 수 있으며"라고 그랬죠? 이렇게 defaultSound를 sound로 지정할 수도 있고, 


let content = UNMutableNotificationContent()


content.sound = UNNotificationSound.criticalSoundNamed("Zedd")

            content.sound = UNNotificationSound.criticalSoundNamed("Zedd", withAudioVolume: 1.0)


이렇게 내가 원하는 사운드, 볼륨을 줄 수 있답니다. 

audioVolume은 0.0 부터 1.0까지에요. 


하지만..위에서 말했다시피 이 기능은 남용 될 수 있는 가능성이 있기 때문에, 이 critical Alert를 사용하기 위해서는, Apple에게 요청해야만 얻을 수 있는 특별한 custom entitlement가 필요해요. 양식을 통해 어떤 종류의 앱인지, 뭐 때문에 critical Alert가 필요한지 설명해야한다고 해요. Apple이 이 기능을 사용 할 수 있는(?) 권장하는?..앱의 종류는


- 의료 및 건강관련 앱

- 주택 보안

- 공공안전(예: 일기 예보 경고)


일반적으로 critical alert는 사용자가 어떤 종류의 행동을 "즉각" 취해야하는 내용이어야 하며, 그렇지 않으면 자신이나 타인의 건강(생명)이 위험에 처할 수도 있는 그런 상황의 앱에 사용해야한다고 합니다.





 providesAppNotificationSettings


시스템이 in-app Notification설정을 위한 버튼을 표시해야함을 나타내는 옵션이에요.

뭔말인지..잘 모르겠지만 일단 뭔지 봅시다.


providesAppNotificationSettings을 추가 안했을때. 



notification이 오고 왼쪽으로 스와이프 하면 메뉴 3개를 볼 수 있는데요, 여기서 Manage에 들어가봅니다.



그럼 이런 action sheet가 뜨는데, 여기서 Turn Off를 누르면



이런 action sheet가 뜹니다.

자, 메뉴가 딱 한개 있죠?


이제 providesAppNotificationSettings옵션을 줬을 때를 봅시다.

위 과정을 똑같이 따라하면..!!


이렇게 이번엔 메뉴가 2개가 나옵니다. 2번째꺼가 생긴거죠.

Configure in "앱이름"이 나오게 되는데요, 이걸 클릭하면, 








아무 반응도 없습니다..!!!

자, 이 providesAppNotificationSettings의 정의를 다시 한번 보면

"시스템이 in-app Notification설정을 위한 버튼을 표시해야함을 나타내는 옵션"이에요.

in-app Notification설정..!!! 

막 어떤 앱에 환경설정 같은데 가면, Notification을 받을건지 안받을 건지 설정할 수 있잖아요? 그런거를 위한...옵션 같은 느낌입니다.


위 Configure in "앱이름"을 누르고 어떤 반응을 원한다면, UNUserNotificationCenterDelegate메소드를 구현해주셔야합니다. 



func userNotificationCenter(_ center: UNUserNotificationCenter, openSettingsFor notification: UNNotification?) {

        

        let settingsViewController = UIViewController()

        settingsViewController.view.backgroundColor = .gray

        self.present(settingsViewController, animated: true, completion: nil)

        

    }


여기서 본인의 Setting ViewController를 띄워주시면 됩니다. 저는 그냥 이렇게만 해줬는데, 자신의 Setting ViewController를 띄워주도록 여기서 처리하시면 됩니다. 

물논...UNUserNotificationCenterDelegate를 준수하고, 


UNUserNotificationCenter.current().delegate = self


는 당연히 해줘야겠죠...

자, 이렇게 하고 다시 해볼까요? 



쨘 이렇게 제가 원하는 화면(앱에서는 Setting화면)이 떴네요.

 providesAppNotificationSettings를 켜면 한가지 더 변하는게 있는데요, 


환경설정. 저는 시뮬레이터에요!!



밑에 가면 제 앱이 있는데요, 누르고 Notification에 들어가면



요 버튼이 생겼는데요, providesAppNotificationSettings옵션을 추가해주지 않았을때는 뜨지않는답니다.



그쵸 없죠



암튼 눌러보면..!!


아까 우리가 구현해줬던 Delegate메소드가 호출이 되면서






제가 호출해줬던 ViewController가 띄워지게 됩니다.

싱기싱기


● provisional

정의는 "noninterrupting notifications을 알림센터에 게시할 수 있는 기능"이라고 하는데요(noninterrupting notifications을 번역하면 방해받지않는 알림..?)


이것도 일단 예제를 봅시다.


일단 우리 시뮬레이터에 지금, 



이렇게 우리(저 혼자)가 지금 테스트 해보고 있는 앱이 있는데요, 일단 지워주세요!!!!!!


자, 그리고 이제 시작해봅시다. 

provisional을 추가 안하고 먼저 해볼게요. 그러면



이런화면이 떠요 맞죠?!!?

일단 권한을 얻어야 하니까요.

그런데.....provisional을 추가하면


권한을 요청하는 alert가 뜨지 않습니다. 옵션에 alert가 있음에도 불구하구요!



엥;;;;;;;이게 어떻게 된 일;;;

일단 움짤을 같이 봅시다.

!!!!!!!!!!

신기하져ㅛ!!!!!!!!!!!!!!

여기서 정의를 다시 한번 보면,

"noninterrupting notifications을 알림센터(Notification Center)에 게시할 수 있는기능

정말 정의 그대로...우리의 notification이 알림센터에만 와있네요. Lock Screen에서도 Notification은 오지 않는답니다.

싱기싱기


사실 아까, 




여기서 Turn Off..위에 Deliver Quietly가 있죠? 이걸 누르면 코드에 provisional옵션이 들어있지않아도, 사용자는 provisional이 추가된것 처럼 똑같이 Notification을 알림센터에만 오도록 지정할 수 있답니다. 


이렇게 제가 써보고시픙ㄴ....이제 베타가 아닌.......UNAuthorizationOptions들을 써봤는데요, ㄹㅎㅎㅎㅎ잼따

그리고 추가적으로..!!! 알아두시면 좋을 거 하나 더 알아보겠습니당

Notification Grouping을 보면,



저기를 커스텀? 암튼 저기를 조작 할 수 있어요.


바로



이렇게요! 앞에 숫자가 summaryArgumentCount이고, from뒤가 summaryArgument입니다.

 


let content = UNMutableNotificationContent()


....


content.summaryArgument = "Alan Walker"

content.summaryArgumentCount = 40


저는 값을 이렇게 준건데요, Alan Walker가 잘 들어간건 알겠는데, summaryArgumentCount를 40으로 줬는데 왜 160인지!!!! 궁금하시죠!!


저희가 for문을 총 5번 돌고, 한 Notification당 40을 가져가는 것입니다.

처음에는 딱 하나의 Notification이 보이니까 (40*5 - 40(처음에 보이는 Notifcation의  summaryArgumentCount))을 해준값, 즉 160이 뜨게 되는 것이죠 :)

Alan Walker로 부터 온 Notification이 160개가 "더" 있다!!라는 것!!!


이렇게 iOS12에서 바뀌는 Notification들의 여러가지 옵션들을 공부해보았는데, 도움이 되었길 바래요 XD

틀린 부분이 있다면 댓글이나 PC화면 오른쪽 하단에서 볼 수 있는 채널서비스를 이용해서 메세지 주시면 감사하겠습니다 :)


잉 GitHub에 올려놓고 보니 뭔가가 잘못됐네요.  iOS10 ) 왕초보를 위한 UserNotifications사용해보기 에서도 이 github주소를 쓰는데..분기처리 해주기 귀찮아서 그냥 Target을 12.0으로 올려서 해서 올려버림..하핫!!!!~!! 사실 뭐 특별한 기능은 없으니...아무튼 참고하시길 바랍니다. 

반응형

'iOS' 카테고리의 다른 글

iOS ) OptimizationTips (Writing High-Performance Swift Code)  (6) 2018.09.20
iOS 12 달라진점!!  (2) 2018.09.18
iOS ) Decodable  (2) 2018.08.29
iOS ) NavigationBar  (3) 2018.08.19
iOS 12 Beta 설치 방법  (0) 2018.07.31