ios - notification - java fcm apns




FCM에 대한 토큰을 검색하는 올바른 방법-iOS 10 Swift 3 (8)

스위프트 4 + 파이어베이스 (5.3.0)

func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
    InstanceID.instanceID().instanceID(handler: { (result, error) in
        if let error = error {
            print("Error fetching remote instange ID: \(error)")
        } else if let result = result {
            print("Remote instance ID token: \(result.token)")
        }
    })
}

나는 FirebaseAuth / FCM 등으로 Firebase를 구현했고 Firebase Console을 통해 성공적으로 알림을 보냈습니다.

그러나 나는 내 자신의 응용 프로그램 서버에서 알림을 밀어해야합니다.

어떤 방법으로 장치의 등록 ID를 검색하는 올바른 방법입니다 아래 궁금 해서요 :

1) didRegisterForRemoteNotificationWithDeviceToken에서 등록 ID 토큰을 검색합니다.

func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
    var token = ""

    for i in 0..<deviceToken.count {
        token += String(format: "%02.2hhx", arguments: [deviceToken[i]])
    }

    print("Registration succeeded!")
    print("Token: ", token)
    Callquery(token)

}

2) 파이어베이스 에서 등록 토큰 검색 (현재 등록 토큰을 검색하는 Firebase 문서를 기반으로 함)

let token = FIRInstanceID.instanceID().token()!

나는 첫 번째 방법을 사용했다, 밀어 넣기 알림을 수신하지 않는 경우에도 등록 ID가 내 응용 프로그램 서버 데이터베이스에 따라 저장되며이 CURL 세션 결과를 얻습니다.

{"multicast_id":6074293608087656831,"success":0,"failure":1,"canonical_ids":0,"results":[{"error":"InvalidRegistration"}]}

나는 또한 두 번째 방법을 시도하고 치명적인 오류가 발생하는 동안 응용 프로그램을 실행하는 동안 아래 :

아무도 날 올바른 방법을 가리킬 수 있다면 감사, 감사합니다!


Swift 3 + Firebase 4.0.4 :

static var FirebaseToken : String? {
    return InstanceID.instanceID().token()
}

나는 같은 문제를 겪고 있었지만 무슨 일이 일어나고 있는지 알 수 없었다.

@Sam이 제안한 didRegisterForRemoteNotificationsWithDeviceToken 은 (거의) 항상 호출되므로 잘 처리해야합니다. 하지만 처음 새로 고친 토큰으로 앱을 열 때 호출되지 않습니다.

따라서이 시나리오에서는 여전히 다음이 필요합니다.

func messaging(_ messaging: Messaging, didRefreshRegistrationToken fcmToken: String) {
    print("Refreshed Token: \(fcmToken)")
}

그래서 당신은 오직 :

func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
    if let fcmToken = InstanceID.instanceID().token() {
        print("InstanceID token: \(fcmToken)")
    }
}

사용자가 두 번째로 앱을 열면 "새로 고침 토큰"만 표시됩니다.

앱을 제거하고 빌드 폴더 (제품> 클린 빌드 폴더)를 청소하여 새로 고침 토큰을 강제로 관리했습니다. 테스트에 좋습니다.

이상적으로 그것은 messaging:didReceiveRegistrationToken 대리자 메서드에서 모두 처리 할 수 ​​있지만 제대로 작동하지 못했습니다. FCM 토큰의 변경 사항에 대한 알림을받는 또 다른 방법은 https://firebase.google.com/docs/cloud-messaging/ios/client의 제안에 따라 kFIRMessagingRegistrationTokenRefreshNotification 이라는 NSNotification 을 수신하는 것입니다.


두 번째 옵션으로 가면, 이것은 정말 어리석은 / 간단하게 보일 것입니다. 그러나 치명적인 선택 오류를 수정하려면 끝에있는 force-unwrap을 제거하십시오

귀하의 코드 :
var token = FIRInstanceID.instanceID().token()!
그것을 만드십시오 :
var token = FIRInstanceID.instanceID().token()

적어도 그 불쾌한 충돌을 고칠 것입니다.


앱을 시작할 때 tokenRefreshNotification 함수가 항상 호출되는 것은 아닙니다.

그러나 일반 didRegisterForRemoteNotificationsWithDeviceToken 대리자 함수 내에 코드를 삽입 할 때마다 토큰을 얻을 수 있습니다.

func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
    if let refreshedToken = InstanceID.instanceID().token() {
        print("InstanceID token: \(refreshedToken)")
    }
}

(Swift 3 + Firebase 4.0.4)


FCM 장치 토큰 swift3

    let fcmDeviceToken = FIRInstanceID.instanceID().token()
    print("FCM token: \(fcmDeviceToken ?? "")")

스위프트 4

의례 : https://.com/a/50945350/1014164

InstanceID.instanceID().instanceID { (result, error) in
    if let error = error {
        print("Error fetching remote instange ID: \(error)")
    } else if let result = result {
        print("Remote instance ID token: \(result.token)")
    }
}

현재 FCM 토큰을 얻는 방법

if let token = Messaging.messaging().fcmToken {
    // token is current fcmToken
}

현재 FCM 토큰 갱신

현재 instanceId를 삭제하면 새로운 토큰이 잠시 후 MessagingDelegate (messaging : didReceiveRegistrationToken)에 수신됩니다.

InstanceID.instanceID().deleteID { (error) in
    if let er = error {
        print(er.localizedDescription)
    } else {
        print("instanceID().deleteID  success ---------------➤")
    }
}






firebase-cloud-messaging