Firebase yüklemelerini yönetme

Firebase Kurulumlar hizmeti (FIS), Firebase uygulamasının her yüklü örneği için bir Firebase kurulum kimliği (FID) sağlar. Firebase Kurulum kimliği, aşağıdaki Firebase hizmetleri tarafından dahili olarak kullanılır:

Firebase hizmeti Firebase yükleme işlevi
Firebase Cloud Messaging

Firebase Cloud Messaging, mesaj yayınlamak için cihazları hedeflemek amacıyla Firebase kurulum kimliklerini kullanır.

Firebase Crashlytics

Firebase Crashlytics, uygulama örneğinin Firebase yükleme kimliğindeki değişikliklere göre Crashlytics yükleme UUID'sini döndürür. Gelecekte, kilitlenme raporlama ve kilitlenme yönetimi hizmetlerini iyileştiren özellikleri etkinleştirmek için yükleme kimliği kullanılabilir.

Firebase In-App Messaging

Firebase In-App Messaging, mesaj yayınlamak için cihazları hedeflemek amacıyla Firebase kurulum kimliklerini kullanır.

Firebase Performance Monitoring

Performance Monitoring, erişim kalıplarının yeterince anonim olmasını sağlamak için ağ kaynaklarına erişen benzersiz Firebase yüklemelerinin sayısını hesaplamak amacıyla Firebase yükleme kimliklerini kullanır. Ayrıca, performans etkinliği raporlama oranını yönetmek için Firebase Remote Config ile birlikte Firebase kurulum kimliklerini de kullanır.

Firebase Remote Config

Remote Config, son kullanıcı cihazlarına döndürülecek yapılandırma değerlerini seçmek için Firebase yükleme kimliklerini kullanır.

Firebase ML

Firebase ML, uygulama örnekleriyle etkileşimde bulunurken (ör. geliştirici modellerini uygulama örneklerine dağıtmak için) cihaz kimlik doğrulaması yapmak amacıyla kurulum kimlik doğrulama jetonları adlı kimlik bilgilerini kullanır.

Firebase Kullanıcı Segmentasyonu Depolama Alanı

Firebase Kullanıcı Segmentasyonu Depolama Alanı, Firebase yükleme kimliklerini ve bunları kullanan diğer Firebase hizmetlerine hedefleme bilgileri sağlamak için ilgili özellikleri ve segmentleri depolar.

Firebase hizmetleri genellikle geliştiricilerin doğrudan FIS API ile etkileşim kurmasını gerektirmeden Firebase kurulum hizmetini kullanır. Ancak uygulama geliştiricilerin doğrudan FIS API'yi çağırması gerekebilecek durumlar vardır. Örneğin:

  • Bir Firebase yüklemesini ve yüklemeye bağlı verileri silmek için.
  • Belirli uygulama yüklemelerini hedeflemek için tanımlayıcıları (Firebase yükleme kimlikleri) almak
  • Firebase yüklemelerinin kimliğini doğrulamak için yükleme kimlik doğrulama jetonlarını almak.

FIS API'sini doğrudan çağırmaya başlamak için SDK'yı uygulamanıza ekleyin.

Uygulamanıza Firebase yükleme SDK'sını ekleme

iOS+

  1. Podfile dosyanıza Firebase kurulumlarının bağımlılığını ekleyin:
    pod 'FirebaseInstallations'
  2. pod install dosyasını çalıştırın ve oluşturulan .xcworkspace dosyasını açın.
  3. FirebaseCore modülünü ve uygulama temsilcinizin kullandığı diğer tüm Firebase modüllerini UIApplicationDelegate dosyanıza aktarın. Örneğin, Cloud Firestore ve Authentication kullanmak için:

    SwiftUI

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

    Swift

    import FirebaseCore
    import FirebaseFirestore
    import FirebaseAuth
    // ...
          

    Objective-C

    @import FirebaseCore;
    @import FirebaseFirestore;
    @import FirebaseAuth;
    // ...
          
  4. Uygulama temsilcinizin application(_:didFinishLaunchingWithOptions:) yönteminde bir FirebaseApp shared instance yapılandırın:

    SwiftUI

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

    Swift

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

    Objective-C

    // Use Firebase library to configure APIs
    [FIRApp configure];
  5. SwiftUI kullanıyorsanız bir uygulama temsilcisi oluşturmanız ve UIApplicationDelegateAdaptor veya NSApplicationDelegateAdaptor aracılığıyla App yapınıza eklemeniz gerekir. Ayrıca uygulama temsilcisi değiştirme işlemini de devre dışı bırakmanız gerekir. Daha fazla bilgi için SwiftUI talimatlarına bakın.

    SwiftUI

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

Android

Firebase yükleme Android SDK'sına ait bağımlılıkapp/build.gradle

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

JavaScript

Web uygulamanızın barındırma şekline bağlı olarak yapılandırmanız otomatik olarak ele alınabilir veya Firebase yapılandırma nesnenizi güncellemeniz gerekebilir.

Örneğin, bağımlılıkları index.html dosyasına eklediyseniz bağımlılığı <head> öğesine ekleyin:

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

Flutter

  1. Firebase yükleme eklentisini yüklemek için Flutter projenizin kök dizininden aşağıdaki komutu çalıştırın:

    flutter pub add firebase_app_installations
    
  2. Projenizi yeniden oluşturun:

    flutter run
    
  3. Firebase yükleme eklentisini içe aktarın:

    import 'package:firebase_app_installations/firebase_app_installations.dart';
    

Firebase yüklemesini silme

Firebase yüklemeyle ilişkili veriler genellikle kimliği tanımlamaz. Yine de kullanıcılara bu verileri yönetme ve silme seçeneği sunmak yararlı olabilir.

Firebase yükleme kimlikleri, her uygulamanın her yüklemesi için farklıdır; aynı cihazdaki farklı uygulamaların farklı Firebase yükleme kimlikleri vardır. Firebase yükleme kimlikleri, uygulama yüklemelerini ve bu uygulama yüklemeleriyle ilişkili verileri tanımlar.

Bir yükleme kimliğini sildiğinizde, söz konusu yükleme kimliğine bağlı veriler 180 gün içinde yüklemeleri tanımlamak için Firebase yükleme kimliklerini kullanan tüm Firebase hizmetlerinin canlı ve yedek sistemlerinden kaldırılır. Bu işlem, Google'ın silme ve saklama ile ilgili beyanında genel hatlarıyla açıklanmıştır.

Uygulamanızda FID oluşturan tüm hizmetleri devre dışı bırakmadığınız sürece FIS birkaç gün içinde yeni bir kimlik oluşturur. Firebase, yeni oluşturulan kimliği yeni bir Firebase yüklemesi olarak kabul eder ve bu kimliği önceki kimlikle veya verilerle hiçbir şekilde ilişkilendirmez.

İstemci API çağrısıyla FID silme

Firebase hizmetleri tarafından oluşturulan FID'leri silmek için Firebase yükleme SDK'sından ilgili yöntemi çağırın:

Swift

do {
  try await Installations.installations().delete()
  print("Installation deleted");
} catch {
  print("Error deleting installation: \(error)")
}

Objective-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

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

JavaScript

await firebase.installations().delete();

Dart

await FirebaseInstallations.instance.delete();

Sunucu API çağrısıyla FID silme

Bir FID'yi sunucu API çağrısıyla silmek için, henüz yapmadıysanız Firebase Admin SDK'sını sunucunuza ekleyin.

SDK eklendikten sonra, tercih ettiğiniz dilde silme işlevini çağırarak FID'leri silin (not: Node.js hariç olmak üzere bu yöntemler, örnek kimliği adlandırmasını yansıtır. Ancak bunların tümü, mevcut herhangi bir Firebase SDK'sıyla çağrıldığında FID'yi siler.

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();

Python

  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)

Go

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)
}

Bir Firebase yükleme kimliğini sunucu API çağrısıyla sildiğinizde Firebase hizmetleri, söz konusu yükleme kimliğine bağlı verileri silme işlemini başlatır, 1-2 gün boyunca bu kimlik için yeni veri kabul etmeyi durdurur ve ardından istemci uygulamasını kimliğin silindiği konusunda bilgilendirir. Firebase, istemci uygulamasını bilgilendirene kadar uygulamanın bazı hizmetleri kimliği hedeflemeye devam edebilir. Örneğin, bir Firebase yüklemesi birkaç saat boyunca FCM bildirimleri almaya devam edebilir.

Mevcut Firebase kurulum kimliğini silmek ve Firebase hizmetlerini hemen yeni ve alakasız bir kimlikle kullanmak istiyorsanız silme işlemini yapmak için istemci API'sini kullanın.

İstemci tanımlayıcılarını alma

Uygulamanızın belirli yüklemelerini tanımlamanız gerekiyorsa Firebase yükleme kimliğini alarak bunu yapabilirsiniz. Örneğin, BigQuery içe aktarma işlemi için uygulama yükleme segmentleri oluşturmak veya Firebase In-App Messaging geliştirme sırasında test yapmak için ilgili Firebase yükleme kimliklerini kullanarak doğru cihazları tanımlayabilir ve hedefleyebilirsiniz.

Firebase yükleme kimliğini almak için:

Swift

do {
  let id = try await Installations.installations().installationID()
  print("Installation ID: \(id)")
} catch {
  print("Error fetching id: \(error)")
}

Objective-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

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

JavaScript

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

Dart

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

Yükleme yetkilendirme jetonlarını alma

Firebase hizmetleri, FIS'den alınan kimlik jetonlarıyla Firebase kurulumlarının kimliğini doğrulayabilir. Örneğin, Remote Config için A/B testleri tasarlarken bir yükleme kimlik doğrulama jetonu kullanarak hedeflenen bir test cihazının kimliğini doğrulayabilirsiniz.

Yükleme kimlik doğrulama jetonu, bir yüklemeyle ilgili aşağıdaki bilgileri içeren JSON web jetonu (JWT) biçiminde kısa ömürlü bir taşıyıcı jetonudur:

  • Firebase kurulum kimliği
  • İlişkili proje (projectNumber)
  • İlişkili Firebase uygulama kimliği (appId)
  • Jetonun son kullanma tarihi

Yükleme kimlik doğrulama jetonu iptal edilemez ve son kullanma tarihine kadar geçerli kalır. Varsayılan jeton geçerlilik süresi bir haftadır.

Yükleme yetkilendirme jetonu almak için:

Swift

do {
  let result = try await Installations.installations()
    .authTokenForcingRefresh(true)
  print("Installation auth token: \(result.authToken)")
} catch {
  print("Error fetching token: \(error)")
}

Objective-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

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

JavaScript

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

Dart

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

Firebase yükleme kimliği yaşam döngüsünü izleme

Bir uygulamanın normal çalışması sırasında Firebase yükleme kimlikleri (FID'ler) özel izleme gerektirmez. Ancak FID'leri açıkça alan ve kullanan uygulamalar, FID'nin olası silinmesini veya rotasyonunu izlemek için mantık eklemelidir. FID'lerin silinebileceği veya döndürülebileceği bazı durumlar şunlardır:

  • Uygulamanın kaldırılması veya yeniden yüklenmesi (ör. son kullanıcı yeni bir cihaza yüklediğinde).
  • Son kullanıcı, uygulamanın veya cihazın önbelleğini temizler.
  • FID silme işlemi, uygulamanın etkin olmaması nedeniyle arka uçta tetiklenir (şu anda bunun eşiği 270 gün boyunca etkinlik olmamasıdır).

Bu tür durumlarda uygulamalara FID rotasyonu veya silme işlemi uygulandığında yeni bir FID atanır. Ayrıca, silinen bir FID ile ilişkili kurulum kimlik doğrulama jetonu, geçerlilik süresinden bağımsız olarak silinir ve yeni bir kurulum kimlik doğrulama jetonuyla değiştirilir.

Uygulamalar bu değişiklikleri izleyebilir ve buna göre yanıt verebilir.

FID rotasyonunu izlemek için:

Swift

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

Objective-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];
}];

Yeni bir FID atandığında varsayılan NSNotificationCenter'a NSNotificationName.InstallationIDDidChange adlı bir NSNotification gönderilir.

Android

Kotlin ve Java istemcileri, yeni FID'yi almak için başarısız çağrılara yanıt vermek üzere yeniden deneme mantığı eklemelidir.

JavaScript

Web uygulamaları onIdChange kancasına abone olabilir.

Yeni bir FID oluşturulduğunda, abone olunan geri çağırma işlevi tetiklenir:

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

Dart

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

Örnek kimliğinden Firebase kurulumlarına taşıma

Firebase yüklemelerinin kullanıma sunulmasından önce Firebase, uygulama yüklemelerinin tanımlayıcıları için Instance ID SDK'sını kullanıyordu. Firebase yüklemeleri, güvenilirlik, performans ve güvenlik açısından Instance ID'ye kıyasla önemli avantajlar sağlar. Instance ID SDK'sına bağlı Firebase uygulamaları, Firebase yüklemelerine taşınmalıdır.

Taşıma işlemi, uygulamanıza göre değişiklik gösterir:

  • Doğrudan Instance ID API'lerini çağırmayan uygulamalar, SDK sürümlerini güncelleyerek geçiş yapabilir. Çoğu Firebase uygulaması bu kategoriye girer.

  • Örnek kimliğe açıkça API çağrısı yapan uygulamalar, SDK sürümlerini güncellemelidir ve örnek kimlik yöntemlerini Firebase kurulumları veya FCM eşdeğerleriyle değiştirmek için kod değişiklikleri yapmalıdır. Uygulamanız FCM kayıt jetonlarını almak için Instance-ID'yi kullanıyorsa veya uygulama örneklerini hedeflemek ya da başka bir amaç için Instance-ID'yi açıkça kullanıyorsa uygulama kodunuzu güncellemeniz gerekir.

FIS şu anda eski tanımlayıcı Firebase Instance ID ile geriye dönük uyumludur. IID silme, aşağıdaki Firebase SDK'larıyla veri silme isteğinde bulunmanın alternatif bir yöntemidir:

  • iOS 6.14.0 ve önceki sürümler
  • 27 Şubat 2020'den önceki Android SDK'ları

Bu, uygulamaların Firebase yüklemelerine taşınmasının zorunlu olmadığı anlamına gelir. Ancak bu işlemi yapmanız önemle tavsiye edilir.

Firebase yüklemeleri için minimum SDK sürümlerine yükseltme

Instance ID'den Firebase kurulumlarına geçmek için uygulamalarınızın aşağıdaki Firebase SDK'larının en azından listelenen minimum sürüm numaralarını kullandığından emin olun:

Firebase SDK'sı Minimum Android sürümü Minimum iOS sürümü
Firebase Cloud Messaging v20.3.0 v6.34.0
Remote Config v19.2.0 v6.24.0
Firebase için Google Analytics \ (Measurement SDK'sı) v17.4.4 v6.18.0
Uygulama İçi Mesajlaşma v19.0.7 v6.24.0
Performance Monitoring v19.0.8 v6.21.0
Crashlytics v17.2.1 v6.23.0
ML Kit v22.1.2 v6.28.0

Örnek kimliği API'lerini açıkça çağıran kodu güncelleme

Android veya Apple uygulamanız doğrudan Instance ID SDK yöntemlerini kullanıyorsa bu kullanımı Firebase yükleme SDK'sındaki veya FCM SDK'sındaki aynı alternatiflerle değiştirebilirsiniz.

Tanımlayıcı alma

Örnek kimliği alma yöntemleri, yükleme kimliği alma yöntemleriyle değiştirildi. Örneğin:

Önce

Swift

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)"
  }
}

Objective-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

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

Sonra

Swift

do {
  let id = try await Installations.installations().installationID()
  print("Installation ID: \(id)")
} catch {
  print("Error fetching id: \(error)")
}

Objective-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

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

Tanımlayıcıları silme

Örnek kimliklerini silme yöntemleri, Firebase kurulum kimliklerini silme yöntemleriyle değiştirilir. Örneğin:

Önce

Swift

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

Objective-C

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

Android

FirebaseInstanceId.deleteInstanceId();

Sonra

Swift

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

Objective-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

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

FCM kayıt jetonunu alma

Firebase Kurulumları kullanıma sunulmadan önce FCM istemcileri, kayıt jetonlarını Örnek Kimliği'nden alıyordu. FCM SDK'sı artık kayıt jetonunu alma yöntemleri sunuyor.

Önce

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

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()
        })

Swift

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)"
  }
}

Objective-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;
   }
 }];

Sonra

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

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()
})

Swift

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)"
  }
}

Objective-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;
  }
}];