- iOS Notification의 종류
- Silent Notifications
- 말그대로 사용자에게 UI를 보여주지 않음
- 백그라운드에서 앱을 리프레시 하기 위한 도구
- content-available 플래그를 키면 앱에서 이에 반응할 수 있다.
- 기본적으로 활성화되어 있고, 사용자에게 권한을 묻지도 않으나, 사용자가 이를 명시적으로 끌 수 있기 때문에 해당 피쳐에 의존적이게 되면 안된다.
- 시스템 상황에 따라서(배터리 상태, 현재 시간 등) 전달되는 시간이 다를 수 있다. -> Best Effort
- User Notifications
- UI가 포함된 알림
- 사용자에게 권한을 받아야 함
- Remote Notifiaction과 Local Notification으로 나눠짐
- Remote
- 알림을 터치해야지만, 앱이 이 노티피케이션을 처리할 수 있는 기회를 얻게 됨
- content-available 플래그를 설정하면, silent notification처럼 미리 데이터를 받아놓을 수 있다.
- Local
- 앱에서 스케쥴링 하는 Notification
- 시간 혹은 장소 기반으로 설정 가능
- Actions
- 노티피케이션 창에서 상호작용을 수행할 수 있게 만듦
- 카테고리별로 다른 액션 지정 가능
- Text input - iOS 9부터
let replyAction = UIMutableUserNotificationAction()
replyAction.title = "Reply"
replyAction.identifier = "comment-reply"
replyAction.activationMode = .Background
replyAction.requiresAuthentication = false
replyAction.behavior = .TextInput
let category = UIMutableUserNotificationCategory()
category.identifier = "reply"
category.actions = [ replyAction ]
let settings = UIUserNotificationSettings(forTypes: [.Sound, .Alert ], categories: [ category ])
// 사용자가 권한 알림을 받는 지점
UIApplication.sharedApplication().registerUserNotificationSettings(settings)
protocol UIApplicationDelegate {
func application(application: UIApplication,
handleActionWithIdentifier identifier : String?
forLocalNotification notification: UILocalNotification,
withResponseInfo responseInfo: [ NSObject: AnyObject],
completionHandler completionHandler: () -> Void) {
if identifier == "comment-reply",
let response = responseInfo[UIUserNotificationActionResponseTypedTextKey],
let responseText = response as? String {
viewController.appendText(responseText)
}
}
}
- 텍스트 입력은 백그라운드 액션이다.
- APNS
- 동작 원리
- 앱에서 운영체제에 자신을 등록
- 운영체제는 APNS를 통해서 디바이스 토큰을 받아와서 앱으로 보내줌
- 앱은 이를 자신의 서버에 등록. 이 서버는 노티피케이션을 보내는 주체가 됨
- 서버는 인증서를 가지고 APNS와 SSL연결을 해서, APNS를 통해서 푸시를 쏨
- 앱이 지워지면, 디바이스 토큰이 무효화 되고, APNS Feedback 서비스를 통해서 이를 알 수 있음
- APNS가 푸시를 받았을 때 유효하지 않은 토큰이면 이를 Feedback 서비스에 기록함
- 2016년에 토큰 크기가 더 커짐
- new provider API(APNS <-> 서버 간)
- HTTP/2 기반
- 익숙한 인터페이스(기존과 유사)
- 멀티플렉싱 가능 -> 단일 연결로, 여러개의 요청을 보낼 수 있다.
- 바이너리 기반
- 연결 과정
- 인증서를 기반으로한 SSL 연결
- 세팅 프레임 교환 -> 최대 동시 요청수, 헤더 프레임 구조 등의 정보
- 요청은 POST
- 응답
- 성공: 200 OK
- 실패: 400 BAD REQUEST
- 요청 예제
- 헤더 프레임
- 메소드(POST)
- Path: 디바이스 토큰을 포함하는 정보
- 옵션: priority, ID, expiration 등
- 데이터 프레임
- 즉각적인 피드백
- 별도의 피드백 서비스를 통할 필요가 없다.
- 응답에 410이 오면 해당 디바이스 토큰이 유효하지 않은 것이다.
- APNS가 유효하지 않다는 것을 확인한 타임스탬프가 같이 날아온다.
- 인증서 취금 단순화
- 페이로드 증설