1

푸시 알림을 위해 Firebase를 사용하려고합니다. 그러나 나는 블록을 쳤다. 즉 iOS에서 그 일을 할 수 없었다. 나는 수입 FirebaseFirebase : 장치 토큰을 FCM 토큰으로 변환하는 방법

application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) 

2

에서 모두

Messaging.messaging().setAPNSToken(deviceToken, type: .prod) and InstanceID.instanceID().setAPNSToken(deviceToken, type: InstanceIDAPNSTokenType.sandbox) 

의 두 가지 방법을 시도했다.

어떻게해야합니까?

편집 : 이것은 보충 정보이며 오류 메시지는 다음과 같습니다. 기본 토큰을 가져 오지 못했습니다. Error Domain = com.firebase.iid Code = 1003 "(null)" 나는 봤지만 관련 정보는 없습니다.

+0

당신이 해결했으면 같은 문제가 생겨서 대답을 올리시겠습니까? –

답변

5

여러분이 가까이 있습니다. 다음은 application.registerForRemoteNotifications()를 호출하면, 아이폰 OS는 그냥 팔자 'iOS 앱처럼있는 APN 인증서를 요청합니다

  1. ... 클라우드 메시징의 중포 기지 4.0 버전에서 지금 무슨 일입니다.

  2. 메소드 스위 즐을 끄지 않았다고 가정하면 Firebase는 자동으로 해당 APN 토큰을 FCM 토큰과 교환합니다 (자체 swuchzled didRegisterForRemoteNotificationsWithDeviceToken 메소드).

  3. 교환이 완료되면 Firebase에서 앱에 알릴 수 있습니다. 이 작업을 수행하는 유일한 방법은 유형이 kFIRMessagingRegistrationTokenRefreshNotification 인 NSNotification을 작성하는 것입니다. 그러나 요즘은 MessagingDelegate을 통해 알려 드릴 수도 있습니다. 그래서 할 수있는 가장 쉬운 방법은 ... 호출하여 AppDelegate에

    Messaging.messaging().delegate = self 
    

    을 메시징 대리자를 선언하는 것입니다 ... 다음 messaging(_:didRefreshRegistrationToken) 방법을 구현.

    func messaging(_ messaging: Messaging, didRefreshRegistrationToken fcmToken: String) { 
        print("Look! I have an FCM token! \(fcmToken)") 
    } 
    

는 그래서 TL; DR은 그냥 FCM 라이브러리가이 작업을 수행 할 때 알림을받을 대리인을 설정해야합니다, 토큰 수동으로 FCM에 대한 APN에 토큰을 교환 할 필요가 없다는 것입니다 너를 위해서.

+0

당신이 대답하기 전에, swizzling에 관한 나의 설정은 켜져 있었다! 그래서 모든 것을 처리해야했지만 이제는'AppDelegate' 클래스가'MessageDelegate' 클래스를 따르도록하고 여러분의 조언에 따라 따라합니다. 그리고'messaging (_ : didRefreshRegistrationToken)'에서 초기화를 작성했습니다. 그러나'messaging (_ : didRefreshRegistrationToken)'은'application.registerForRemoteNotifications()'를 실행 한 후에 호출되지 않습니다. 여전히 내 응용 프로그램 (응용 프로그램 : UIApplication, didRegisterForRemoteNotificationswithDeviceToken deviceToken : Data)이 호출되었습니다. 왜? –

+0

동일한 문제가 있지만 Method Swizzling이 꺼져 있고 문서에'didRefreshRegistrationToken'이 IOS 10+에서만 사용 가능하다고 나와 있는데 그 아래 버전에서는 어떻게해야합니까? 그리고 Messaging.messaging()을 사용했습니다. shouldEstablishDirectChannel = true' 대신'connect'와'disconnect' 메쏘드 대신'Notification.Name.MessagingRegistrationTokenRefreshed'에서 메 시지를 얻을 수 있습니다. –

관련 문제