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

Firebase 설치 관리

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

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

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

Firebase Cloud Messaging은 Firebase 설치 ID를 사용하여 메시지 전달 대상 장치를 지정합니다.

Firebase 인앱 메시지

Firebase 인앱 메시지는 Firebase 설치 ID를 사용하여 메시지 전달 대상 장치를 지정합니다.

Firebase 성능 모니터링

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

Firebase 원격 구성

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

Firebase ML

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

Firebase 사용자 세분화 스토리지

Firebase User Segmentation Storage는 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 모듈과 앱 대리인이 사용하는 다른 모든 FirebaseCore 모듈 을 가져옵니다. 예를 들어 Cloud Firestore 및 인증을 사용하려면 다음과 같이 하세요.

    SwiftUI

    import SwiftUI
    import FirebaseCore
    import FirebaseFirestore
    import FirebaseAuth
    // ...
          

    빠른

    import FirebaseCore
    import FirebaseFirestore
    import FirebaseAuth
    // ...
          

    목표-C

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

    SwiftUI

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

    빠른

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

    목표-C

    // Use Firebase library to configure APIs
    [FIRApp configure];
  5. SwiftUI를 사용하는 경우 애플리케이션 대리자를 생성하고 UIApplicationDelegateAdaptor 또는 NSApplicationDelegateAdaptor 를 통해 App 구조체에 연결해야 합니다. 앱 대리자 스위즐링도 비활성화해야 합니다. 자세한 내용은 SwiftUI 지침 을 참조하십시오.

    SwiftUI

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

기계적 인조 인간

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

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

자바스크립트

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

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

<script src="/__/firebase/9.16.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를 사용하여 설치를 식별하는 모든 Firebase 서비스의 라이브 및 백업 시스템에서 180일 이내에 제거됩니다. 이 프로세스는 삭제 및 보존에 관한 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).

Node.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 테스트를 설계할 때 설치 인증 토큰을 사용하여 대상 테스트 기기를 인증할 수 있습니다.

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

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

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

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

빠른

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 설치로 마이그레이션해야 합니다.

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

  • Instance 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;
  }
}];