푸시
시작하기 전에
유저 프로필 설정을 통해 사용하고자 하는 액션의 채널 수신 동의 설정이 선행되어야 합니다.
푸시메시지를 사용하기 위해 Apple로부터 발급받은 .p8 APNs 인증키를 DFINERY 콘솔에 등록해주세요. 콘솔의 부가 설정 / 채널 부가 설정 / 푸시 / iOS 설정 관리에서 등록할 수 있습니다.
SDK 연동
AppDelegate 클래스에 푸시 토큰 등록 코드를 추가합니다.
import UIKit
import UserNotifications
import DfinerySDK
@main
class AppDelegate: UIResponder, UIApplicationDelegate {
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
...
...
application.registerForRemoteNotifications()
...
...
}
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
Dfinery.shared().set(pushToken: deviceToken)
}
}
푸시 메시지 사용을 위해 유저 권한을 획득해야 합니다.
예시 코드
UNUserNotificationCenter.current().requestAuthorization(options: [.alert, sound]) { granted, err in
if granted {
DispatchQueue.main.async {
UIApplication.shared.registerForRemoteNotifications()
}
}
}
푸시 핸들링
푸시 핸들링을 위해 AppDelegate 클래스에 UNUserNotificationCenterDelegate 프로토콜을 채택하고 SDK 코드를 연동해주세요.
class AppDelegate: UIResponder, UIApplicationDelegate, UNUserNotificationCenterDelegate {
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
...
...
UNUserNotificationCenter.current().delegate = self
...
...
}
func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) {
if Dfinery.shared().canHandleNotification(response: response) {
completionHandler()
return
}
}
func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
if Dfinery.shared().canHandleForeground(notification, completionHandler: completionHandler) {
return
}
}
}
Service Extension
디파이너리 푸시의 이미지, 버튼 사용을 위해 Notification Service Extension을 추가로 생성하고 DfineryServiceExtension을 연동해야 합니다.
import UserNotifications
import DfinerySDKServiceExtension
class NotificationService: UNNotificationServiceExtension {
var contentHandler: ((UNNotificationContent) -> Void)?
var bestAttemptContent: UNMutableNotificationContent?
override func didReceive(_ request: UNNotificationRequest, withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void) {
self.contentHandler = contentHandler
bestAttemptContent = (request.content.mutableCopy() as? UNMutableNotificationContent)
if let bestAttemptContent = bestAttemptContent {
if DfineryServiceExtension.canHandle(content: bestAttemptContent, contentHandler: contentHandler) {
return
}
contentHandler(bestAttemptContent)
}
}
...
}
Last updated