Catch up on everthing we announced at this year's Firebase Summit. Learn more

נהל התקנות Firebase

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

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

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

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

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

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

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

תחזיות Firebase

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

Google Analytics עבור Firebase

Google Analytics for Firebase משתמש בנתונים כדי לספק ניתוח ופרטי ייחוס. המידע המדויק שנאסף עשוי להשתנות בהתאם למכשיר ולסביבה.

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

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

Firebase ML

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

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

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

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

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

iOS+

  1. מוסיפים את התלות עבור התקנות Firebase כדי Podfile שלך:
    pod 'Firebase/Installations'
  2. הפעלת pod install ולפתוח את יצר .xcworkspace הקובץ.
  3. ייבא את מודול Firebase ב שלך UIApplicationDelegate :

    מָהִיר

    import Firebase

    Objective-C

    @import Firebase;
  4. & Nbsp הגדר FirebaseApp משותף למשל, בדרך כלל של האפליקציה שלך application:didFinishLaunchingWithOptions: השיטה:

    מָהִיר

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

    Objective-C

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

דְמוּי אָדָם

מוסיפים את התלות של מתקנים Firebase Android SDK כדי מודול שלך (ברמת האפליקציה) קובץ Gradle (בדרך כלל app/build.gradle ):

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

JavaScript

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

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

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

מחק התקנה של Firebase

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

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

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

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

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

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

מָהִיר

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

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

קוטלין+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();

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

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

לאחר הוספת ה-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. לדוגמה, כדי לבצע בדיקות במהלך פיתוח Firebase In-App Messaging, אתה יכול לזהות ולמקד את מכשיר הבדיקה הנכון באמצעות מזהה ההתקנה שלו Firebase.

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

מָהִיר

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

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

קוטלין+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);

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

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

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

  • מזהה ההתקנה של Firebase
  • הפרויקט קשור ( projectNumber )
  • מזהה האפליקציה הקשורים Firebase ( 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)")
})

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

קוטלין+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")
        }
    }

JavaScript

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

עקוב אחר מחזור החיים של מזהה ההתקנה של 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
  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 וו.

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

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

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

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

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

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

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

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

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

קוטלין+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)")
}

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

קוטלין+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");
        }
    }
});

קוטלין+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();
            }
        });

קוטלין+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();
        }
    });

קוטלין+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;
  }
}];