Supporting PushKit Notifications in Your App

Panther·2021년 8월 20일
0

https://developer.apple.com/documentation/pushkit/supporting_pushkit_notifications_in_your_app

"Declare the types of PushKit notifications your app supports and configure objects to respond to them."

앱이 지원할 PushKit 노티피케이션의 타입을 선언하고, 이러한 노티피케이션에 응답할 객체를 설정합니다.

Overview

PushKit 관련 노티피케이션을 처리하기 위해 앱을 설정해야 하며, 이러한 노티피케이션을 생성하기 위한 서버를 제공해야 합니다. 앱에서 앱이 처리한 푸시 노티피케이션의 타입을 어떤 것으로 할지 PushKit에게 알려줘야 하고, 노티피케이션 도착 시 응답하기 위한 코드를 작성해야 합니다. 앱이 받는 푸시 노티피케이션 생성을 위한 서버를 사용할 수 있습니다. 사용자가 서비스에 호출을 시작하면 서버는 해당 호출에 대한 푸시 노티피케이션 요청을 생성하고, 사용자의 기기에 노티피케이션을 전달하는 애플 푸시 노티피케이션 서비스(APNs)에 요청을 전달합니다.

푸시 노티피케이션 생성을 위한 서버 설정 방법은 Setting Up a Remote Notification Server를 보시기 바랍니다.

Enable Push Notification Support for Your App

앱은 푸시 노티피케이션을 받기 위한 적합한 자격을 갖고 있어야 합니다. 이러한 자격을 생성하려면 Xcode 프로젝트에 푸시 노티피케이션 기능을 추가해야 합니다. 이 기능을 추가하면 Xcode는 APS Environment Entitlement를 앱에 추가하고, 개발 목적을 위한 푸시 노티피케이션 서비스에 앱 ID를 설정합니다.

Note
앱에 대한 명시적 앱 ID를 생성하면 개발자 계정 페이지로부터 앱 ID를 설정해 직접 푸시 노티피케이션 서비스를 추가할 수 있습니다.

Register Your App with PushKit at Launch Time

시스템은 PKPushRegistry 객체를 생성하기까지, 그리고 지원하고자 하는 노티피케이션을 구체화하기 전까지 앱에 푸시 노티피케이션을 전달할 수 없습니다. 보통 launch 타임에 이 객체를 생성하고, 앱 런타임의 듀레이션에 대한 레퍼런스를 객체에 추가합니다. 아래 예시는 Voice-over-IP (VoIP) 푸시 타입을 갖는 객체 생성 및 설정 방법을 보여주고 있습니다.

func registerForVoIPPushes() {
    self.voipRegistry = PKPushRegistry(queue: nil)
    self.voipRegistry.delegate = self
    self.voipRegistry.desiredPushTypes = [.voIP]
}

desiredPushTypes 속성에 값을 할당하는 것은 등록 과정을 시작합니다. 그렇기 때문에 이 속성을 항상 최신 수준으로 업데이트해야 합니다. 서버는 딜리게이트 객체로 등록 과정의 성공 혹은 실패를 알려줍니다.

Send the Device Token to Your Server

사용자 기기에 노티피케이션을 전달하기 위해서 서버는 해당 기기의 주소를 알아야 합니다. PushKit은 불투명한 데이터 객체인 기기 토큰의 형태로 주소를 제공합니다. 앱이 지원하는 푸시 타입을 등록하면 PKPushRegistry 객체는 PKPushCredentials 객체를 생성하고, 이 객체를 딜리게이트의 pushRegistry(_:didUpdate:for:) 메소드에 전달합니다. 자격 증명 객체는 현재 기기에 대한 기기 토큰을 포함합니다.

받는 기기 토큰에 따라 계정 고유 아이덴티파이어와 같은 사용자 식별에 필요한 다른 정보와 함께 기기 토큰을 서버로 전달해야 합니다. 사용자 정보의 보안을 안전하게 하려면, 네트워크에 번달하기 전에 항상 토큰 및 모든 사용자 데이터를 암호화해야 합니다. 서버에서 사용자의 다른 계정 세부사항과 함께 기기 토큰을 안전하게 저장해야 합니다. 사용자는 여러 기기에서 하나의 앱을 사용할 수 있기 때문에 앱이 지원하는 각각의 노티피케이션 타입에 대해 여러 토큰을 처리할 준비가 되어 있어야 합니다.

푸시 노티피케이션 처리를 위한 서버 설정 방법은 Setting Up a Remote Notification Server를 보시기 바랍니다.

Setting Up a Remote Notification Server
https://developer.apple.com/documentation/usernotifications/setting_up_a_remote_notification_server
https://velog.io/@panther222128/Setting-Up-a-Remote-Notification-Server

Generate Push Notifications Using the Device Token

사용자에게 보내기 위한 데이터를 갖고 있을 때 적합한 포스트 요청을 생성하고 요청을 APNs에 보내야 합니다. VoIP 서비스는 사용자가 수신 전화를 받을 때마다 요청을 생성합니다. complication을 갖는 앱은 해당 complication에 대한 긴급한 업데이트를 받을 때마다 요청을 생성할 것입니다.

각 포스트 요청은 사용자에게 보내길 원하는 데이터를 갖고 있는 JSON 페이로드를 포함합니다. 대부분의 노티피케이션 타입에서 페이로드에 데이터의 4 킬로바이트(4096 바이트)까지 보낼 수 있으나, VoIP 노티피케이션의 경우 제한은 5 킬로바이트(5120 바이트)입니다. 앱이 응답하는 데 필요한 페이로드에 정보를 포함시키기 바랍니다. 예를 들어 watchOS complication이 표시하길 원하는 새로운 데이터를 포함시킬 수 있습니다. 페이로드에 모든 데이터를 맞출 수 없다면 앱은 네트워크 연결을 알고 필요한 추가적인 데이터를 가져올 수 있습니다.

APNs에 보낼 포스트 생성 및 전송에 대한 더 많은 정보는 Sending Notification Requests to APNs를 보시기 바랍니다. VoIP 푸시 노티피케이션 설정 방법에 대한 정보는 Responding to VoIP Notifications from PushKit을 보시기 바랍니다.

Sending Notification Requests to APNs
https://developer.apple.com/documentation/usernotifications/setting_up_a_remote_notification_server/sending_notification_requests_to_apns
https://velog.io/@panther222128/Sending-Notification-Requests-to-APNs

Responding to VoIP Notifications from PushKit
https://developer.apple.com/documentation/pushkit/responding_to_voip_notifications_from_pushkit
https://velog.io/@panther222128/Responding-to-VoIP-Notifications-from-PushKit

See Also


Registration

PKPushRegistry

전달을 요청하고 PushKit 노티피케이션의 수신을 처리하는 객체입니다.

https://developer.apple.com/documentation/pushkit/pkpushcredentials
https://velog.io/@panther222128/PKPushRegistry

PKPushCredentials

앱에 푸시 노티피케이션 전달을 위해 사용하는 기기 토큰을 캡슐화하는 객체입니다.

https://developer.apple.com/documentation/pushkit/pkpushcredentials
https://velog.io/@panther222128/PKPushCredentials


0개의 댓글