개발 - iOS SwiftUI

iOS SwiftUI Firebase didRegisterForRemoteNotificationsWithDeviceToken 호출 안됨

개미v 2023. 10. 23. 09:09

SwiftUI에 Firebase를 적용하려고 하는데 new Token이 발급 되면 호출되어야할 didRegisterForRemoteNotificationsWithDeviceToken 가 호출 되지 않아서 해결한 방법입니다.

 

FirebaseAppDelegateProxyEnabled 프라퍼티 추가

프로젝트 설정에서 FirebaseAppDelegateProxyEnabled 프라퍼티를 NO 값으로 추가 합니다.

 

didFailToRegisterForRemoteNotificationsWithError 함수 추가

Firebase에서 에러가 발생하면 didFailToRegisterForRemoteNotificationsWithError 함수에서 출력할 수 있습니다.
이것 알아내는데도 많은 시간 소비 했습니다.

import Foundation
import SwiftUI
import Firebase
import FirebaseMessaging

@main
struct metalkApp: App {
    // register app delegate for Firebase setup
    @UIApplicationDelegateAdaptor(AppDelegate.self) var delegate
    
    var body: some Scene {
        WindowGroup {
            IntroView()
        }
    }
}

class AppDelegate: NSObject, UIApplicationDelegate {
    // 앱이 켜졌을때
    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool {
        // Firebase 초기화
        FirebaseApp.configure()
        ...
        return true
    }
    
    // Firebase 토큰이 등록 되었을 때
    func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
        Messaging.messaging().apnsToken = deviceToken
    }
    
    // Firebase 에러 출력
    func application(_ application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: Error) {
        print("Firebase error : \(error)")
    }
}

 

Capability에 Push Notifications 추가

드디어 안되는 이유가 나옵니다.

 

Error Domain=NSCocoaErrorDomain Code=3000 "응용 프로그램을 위한 유효한 ‘aps-environment’ 인타이틀먼트 문자열을 찾을 수 없습니다." UserInfo={NSLocalizedDescription=응용 프로그램을 위한 유효한 ‘aps-environment’ 인타이틀먼트 문자열을 찾을 수 없습니다.}

 

위 에러를 해결하려면 프로젝트 설정 - Signing & Capabilities 에서 Push Notificaitons를 추가 해야 합니다.

 

 

그냥하면 Capability 목록에서 Push Notifications가 보이지 않고, Automatically manage signing 해제하고, Capability 추가하고, 다시 Automatically manage signing 체크하였습니다.

 

Development Team 설정

애플 개발자 계정 결제를 안한 상태에서는 Firebase 토큰 발급도 안됩니다.
나중에 개발자 계정 등록할 것이라서, 이 내용은 생략 하겠습니다.