Google은 흑인 공동체를 위한 인종적 평등을 추구하기 위해 노력하고 있습니다. 자세히 알아보기

Firebase 설치 관리

컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요.

Firebase 설치 서비스(FIS)는 Firebase 앱의 설치된 각 인스턴스에 대한 Firebase 설치 ID(FID)를 제공합니다. Firebase 설치 ID는 다음 Firebase 서비스에서 내부적으로 사용됩니다.

Firebase 서비스 Firebase 설치 기능
Firebase 클라우드 메시징

Firebase 클라우드 메시징은 Firebase 설치 ID를 사용하여 메시지 전달을 위한 대상 기기를 지정합니다.

Firebase 인앱 메시지

Firebase 인앱 메시징은 Firebase 설치 ID를 사용하여 메시지 전달을 위한 대상 기기를 지정합니다.

Firebase 성능 모니터링

Performance Monitoring은 액세스 패턴이 충분히 익명이 되도록 Firebase 설치 ID를 사용하여 네트워크 리소스에 액세스하는 고유한 Firebase 설치 수를 계산합니다. 또한 Firebase 원격 구성과 함께 Firebase 설치 ID를 사용하여 성능 이벤트 보고 비율을 관리합니다.

Firebase 원격 구성

원격 구성은 Firebase 설치 ID를 사용하여 최종 사용자 기기에 반환할 구성 값을 선택합니다.

Firebase ML

설치 인증 토큰 이라는 자격 증명은 예를 들어 개발자 모델을 앱 인스턴스에 배포하기 위해 앱 인스턴스와 상호작용할 때 기기 인증을 위해 Firebase ML에서 사용됩니다.

Firebase 사용자 세분화 저장소

Firebase 사용자 세분화 저장소는 Firebase 설치 ID와 관련 속성 및 세그먼트를 저장하여 이를 사용하는 다른 Firebase 서비스에 타겟팅 정보를 제공합니다.

일반적으로 Firebase 서비스는 개발자가 FIS API와 직접 상호 작용할 필요 없이 Firebase 설치 서비스를 사용합니다. 그러나 앱 개발자가 다음과 같이 FIS API를 직접 호출하려는 경우가 있습니다.

  • Firebase 설치 및 설치에 연결된 데이터를 삭제합니다.
  • 특정 앱 설치를 대상으로 하기 위해 식별자(Firebase 설치 ID)를 검색합니다.
  • Firebase 설치를 인증하기 위해 설치 인증 토큰을 검색합니다.

FIS API를 직접 호출하려면 SDK를 앱에 추가하세요.

앱에 Firebase 설치 SDK 추가

iOS+

  1. Firebase 설치에 대한 종속성을 Podfile에 추가합니다.
    pod 'FirebaseInstallations'
  2. pod install 을 실행하고 생성된 .xcworkspace 파일을 엽니다.
  3. UIApplicationDelegate 에서 FirebaseCore 모듈과 앱 대리자가 사용하는 다른 Firebase 모듈 을 가져옵니다. 예를 들어 Cloud Firestore 및 인증을 사용하려면 다음 안내를 따르세요.

    빠른

    import FirebaseCore
    import FirebaseFirestore
    import FirebaseAuth
    // ...
          

    오브젝티브-C

    @import FirebaseCore;
    @import FirebaseFirestore;
    @import FirebaseAuth;
    // ...
          
  4. 앱 대리자의 application(_:didFinishLaunchingWithOptions:) 메서드에서 FirebaseApp 공유 인스턴스를 구성합니다.

    빠른

    // Use Firebase library to configure APIs
    FirebaseApp.configure()

    오브젝티브-C

    // Use Firebase library to configure APIs
    [FIRApp configure];

기계적 인조 인간

Firebase 설치 Android SDK에 대한 종속성을 모듈(앱 수준) Gradle 파일(일반적으로 app/build.gradle )에 추가합니다.

implementation 'com.google.firebase:firebase-installations:17.1.0'

자바스크립트

웹 애플리케이션이 호스팅되는 방식에 따라 구성이 자동으로 처리되거나 Firebase 구성 객체 를 업데이트해야 할 수 있습니다.

예를 들어 종속성이 index.html에 추가된 경우 <head> 요소에 종속성을 추가합니다.

<script src="/__/firebase/9.14.0/firebase-installations.js"></script>

실룩 거리다

  1. Flutter 프로젝트의 루트 디렉토리에서 다음 명령을 실행하여 Firebase 설치 플러그인을 설치합니다.

    flutter pub add firebase_app_installations
    
  2. 프로젝트 재구축:

    flutter run
    
  3. Firebase 설치 플러그인을 가져옵니다.

    import 'package:firebase_app_installations/firebase_app_installations.dart';
    

Firebase 설치 삭제

Firebase 설치와 관련된 데이터는 일반적으로 개인 식별이 불가능 합니다. 그래도 사용자에게 이 데이터를 관리하고 삭제할 수 있는 옵션을 제공하는 것이 도움이 될 수 있습니다.

Firebase 설치 ID는 모든 애플리케이션의 설치마다 다릅니다. 동일한 기기의 다른 애플리케이션은 서로 다른 Firebase 설치 ID를 갖습니다. Firebase 설치 ID는 앱 설치 및 해당 앱 설치에 연결된 데이터를 식별합니다.

설치 ID를 삭제하면 해당 설치 ID에 연결된 데이터가 Firebase 설치 ID를 사용하여 180일 이내에 설치를 식별하는 모든 Firebase 서비스의 라이브 및 백업 시스템에서 제거됩니다. 이 프로세스는 삭제 및 보관에 대한 Google의 설명에 자세히 설명되어 있습니다.

앱에서 모든 FID 생성 서비스를 비활성화하지 않는 한 FIS는 며칠 내에 새 ID를 생성합니다. Firebase는 새로 생성된 ID를 새로운 Firebase 설치로 간주하고 어떤 식으로든 이전 ID 또는 데이터와 연결하지 않습니다.

클라이언트 API 호출로 FID 삭제

Firebase 서비스에서 생성한 FID를 삭제하려면 Firebase 설치 SDK에서 적절한 메서드를 호출하세요.

빠른

Installations.installations().delete { error in
  if let error = error {
    print("Error deleting installation: \(error)")
    return
  }
  print("Installation deleted");
}

오브젝티브-C

[[FIRInstallations installations] deleteWithCompletion:^(NSError *error) {
   if (error != nil) {
     NSLog(@"Error deleting Installation %@", error);
     return;
   }
   NSLog(@"Installation deleted");
}];

Java

FirebaseInstallations.getInstance().delete()
        .addOnCompleteListener(new OnCompleteListener<Void>() {
    @Override
    public void onComplete(@NonNull Task<Void> task) {
        if (task.isSuccessful()) {
            Log.d("Installations", "Installation deleted");
        } else {
            Log.e("Installations", "Unable to delete Installation");
        }
    }
});

Kotlin+KTX

FirebaseInstallations.getInstance().delete().addOnCompleteListener { task ->
    if (task.isComplete) {
        Log.d("Installations", "Installation deleted")
    }  else {
        Log.e("Installations", "Unable to delete Installation")
    }
}

자바스크립트

await firebase.installations().delete();

Dart

await FirebaseInstallations.instance.delete();

서버 API 호출로 FID 삭제

서버 API 호출로 FID를 삭제하려면 Firebase Admin SDK를 서버에 아직 추가 하지 않은 경우 추가합니다.

SDK가 추가되면 선택한 언어로 삭제 함수를 호출하여 FID를 삭제합니다(참고: Node.js를 제외하고 이러한 메서드는 인스턴스 ID 이름 지정을 반영합니다. 그러나 현재 Firebase에서 호출할 때 실제로는 모두 FID를 삭제합니다. SDK).

노드.js

// An FIDsent from a client service SDK
const idToDelete = 'eyJhbGciOiJFUzI1N_iIs5';

admin.installations().deleteInstallation(idToDelete);

Java

// An FID sent from a client service SDK
String idToDelete = "eyJhbGciOiJFUzI1N_iIs5";

FirebaseInstanceId.getInstance().deleteInstanceIdAsync(idToDelete).get();

파이썬

  from firebase_admin import instance_id

  # An FID sent from a client service SDK
  id_to_delete = 'eyJhbGciOiJFUzI1N_iIs5'

  instance_id.delete_instance_id(id_to_delete)

가다

client, err := app.InstanceId(ctx)
if err != nil {
  log.Fatalln("error initializing client", err)
}

iidToDelete := "eyJhbGciOiJFUzI1N_iIs5"
if err := client.DeleteInstanceId(ctx, iidToDelete); err != nil {
  log.Fatalln("error deleting FID", err)
}

서버 API 호출로 Firebase 설치 ID를 삭제하면 Firebase 서비스가 해당 설치 ID에 연결된 데이터를 삭제하는 프로세스를 시작하고 1~2일 동안 해당 ID에 대한 새 데이터 수락을 중지한 다음 클라이언트 앱에 알립니다. 아이디를 삭제했다고 합니다. Firebase가 클라이언트 앱에 알릴 때까지 일부 앱 서비스는 여전히 ID를 대상으로 할 수 있습니다. 예를 들어 Firebase 설치는 몇 시간 동안 계속 FCM 알림을 수신할 수 있습니다.

현재 Firebase 설치 ID를 삭제하고 관련 없는 새 ID로 Firebase 서비스를 즉시 사용하려면 클라이언트 API를 사용하여 삭제를 처리하세요.

클라이언트 식별자 검색

앱의 특정 설치를 식별해야 하는 경우 Firebase 설치 ID를 검색하여 식별할 수 있습니다. 예를 들어 Firebase 인앱 메시지 개발 중에 테스트를 수행하기 위해 Firebase 설치 ID를 사용하여 올바른 테스트 기기를 식별하고 대상으로 지정할 수 있습니다.

Firebase 설치 ID를 검색하려면 다음 단계를 따르세요.

빠른

Installations.installations().installationID { (id, error) in
  if let error = error {
    print("Error fetching id: \(error)")
    return
  }
  guard let id = id else { return }
  print("Installation ID: \(id)")
}

오브젝티브-C

[[FIRInstallations installations] installationIDWithCompletion:^(NSString *identifier, NSError *error) {
  if (error != nil) {
    NSLog(@"Error fetching Installation ID %@", error);
    return;
  }
  NSLog(@"Installation ID: %@", identifier);
}];

Java

FirebaseInstallations.getInstance().getId()
        .addOnCompleteListener(new OnCompleteListener<String>() {
    @Override
    public void onComplete(@NonNull Task<String> task) {
        if (task.isSuccessful()) {
            Log.d("Installations", "Installation ID: " + task.getResult());
        } else {
            Log.e("Installations", "Unable to get Installation ID");
        }
    }
});

Kotlin+KTX

FirebaseInstallations.getInstance().id.addOnCompleteListener { task ->
    if (task.isSuccessful) {
        Log.d("Installations", "Installation ID: " + task.result)
    } else {
        Log.e("Installations", "Unable to get Installation ID")
    }
}

자바스크립트

const installationId = await firebase.installations().getId();
console.log(installationId);

Dart

String id = await FirebaseInstallations.instance.getId();

설치 인증 토큰 검색

Firebase 서비스는 FIS에서 가져온 인증 토큰으로 Firebase 설치를 인증할 수 있습니다. 예를 들어 원격 구성에 대한 A/B 테스트를 설계할 때 설치 인증 토큰을 사용하여 대상 테스트 장치를 인증할 수 있습니다.

설치 인증 토큰은 다음 설치 정보를 포함하는 JWT(JSON 웹 토큰) 형식의 단기 전달자 토큰입니다.

  • Firebase 설치 ID
  • 연결된 프로젝트( projectNumber )
  • 연결된 Firebase 애플리케이션 ID( appId )
  • 토큰의 만료일

설치 인증 토큰은 취소할 수 없으며 만료일까지 유효합니다. 기본 토큰 수명은 1주일입니다.

설치 인증 토큰을 검색하려면:

빠른

Installations.installations().authTokenForcingRefresh(true, completion: { (result, error) in
  if let error = error {
    print("Error fetching token: \(error)")
    return
  }
  guard let result = result else { return }
  print("Installation auth token: \(result.authToken)")
})

오브젝티브-C

[[FIRInstallations installations] authTokenForcingRefresh:true
                                               completion:^(FIRInstallationsAuthTokenResult *result, NSError *error) {
  if (error != nil) {
    NSLog(@"Error fetching Installation token %@", error);
    return;
  }
  NSLog(@"Installation auth token: %@", [result authToken]);
}];

Java

FirebaseInstallations.getInstance().getToken(/* forceRefresh */true)
        .addOnCompleteListener(new OnCompleteListener<InstallationTokenResult>() {
    @Override
    public void onComplete(@NonNull Task<InstallationTokenResult> task) {
        if (task.isSuccessful() && task.getResult() != null) {
            Log.d("Installations", "Installation auth token: " + task.getResult().getToken());
        } else {
            Log.e("Installations", "Unable to get Installation auth token");
        }
    }
});

Kotlin+KTX

FirebaseInstallations.getInstance().getToken(/* forceRefresh */ true)
    .addOnCompleteListener { task ->
        if (task.isSuccessful) {
            Log.d("Installations", "Installation auth token: " + task.result?.token)
        } else {
            Log.e("Installations", "Unable to get Installation auth token")
        }
    }

자바스크립트

const installationToken = await firebase.installations()
    .getToken(/* forceRefresh */ true);
console.log(installationToken);

Dart

String token = await FirebaseInstallations.instance.getToken();

Firebase 설치 ID 수명 주기 모니터링

앱이 정상적으로 작동하는 동안 Firebase 설치 ID(FID)에는 특별한 모니터링이 필요하지 않습니다. 그러나 FID를 명시적으로 검색하고 사용하는 앱은 FID의 잠재적인 삭제 또는 회전을 모니터링하는 논리를 추가해야 합니다. 다음은 FID가 삭제되거나 회전될 수 있는 몇 가지 경우입니다.

  • 예를 들어 최종 사용자가 새 기기에 설치하는 경우 앱 제거 또는 재설치.
  • 최종 사용자는 앱 또는 기기의 캐시를 지웁니다.
  • FID 삭제는 앱 비활성으로 인해 백엔드에서 트리거됩니다(현재 이에 대한 임계값은 270일 비활성).

이러한 종류의 경우 앱에서 FID 회전 또는 삭제가 발생하면 새 FID가 할당됩니다. 또한 삭제된 FID와 연결된 설치 인증 토큰은 자체 성숙도와 상관없이 삭제되고 새로운 설치 인증 토큰으로 대체됩니다.

앱은 이러한 변경 사항을 모니터링하고 그에 따라 대응할 수 있습니다.

FID 회전을 모니터링하려면:

빠른

installationIDObserver = NotificationCenter.default.addObserver(
        forName: .InstallationIDDidChange,
        object: nil,
        queue: nil
) { (notification) in
  // Fetch new Installation ID
  self.fetchInstallationToken()
}

오브젝티브-C

__weak __auto_type weakSelf = self;
self.installationIDObserver = [[NSNotificationCenter defaultCenter]
        addObserverForName: FIRInstallationIDDidChangeNotification
                    object:nil
                     queue:nil
                usingBlock:^(NSNotification * _Nonnull notification) {
    // Fetch new Installation ID
    [weakSelf fetchInstallationsID];
}];

NSNotificationName.InstallationIDDidChange라는 NSNotificationName.InstallationIDDidChange 은 새 FID가 할당될 때마다 기본 NSNotificationCenter에 게시됩니다.

기계적 인조 인간

Kotlin 및 Java 클라이언트는 실패한 호출에 응답하여 새 FID를 검색하는 재시도 논리를 추가해야 합니다.

자바스크립트

웹 앱은 onIdChange 후크를 구독할 수 있습니다.

새 FID가 생성될 때마다 구독된 콜백이 트리거됩니다.

await firebase.installations().onIdChange((newId) => {
  console.log(newId);
  // TODO: Handle new installation ID.
});

Dart

FirebaseInstallations.instance.onIdChange.listen((token) {
  print('FID token: $token');
});

인스턴스 ID에서 Firebase 설치로 마이그레이션

Firebase 설치가 도입되기 전에 Firebase는 앱 설치 식별자로 인스턴스 ID SDK를 사용했습니다. Firebase 설치는 안정성, 성능, 보안 면에서 인스턴스 ID에 비해 상당한 이점을 제공합니다. 인스턴스 ID SDK에 의존하는 Firebase 앱은 Firebase 설치로 마이그레이션해야 합니다.

마이그레이션 프로세스는 앱에 따라 다릅니다.

  • 인스턴스 ID API를 직접 호출하지 않는 앱은 SDK 버전을 업데이트하여 마이그레이션할 수 있습니다. 대부분의 Firebase 앱이 이 범주에 속합니다.

  • 인스턴스 ID에 대한 API 호출을 명시적으로 수행하는 앱은 SDK 버전 업데이트 하고 코드를 변경 하여 인스턴스 ID 메소드를 Firebase 설치 또는 이에 상응하는 FCM으로 대체해야 합니다. 앱이 인스턴스 ID를 사용하여 FCM 등록 토큰을 검색하거나 명시적으로 인스턴스 ID를 사용하여 앱 인스턴스를 대상으로 지정하거나 다른 용도로 사용하는 경우 애플리케이션 코드를 업데이트해야 합니다.

현재 FIS는 기존 식별자 Firebase 인스턴스 ID와 이전 버전과 호환됩니다. IID 삭제는 다음 Firebase SDK로 데이터 삭제를 요청하는 대체 방법입니다.

  • iOS 6.14.0 이하
  • 2020년 2월 27일 이전의 Android SDK

즉, Firebase 설치로 마이그레이션하는 데 앱이 필요 하지 않습니다. 그러나 그렇게 하는 것이 좋습니다.

Firebase 설치를 위한 최소 SDK 버전으로 업그레이드

인스턴스 ID에서 Firebase 설치로 마이그레이션하려면 애플리케이션에서 다음 Firebase SDK의 나열된 최소 버전 번호 이상을 사용해야 합니다.

Firebase SDK 최소 안드로이드 버전 최소 iOS 버전
Firebase 클라우드 메시징 v20.3.0 v6.34.0
원격 구성 v19.2.0 v6.24.0
Firebase용 Google 애널리틱스 \(측정 SDK) v17.4.4 v6.18.0
인앱 메시지 v19.0.7 v6.24.0
성능 모니터링 v19.0.8 v6.21.0
Crashlytics v17.2.1 v6.23.0
ML 키트 v22.1.2 v6.28.0

인스턴스 ID API를 명시적으로 호출하는 코드 업데이트

Android 또는 Apple 앱에서 인스턴스 ID SDK 메서드를 직접 사용하는 경우 Firebase 설치 SDK 또는 FCM SDK에서 동일한 대안으로 해당 사용을 대체할 수 있습니다.

식별자 검색

인스턴스 ID를 가져오는 방법이 설치 ID를 가져오는 방법으로 대체되었습니다. 예를 들어:

전에

빠른

Messaging.messaging().token { token, error in
  if let error = error {
    print("Error fetching remote FCM registration token: \(error)")
  } else if let token = token {
    print("Remote instance ID token: \(token)")
    self.remoteFCMTokenMessage.text = "Remote FCM registration token: \(token)"
  }
}

오브젝티브-C

[[FIRMessaging messaging] tokenWithCompletion:^(NSString * _Nullable token, NSError * _Nullable error) {
   if (error != nil) {
     NSLog(@"Error fetching the remote FCM registration token: %@", error);
   } else {
     NSLog(@"Remote FCM registration token: %@", token);
     NSString* message =
       [NSString stringWithFormat:@"FCM registration token: %@", token];
     self.remoteFCMTokenMessage.text = message;
   }
 }];

Java

FirebaseInstanceId.getInstance().getInstanceId()
        .addOnCompleteListener(new OnCompleteListener<InstanceIdResult>() {
            @Override
            public void onComplete(@NonNull Task<InstanceIdResult> task) {
                Log.d("IID_TOKEN", task.getResult().getToken());
            }
        });

Kotlin+KTX

FirebaseInstanceId.getInstance().instanceId
        .addOnSuccessListener { result ->
            Log.d("IID_TOKEN", result.token)
        }

후에

빠른

Installations.installations().installationID { (id, error) in
  if let error = error {
    print("Error fetching id: \(error)")
    return
  }
  guard let id = id else { return }
  print("Installation ID: \(id)")
}

오브젝티브-C

[[FIRInstallations installations] installationIDWithCompletion:^(NSString *identifier, NSError *error) {
  if (error != nil) {
    NSLog(@"Error fetching Installation ID %@", error);
    return;
  }
  NSLog(@"Installation ID: %@", identifier);
}];

Java

FirebaseInstallations.getInstance().getId()
        .addOnCompleteListener(new OnCompleteListener<String>() {
    @Override
    public void onComplete(@NonNull Task<String> task) {
        if (task.isSuccessful()) {
            Log.d("Installations", "Installation ID: " + task.getResult());
        } else {
            Log.e("Installations", "Unable to get Installation ID");
        }
    }
});

Kotlin+KTX

FirebaseInstallations.getInstance().id.addOnCompleteListener { task ->
    if (task.isSuccessful) {
        Log.d("Installations", "Installation ID: " + task.result)
    } else {
        Log.e("Installations", "Unable to get Installation ID")
    }
}

식별자 삭제

인스턴스 ID를 삭제하는 방법은 Firebase 설치 ID를 삭제하는 방법으로 대체됩니다. 예를 들어:

전에

빠른

InstanceID.instanceID().deleteID { error in
  if let error = error {
    print("Error deleting instance ID: \(error)")
  }
}

오브젝티브-C

[FIRInstanceID instanceID] deleteIDWithHandler:^(NSError *error) {
  if error != nil {
    NSLog(@"Error deleting instance ID: %@", error);
  }
}];

기계적 인조 인간

FirebaseInstanceId.deleteInstanceId();

후에

빠른

func delete(completion: @escaping (Error?) -> Void)

오브젝티브-C

- (void)deleteWithCompletion:(nonnull void (^)(NSError *_Nullable))completion;

Java

FirebaseInstallations.getInstance().delete()
        .addOnCompleteListener(new OnCompleteListener<Void>() {
    @Override
    public void onComplete(@NonNull Task<Void> task) {
        if (task.isSuccessful()) {
            Log.d("Installations", "Installation deleted");
        } else {
            Log.e("Installations", "Unable to delete Installation");
        }
    }
});

Kotlin+KTX

FirebaseInstallations.getInstance().delete().addOnCompleteListener { task ->
    if (task.isComplete) {
        Log.d("Installations", "Installation deleted")
    }  else {
        Log.e("Installations", "Unable to delete Installation")
    }
}

FCM 등록 토큰 검색

Firebase 설치가 도입되기 전에 FCM 클라이언트는 인스턴스 ID에서 등록 토큰을 검색했습니다. 이제 FCM SDK는 등록 토큰을 검색하는 메서드를 제공합니다.

전에

Java

FirebaseInstanceId.getInstance().getInstanceId()
        .addOnCompleteListener(new OnCompleteListener<InstanceIdResult>() {
            @Override
            public void onComplete(@NonNull Task<InstanceIdResult> task) {
                if (!task.isSuccessful()) {
                    Log.w(TAG, "getInstanceId failed", task.getException());
                    return;
                }

                // Get new Instance ID token
                String token = task.getResult().getToken();

                // Log and toast
                String msg = getString(R.string.msg_token_fmt, token);
                Log.d(TAG, msg);
                Toast.makeText(MainActivity.this, msg, Toast.LENGTH_SHORT).show();
            }
        });

Kotlin+KTX

FirebaseInstanceId.getInstance().instanceId
        .addOnCompleteListener(OnCompleteListener { task ->
            if (!task.isSuccessful) {
                Log.w(TAG, "getInstanceId failed", task.exception)
                return@OnCompleteListener
            }

            // Get new Instance ID token
            val token = task.result?.token

            // Log and toast
            val msg = getString(R.string.msg_token_fmt, token)
            Log.d(TAG, msg)
            Toast.makeText(baseContext, msg, Toast.LENGTH_SHORT).show()
        })

빠른

Messaging.messaging().token { token, error in
  if let error = error {
    print("Error fetching remote FCM registration token: \(error)")
  } else if let token = token {
    print("Remote instance ID token: \(token)")
    self.remoteFCMTokenMessage.text = "Remote FCM registration token: \(token)"
  }
}

오브젝티브-C

[[FIRMessaging messaging] tokenWithCompletion:^(NSString * _Nullable token, NSError * _Nullable error) {
   if (error != nil) {
     NSLog(@"Error fetching the remote FCM registration token: %@", error);
   } else {
     NSLog(@"Remote FCM registration token: %@", token);
     NSString* message =
       [NSString stringWithFormat:@"FCM registration token: %@", token];
     self.remoteFCMTokenMessage.text = message;
   }
 }];

후에

Java

FirebaseMessaging.getInstance().getToken()
    .addOnCompleteListener(new OnCompleteListener<String>() {
        @Override
        public void onComplete(@NonNull Task<String> task) {
          if (!task.isSuccessful()) {
            Log.w(TAG, "Fetching FCM registration token failed", task.getException());
            return;
          }

          // Get new FCM registration token
          String token = task.getResult();

          // Log and toast
          String msg = getString(R.string.msg_token_fmt, token);
          Log.d(TAG, msg);
          Toast.makeText(MainActivity.this, msg, Toast.LENGTH_SHORT).show();
        }
    });

Kotlin+KTX

FirebaseMessaging.getInstance().token.addOnCompleteListener(OnCompleteListener { task ->
    if (!task.isSuccessful) {
        Log.w(TAG, "Fetching FCM registration token failed", task.exception)
        return@OnCompleteListener
    }

    // Get new FCM registration token
    val token = task.result

    // Log and toast
    val msg = getString(R.string.msg_token_fmt, token)
    Log.d(TAG, msg)
    Toast.makeText(baseContext, msg, Toast.LENGTH_SHORT).show()
})

빠른

Messaging.messaging().token { token, error in
  if let error = error {
    print("Error fetching FCM registration token: \(error)")
  } else if let token = token {
    print("FCM registration token: \(token)")
    self.fcmRegTokenMessage.text  = "Remote FCM registration token: \(token)"
  }
}

오브젝티브-C

[[FIRMessaging messaging] tokenWithCompletion:^(NSString *token, NSError *error) {
  if (error != nil) {
    NSLog(@"Error getting FCM registration token: %@", error);
  } else {
    NSLog(@"FCM registration token: %@", token);
    self.fcmRegTokenMessage.text = token;
  }
}];