티스토리 뷰

iOS10 이전에는 푸시는 서버에서 오는 메세지를 바꿀 수 없었다. 무조건 오는 그대로! 보여줬어야 했다. 

하지만 iOS10부터, (silent notification이 아닌 경우에 한하여) UNNotificationServiceExtension을 만들어서 push notification의 내용을 변경하는것이 가능해졌다. 

 

먼저, 서버에서 푸시를 보낼 때 내용에 mutable-content: 1을 꼭 써줘야 한다. 이걸 써줘야 UNNotificationServiceExtension이 콜 되기 때문!

 

이 extension은 Xcode에서 아예 다른 타겟으로 분리해서 만들어야 하고 (delegate가 아니라 아예 App Extenstion으로 분리되어있기 때문이다), NotificationService class 에 두개의 함수를 채택해야 한다. 

 

1. didReceiveNotificationRequest withContentHandler - 기기에 push가 receive되고, 사용자에게 보여주기 전에 콜 된다. 여기에서 내용을 바꿔주면 된다. 푸시를 아예 안보여주는건 불가능하다. 함수를 콜을 안해줘서 iOS에서 자동으로 일정 시간이 지나면 푸시를 그대로 보여줘 버린다. 이에 대한 내용은 밑에서 더 설명함. 

2. serviceExtensionTimeWillExpire - notifies your application if didReceive withContentHandler did not complete in time 오류시 콜되는 함수 정도?

 

그리고 push가 오는데 그 push를 사용자가 받지 않게 필터링 하는것은 iOS에서는 불가능하다. 안드로이드에서는 푸시를 보여줄지 여부를 앱에서 결정할 수 있는데, iOS는 앱이 아예 꺼져있는 상태에서는 push가 오면 무조건 띄워주긴 해야한다. 앱이 백그라운드와 포그라운드 상태일 때는 핸들링 할 수 있는 함수가 있어서 안보여줄 수도 있다.

 

[백그라운드]

 func application(_: UIApplication, didReceiveRemoteNotification userInfo) 

[포그라운드]

func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification)

 

하지만 아예 방법이 없는건 아닌데, slient notification을 쓰면 앱이 꺼져있을 때도 push를 사용자에게 보여줄 지 핸들링 할 수 있다. 하지만 여러가지 치명적인 단점이 있는데, 한시간에 2-3개 밖에 못보내고 push가 무조건 receive된다는 보장이 없다. 그리고 글의 처음에서 말했듯이, UNNotificationServiceExtension을 사용할 수 없다. 

 

그러면 이 slient notification은 왜 쓰는걸까?? slient notification 자체는, 애초부터 유저에게 푸시를 보여주려는 의도로 만들어진건 아니다. slient notification이 들어오면, iOS가 앱을 자동으로 백그라운드로 띄워준다. 그러면 아까 언급했던 func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification) 이 함수가 콜 될거고, 개발자는 그 사이에 앱이 content를 미리 다운받거나, 정보를 동기화 시키거나, 하는 등의 액션을 미리 처리해둘 수 있는 것이다. 애초부터 푸시를 위한 함수가 아니라서, 내용을 바꾸거나, 하는 등의 액션은 불가능 한 것이다. 

 

[공식 문서]

developer.apple.com/documentation/usernotifications/unnotificationserviceextension

[참고 자료]

stackoverflow.com/questions/43499834/is-it-possible-to-prevent-a-remote-notification-from-being-displayed

stackoverflow.com/questions/36694963/what-is-silent-push-notification-when-does-the-device-receive-it

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/10   »
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 31
글 보관함