ניהול התקנות Firebase

שירות התקנות Firebase (FIS) מספק מזהה התקנה של Firebase (FID) עבור כל מופע מותקן של אפליקציית Firebase. מזהה ההתקנה של Firebase נמצא בשימוש פנימי על ידי שירותי Firebase אלה:

שירות Firebase פונקציונליות של התקנות Firebase
Firebase Cloud Messaging

Firebase Cloud Messaging משתמש במזהי התקנה של Firebase כדי למקד למכשירים להעברת הודעות.

Firebase Crashlytics

Firebase Crashlytics מסובב את ה-UUID של התקנת Crashlytics על סמך שינויים במזהה ההתקנה של Firebase של מופע האפליקציה. בעתיד, מזהה ההתקנה עשוי לשמש כדי להפעיל תכונות המשפרות את שירותי דיווח קריסות וניהול קריסות.

הודעות באפליקציה של Firebase

Firebase In-App Messaging משתמש במזהי התקנה של Firebase כדי למקד למכשירים להעברת הודעות.

ניטור ביצועי Firebase

ניטור ביצועים משתמש במזהי התקנה של Firebase כדי לחשב את מספר ההתקנות הייחודיות של Firebase שניגשות למשאבי רשת, כדי להבטיח שדפוסי הגישה אנונימיים מספיק. הוא גם משתמש במזהי התקנה של Firebase עם Firebase Remote Config כדי לנהל את קצב הדיווח על אירועי ביצועים.

תצורה מרחוק של Firebase

Config מרחוק משתמש במזהי התקנה של Firebase כדי לבחור ערכי תצורה שיחזרו למכשירי משתמש קצה.

Firebase ML

אישורים הנקראים אסימוני התקנה משמשים את Firebase ML לאימות מכשירים בעת אינטראקציה עם מופעי אפליקציה, למשל, כדי להפיץ מודלים של מפתחים למופעי אפליקציה.

אחסון לפילוח משתמשים של Firebase

Firebase User Segmentation Storage מאחסן מזהי התקנה של Firebase ומאפיינים ופלחים קשורים כדי לספק מידע מיקוד לשירותי Firebase אחרים שמשתמשים בהם.

בדרך כלל, שירותי Firebase משתמשים בשירות ההתקנות של Firebase מבלי לדרוש מהמפתחים אינטראקציה ישירה עם FIS API. עם זאת, ישנם מקרים שבהם מפתחי אפליקציות עשויים לרצות להתקשר ישירות ל-FIS API, כגון:

  • כדי למחוק התקנה של Firebase ונתונים הקשורים להתקנה.
  • כדי לאחזר מזהים (מזהי התקנה של Firebase) כדי למקד להתקנות אפליקציה ספציפיות.
  • כדי לאחזר אסימוני אישור התקנה כדי לאמת התקנות Firebase.

כדי להתחיל עם קריאה ישירה ל-FIS API, הוסף את ה-SDK לאפליקציה שלך.

הוסף את ה-SDK של התקנות Firebase לאפליקציה שלך

iOS+

  1. הוסף את התלות עבור התקנות Firebase ל-Podfile שלך:
    pod 'FirebaseInstallations'
  2. הפעל את pod install ופתח את קובץ .xcworkspace שנוצר.
  3. ייבא את מודול FirebaseCore ב- UIApplicationDelegate שלך, כמו גם כל מודולי Firebase אחרים שנציג האפליקציה שלך משתמש בו. לדוגמה, כדי להשתמש ב-Cloud Firestore ובאימות:

    SwiftUI

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

    מָהִיר

    import FirebaseCore
    import FirebaseFirestore
    import FirebaseAuth
    // ...
          

    Objective-C

    @import FirebaseCore;
    @import FirebaseFirestore;
    @import FirebaseAuth;
    // ...
          
  4. הגדר מופע משותף FirebaseApp בשיטת application(_:didFinishLaunchingWithOptions:) של נציג האפליקציה שלך:

    SwiftUI

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

    מָהִיר

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

    Objective-C

    // Use Firebase library to configure APIs
    [FIRApp configure];
  5. אם אתה משתמש ב- SwiftUI, עליך ליצור נציג יישום ולצרף אותו למבנה App שלך באמצעות UIApplicationDelegateAdaptor או NSApplicationDelegateAdaptor . עליך גם להשבית את העברת נציגי האפליקציה. למידע נוסף, עיין בהוראות של 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.2.0'

JavaScript

בהתאם לאופן האחסון של יישום האינטרנט שלך, ייתכן שהתצורה שלך תטופל אוטומטית או שתצטרך לעדכן את אובייקט התצורה של Firebase .

לדוגמה, אם התלות שלך מתווספות ב-index.html, הוסף את התלות באלמנט <head>:

<script src="/__/firebase/10.9.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 שונים עבור כל התקנה של כל אפליקציה; לאפליקציות שונות באותו מכשיר יש מזהי התקנה שונים של Firebase. מזהי התקנת Firebase מזהים התקנות אפליקציה ונתונים הקשורים לאותן התקנות אפליקציה.

כאשר אתה מוחק מזהה התקנה, הנתונים הקשורים למזהה ההתקנה הזה יוסרו ממערכות ההפעלה והגיבוי של כל שירותי Firebase המשתמשים במזהי התקנה של Firebase כדי לזהות התקנות בתוך 180 יום. תהליך זה מתואר ברמה גבוהה בהצהרה של Google על מחיקה ושמירה .

אלא אם תשבית את כל שירותי יצירת FID באפליקציה שלך, FIS יוצר מזהה חדש תוך מספר ימים. Firebase מחשיב את המזהה החדש שנוצר כהתקנה חדשה של Firebase, ואינו משייך אותו למזהה או לנתונים הקודמים בשום אופן.

מחק FID עם קריאת API של הלקוח

כדי למחוק FIDs שנוצרו על ידי שירותי Firebase, קרא את השיטה המתאימה מ-Firebase installations SDK:

מָהִיר

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+KTX

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

מחק FID עם קריאת API לשרת

כדי למחוק FID עם קריאת API לשרת, הוסף את Firebase Admin SDK לשרת שלך , אם עדיין לא עשית זאת.

לאחר הוספת ה-SDK, מחק FIDs באמצעות קריאה לפונקציית המחיקה בשפה הרצויה שלך (הערה: פרט ל-Node.js, שיטות אלו משקפות שמות של מזהה מופע. עם זאת, כולן למעשה מוחקות את ה-FID כאשר קוראים עם כל Firebase נוכחי 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)
}

כאשר אתה מוחק מזהה התקנה של Firebase עם קריאת API לשרת, שירותי Firebase מתחילים בתהליך למחיקת הנתונים הקשורים למזהה ההתקנה הזה, מפסיקים לקבל נתונים חדשים עבור מזהה זה במהלך 1-2 ימים, ולאחר מכן מודיעים לאפליקציית הלקוח שהזיהוי נמחק. עד ש-Firebase יודיע לאפליקציית הלקוח, חלק משירותי האפליקציה עדיין עשויים למקד את המזהה - לדוגמה, התקנה של Firebase עשויה להמשיך לקבל התראות FCM למשך מספר שעות.

אם ברצונך למחוק את מזהה ההתקנה הנוכחי של Firebase ולהשתמש מיד בשירותי Firebase עם מזהה חדש ולא קשור, השתמש בממשק API של הלקוח כדי לטפל במחיקה.

אחזר מזהי לקוחות

אם יש לך דרישה לזהות התקנות מסוימות של האפליקציה שלך, תוכל לעשות זאת על ידי אחזור מזהה ההתקנה של Firebase. לדוגמה, כדי ליצור פלחים של התקנות אפליקציה לייבוא ​​BiqQuery, או לבצע בדיקות במהלך פיתוח Firebase In-App Messaging, תוכל לזהות ולמקד את המכשירים הנכונים באמצעות מזהי ההתקנה המתאימים של Firebase.

כדי לאחזר מזהה התקנה של Firebase:

מָהִיר

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

JavaScript

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

Dart

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

אחזר אסימוני אישור התקנה

שירותי Firebase יכולים לאמת התקנות Firebase באמצעות אסימוני אימות שאוחזרו מ-FIS. לדוגמה, בעת תכנון בדיקות A/B עבור Remote Config, אתה יכול לאמת התקן בדיקה ממוקד באמצעות אסימון אישור התקנה.

אסימון אישור התקנה הוא אסימון נושא קצר מועד בפורמט JSON web token (JWT) המכיל את המידע הבא עבור התקנה:

  • מזהה ההתקנה של Firebase
  • הפרויקט המשויך ( projectNumber )
  • מזהה האפליקציה המשויך ל-Firebase ( appId )
  • תאריך התפוגה של האסימון

לא ניתן לבטל אסימון אישור התקנה, והוא נשאר בתוקף עד תאריך התפוגה שלו. אורך חיי האסימון המוגדר כברירת מחדל הוא שבוע אחד.

כדי לאחזר אסימון אישור התקנה:

מָהִיר

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+KTX

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

במהלך הפעולה הרגילה של אפליקציה, מזהי התקנת Firebase (FID) אינם דורשים ניטור מיוחד. עם זאת, אפליקציות המאחזרות ומשתמשות במפורש ב-FID צריכות להוסיף היגיון כדי לנטר את המחיקה או הסיבוב הפוטנציאליים של ה-FID. להלן כמה מקרים שבהם ניתן למחוק או לסובב את FID:

  • הסרה או התקנה מחדש של האפליקציה, למשל כאשר משתמש קצה מתקין במכשיר חדש.
  • משתמש הקצה מנקה את המטמון של האפליקציה או המכשיר.
  • מחיקת FID מופעלת ב-backend עקב חוסר פעילות של האפליקציה (כרגע הסף לכך הוא 270 ימים של חוסר פעילות).

כאשר יישומים חווים סיבוב או מחיקה של FID במקרים מסוג זה, מוקצה להם FID חדש. כמו כן, אסימון אישור ההתקנה המשויך ל-FID שנמחק נמחק, ללא קשר לבשלותו שלו, ומוחלף באסימון אישור התקנה חדש.

אפליקציות יכולות לעקוב אחר שינויים אלה ולהגיב בהתאם.

כדי לעקוב אחר סיבוב FID:

מָהִיר

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

NSNotification בשם NSNotificationName.InstallationIDDidChange מתפרסמת ברירת המחדל של NSNotificationCenter בכל פעם שמקצים FID חדש.

דְמוּי אָדָם

לקוחות Kotlin ו-Java צריכים להוסיף לוגיקת ניסיון חוזר כדי להגיב על שיחות שנכשלו כדי לאחזר את ה-FID החדש.

JavaScript

אפליקציות אינטרנט יכולות להירשם ל- onIdChange hook.

בכל פעם שנוצר FID חדש, ההתקשרות חזרה המנויים מופעלת:

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

Dart

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

העבר ממזהה מופע להתקנות Firebase

לפני הצגת התקנות Firebase, Firebase הסתמכה על ה-SDK של מזהה מופעים עבור מזהים של התקנות אפליקציה. התקנות Firebase מספקות יתרונות משמעותיים על פני מזהה מופע באמינות, ביצועים ואבטחה. אפליקציות Firebase התלויות ב-SDK של מזהה מופע צריכות לעבור להתקנות Firebase.

תהליך ההעברה שונה בהתבסס על האפליקציה שלך:

  • אפליקציות שאינן מתקשרות ישירות לממשקי API של מזהה מופעים יכולות להעביר על ידי עדכון גרסאות ה-SDK שלהן . רוב אפליקציות Firebase נכנסות לקטגוריה זו.

  • אפליקציות שמבצעות במפורש קריאות API למזהה מופע חייבות לעדכן גרסאות SDK ולבצע שינויי קוד כדי להחליף את שיטות מזהה המופע בהתקנות Firebase או המקבילות שלהן ל-FCM. אם האפליקציה שלך משתמשת במזהה מופע כדי לאחזר אסימוני רישום של FCM או משתמשת במפורש במזהה מופע כדי למקד למופעי אפליקציה או לכל מטרה אחרת, תצטרך לעדכן את קוד היישום שלך.

נכון לעכשיו, FIS תואם לאחור עם המזהה הישן של Firebase Instance ID. מחיקת IID היא שיטה חלופית לבקשת מחיקת נתונים עם ערכות ה-SDK של Firebase:

  • iOS 6.14.0 ומטה
  • ערכות SDK של Android לפני 27 בפברואר 2020

המשמעות היא שאפליקציות אינן נדרשות לעבור להתקנות Firebase; עם זאת, מומלץ מאוד לעשות זאת.

שדרוג לגרסאות SDK מינימליות עבור התקנות Firebase

כדי לעבור ממזהה מופע להתקנות Firebase, ודא שהאפליקציות שלך משתמשות לפחות במספרי הגרסאות המינימליים המפורטים של ערכות ה-SDK הבאות של Firebase:

Firebase SDK מינימום גרסת אנדרואיד גרסת iOS מינימלית
Firebase Cloud Messaging v20.3.0 v6.34.0
תצורה מרחוק v19.2.0 v6.24.0
Google Analytics for Firebase \ (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

עדכון קוד שקורא במפורש ל-Instance ID APIs

אם אפליקציית Android או Apple שלך ​​משתמשת ישירות בשיטות SDK של Instance ID, תוכל להחליף את השימוש הזה בחלופות זהות ב-SDK של התקנות Firebase או ב-FCM SDK.

אחזור מזהה

שיטות לקבלת מזהי מופע מוחלפים בשיטות לקבלת מזהה התקנות. לדוגמה:

לפני

מָהִיר

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+KTX

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

לאחר

מָהִיר

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

מחיקת מזהה

שיטות למחיקת מזהי מופע מוחלפים בשיטות למחיקת מזהי התקנה של Firebase. לדוגמה:

לפני

מָהִיר

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

דְמוּי אָדָם

FirebaseInstanceId.deleteInstanceId();

לאחר

מָהִיר

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+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 שלפו אסימוני רישום ממזהה מופע. כעת, 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)"
  }
}

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

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

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