푸시

시작하기 전에

유저 프로필 설정을 통해 사용하고자 하는 액션의 채널 수신 동의 설정이 선행되어야 합니다.

푸시메시지를 사용하기 위해 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