שירות ההתקנות (FIS) מספק מזהה התקנה (FID) לכל מופע מותקן של אפליקציית Firebase. מזהה ההתקנה משמש באופן פנימי בשירותי Firebase הבאים:FirebaseFirebaseFirebase
| שירות Firebase | Firebase התקנות |
|---|---|
| Firebase Cloud Messaging |
Firebase Cloud Messaging משתמש במזהי התקנה כדי לטרגט מכשירים למסירת הודעות.Firebase |
| Firebase Crashlytics |
הערך Firebase Crashlytics מסתובב Firebase Crashlytics בהתקנה UUID על סמך שינויים במזהה ההתקנה של מופע האפליקציה ב-Firebase.Crashlytics בעתיד, יכול להיות שנשתמש במזהה ההתקנה כדי להפעיל תכונות שישפרו את הדיווח על קריסות ואת שירותי ניהול הקריסות. |
| Firebase In-App Messaging |
Firebase In-App Messaging משתמש במזהי התקנה כדי לטרגט מכשירים למסירת הודעות.Firebase |
| Firebase Performance Monitoring |
Performance Monitoring משתמש במזהי התקנה של Firebase כדי לחשב את מספר ההתקנות הייחודיות של Firebase שניגשות למשאבי הרשת, כדי לוודא שדפוסי הגישה אנונימיים מספיק. המערכת משתמשת גם בFirebase מזהי התקנה עם Firebase Remote Config כדי לנהל את קצב הדיווח של אירועי הביצועים. |
| Firebase Remote Config |
Remote Config משתמש במזהי התקנה של Firebase כדי לבחור ערכי הגדרה להחזרה למכשירי משתמשי הקצה. |
| Firebase ML |
פרטי הכניסה שנקראים אסימוני אימות להתקנה משמשים את Firebase ML לאימות המכשיר בזמן אינטראקציה עם מופעים של אפליקציות, למשל כדי להפיץ מודלים למפתחים למופעים של אפליקציות. |
| אחסון של פילוח משתמשים ב-Firebase |
ב-Firebase User Segmentation Storage מאוחסנים Firebase מזהי התקנה ותכונות ופלחים קשורים, כדי לספק מידע על טירגוט לשירותים אחרים של Firebase שמשתמשים בהם. |
בדרך כלל, שירותי Firebase משתמשים בשירות Firebase installations בלי שמפתחים צריכים לבצע אינטראקציה ישירה עם FIS API. עם זאת, יש מקרים שבהם מפתחי אפליקציות ירצו להפעיל ישירות את FIS API, למשל:
- כדי למחוק התקנה של Firebase ונתונים שקשורים להתקנה.
- כדי לאחזר מזהים (Firebase מזהי התקנה) כדי לטרגט התקנות ספציפיות של אפליקציות.
- כדי לאחזר אסימוני אימות של התקנות ולאמת התקנות של Firebase.
כדי להתחיל להשתמש ב-FIS API ישירות, צריך להוסיף את ה-SDK לאפליקציה.
הוספת Firebase installations SDK לאפליקציה
iOS+
- מוסיפים את יחסי התלות של התקנות Firebase לקובץ Podfile:
pod 'FirebaseInstallations'
- מריצים את הפקודה
pod installופותחים את הקובץ.xcworkspaceשנוצר. - מייבאים את המודול
FirebaseCoreב-UIApplicationDelegate, וגם את כל מודולי Firebase האחרים שמשמשים את נציג האפליקציה. לדוגמה, כדי להשתמש ב-Cloud Firestore וב-Authentication:SwiftUI
import SwiftUI import FirebaseCore import FirebaseFirestore import FirebaseAuth // ...
Swift
import FirebaseCore import FirebaseFirestore import FirebaseAuth // ...
Objective-C
@import FirebaseCore; @import FirebaseFirestore; @import FirebaseAuth; // ...
- מגדירים מופע משותף בשיטה
application(_:didFinishLaunchingWithOptions:)של נציג האפליקציה:FirebaseAppSwiftUI
// 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];
- אם אתם משתמשים ב-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() } } } }
Android
מוסיפים את התלות ב-Firebase Installations Android SDK לקובץ Gradle של המודול (ברמת האפליקציה) (בדרך כלל app/build.gradle):
implementation 'com.google.firebase:firebase-installations:19.1.0'
JavaScript
בהתאם לאופן האירוח של אפליקציית האינטרנט, יכול להיות שההגדרה תטופל אוטומטית או שתצטרכו לעדכן את אובייקט ההגדרה של Firebase.
לדוגמה, אם יחסי התלות שלכם נוספו בקובץ index.html, מוסיפים את יחסי התלות ברכיב <head>:
<script src="/__/firebase/12.12.0/firebase-installations.js"></script>
Flutter
מתיקיית השורש של פרויקט Flutter, מריצים את הפקודה הבאה כדי להתקין את הפלאגין Firebase installations:
flutter pub add firebase_app_installationsבנייה מחדש של הפרויקט:
flutter runמייבאים את הפלאגין Firebase installations:
import 'package:firebase_app_installations/firebase_app_installations.dart';
מחיקת התקנה של Firebase
נתונים שקשורים להתקנה של Firebase בדרך כלל לא מאפשרים זיהוי אישי. עם זאת, כדאי לתת למשתמשים אפשרות לנהל ולמחוק את הנתונים האלה.
Firebase מזהי ההתקנה שונים לכל התקנה של כל אפליקציה. לאפליקציות שונות באותו מכשיר יש מזהי התקנה שונים.Firebase מזהי התקנה של אפליקציות משמשים לזיהוי התקנות של אפליקציות ונתונים שקשורים להתקנות האלה.Firebase
כשמוחקים מזהה התקנה, הנתונים שמשויכים למזהה ההתקנה הזה מוסרים ממערכות פעילות וממערכות גיבוי של כל שירותי Firebase שמשתמשים במזהי התקנה של Firebase כדי לזהות התקנות, תוך 180 יום. התהליך הזה מתואר ברמה גבוהה בהצהרה של Google בנושא מחיקה ושמירה.
אם לא תשביתו את כל השירותים שיוצרים מזהי FID באפליקציה, מערכת FIS תיצור מזהה חדש תוך כמה ימים. מערכת Firebase מתייחסת למזהה החדש שנוצר כFirebaseהתקנה חדשה, ולא מקשרת אותו למזהה הקודם או לנתונים הקודמים בשום צורה.
מחיקת FID באמצעות קריאה ל-API של הלקוח
כדי למחוק מזהי Firebase שנוצרו על ידי שירותי Firebase, צריך להפעיל את השיטה המתאימה מ-Firebase installations SDK:
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();
מחיקת FID באמצעות קריאה ל-API של השרת
כדי למחוק מזהה FID באמצעות קריאה ל-API של השרת, מוסיפים את SDK של Firebase לאדמינים לשרת, אם עדיין לא עשיתם זאת.
אחרי שמוסיפים את ה-SDK, מוחקים את מזהי ה-FID באמצעות קריאה לפונקציית המחיקה בשפה הרצויה (הערה: השיטות האלה משקפות את השמות של מזהי המופעים, למעט 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();
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)
המשך
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 מתחילים בתהליך למחיקת הנתונים שקשורים למספר ההתקנה הזה, מפסיקים לקבל נתונים חדשים למספר הזה במהלך יום או יומיים, ואז מודיעים לאפליקציית הלקוח שהמספר נמחק. עד ש-Firebase ישלח הודעה לאפליקציית הלקוח, יכול להיות שחלק מהשירותים של האפליקציה עדיין יטרגטו את המזהה – לדוגמה, יכול להיות שהתקנה של Firebase תמשיך לקבל FCMהתראות למשך כמה שעות.
אם רוצים למחוק את מזהה ההתקנה הנוכחי של Firebase ולהשתמש מיד בשירותי Firebase עם מזהה חדש שלא קשור למזהה הקודם, צריך להשתמש ב-API של הלקוח כדי לטפל במחיקה.
אחזור מזהי לקוחות
אם אתם צריכים לזהות התקנות ספציפיות של האפליקציה, אתם יכולים לעשות זאת על ידי אחזור Firebase מזהה ההתקנה. לדוגמה, כדי ליצור פלחים של התקנות אפליקציות לייבוא ל-BigQuery, או כדי לבצע בדיקות במהלך פיתוח, אפשר לזהות ולטרגט את המכשירים הנכונים באמצעות מזהי ההתקנה המתאימים.Firebase In-App MessagingFirebase
כדי לאחזר מזהה התקנה של Firebase:
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();
אחזור טוקנים של אימות להתקנה
שירותי Firebase יכולים לאמת התקנות של Firebase באמצעות טוקנים לאימות שנשלפים מ-FIS. לדוגמה, כשמעצבים בדיקות A/B ל-Remote Config, אפשר לאמת מכשיר בדיקה מטורגט באמצעות טוקן אימות של התקנה.
אסימון אימות להתקנה הוא אסימון bearer לזמן קצר בפורמט JSON Web Token (JWT) שמכיל את הפרטים הבאים להתקנה:
- מזהה ההטמעה Firebase
- הפרויקט המשויך (
projectNumber) - מזהה האפליקציה המשויכת ב-Firebase (
appId) - תאריך התפוגה של הטוקן
אי אפשר לבטל את טוקן ההרשאה להתקנה, והוא נשאר בתוקף עד לתאריך התפוגה שלו. משך החיים של האסימון הוא שבוע כברירת מחדל.
כדי לאחזר טוקן אימות של התקנה:
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
במהלך הפעולה הרגילה של אפליקציה, Firebaseמזהי התקנה (FIDs) לא דורשים מעקב מיוחד. עם זאת, אפליקציות שמחלצות ומשתמשות במזהי FID באופן מפורש צריכות להוסיף לוגיקה למעקב אחרי מחיקה או החלפה פוטנציאלית של מזהה ה-FID. הנה כמה מקרים שבהם יכול להיות שנמחק או נסובב מזהה FID:
- הסרה או התקנה מחדש של האפליקציה, למשל כשמשתמש קצה מתקין אותה במכשיר חדש.
- משתמש הקצה מנקה את המטמון של האפליקציה או של המכשיר.
- מחיקת מזהה FID מופעלת בקצה העורפי בגלל חוסר פעילות באפליקציה (נכון לעכשיו, הסף לכך הוא 270 ימים של חוסר פעילות).
כשמזהה ה-FID של אפליקציות עובר רוטציה או נמחק במקרים כאלה, מוקצה להן מזהה FID חדש. בנוסף, אסימון ההרשאה להתקנה שמשויך למזהה FID שנמחק נמחק, ללא קשר למידת הבגרות שלו, ומוחלף באסימון הרשאה חדש להתקנה.
אפליקציות יכולות לעקוב אחרי השינויים האלה ולהגיב בהתאם.
כדי לעקוב אחרי סבב ה-FID:
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]; }];
הודעת NSNotification בשם NSNotificationName.InstallationIDDidChange נשלחת אל NSNotificationCenter שמוגדר כברירת מחדל בכל פעם שמוקצה FID חדש.
Android
לקוחות Kotlin ו-Java צריכים להוסיף לוגיקה של ניסיון חוזר כדי להגיב לקריאות שנכשלו לאחזור ה-FID החדש.
JavaScript
אפליקציות אינטרנט יכולות להירשם ל-hook onIdChange.
בכל פעם שנוצר FID חדש, מתבצעת הפעלה של הקריאה החוזרת (callback) שאליה נרשמתם:
await firebase.installations().onIdChange((newId) => { console.log(newId); // TODO: Handle new installation ID. });
Dart
FirebaseInstallations.instance.onIdChange.listen((token) {
print('FID token: $token');
});
העברה מהתקנות של Instance ID אל Firebase
לפני שהשקנו את Firebaseההתקנות, Firebase הסתמך על Instance ID SDK כדי לזהות התקנות של אפליקציות. Firebase installations מספקת יתרונות משמעותיים על פני Instance ID מבחינת אמינות, ביצועים ואבטחה. אפליקציות Firebase שתלויות ב-SDK של מזהה המופע צריכות לעבור אל Firebase התקנות.
תהליך ההעברה משתנה בהתאם לאפליקציה:
אפליקציות שלא קוראות ישירות לממשקי API של מזהה מופע יכולות לעבור על ידי עדכון גרסאות ה-SDK. רוב האפליקציות של Firebase נכללות בקטגוריה הזו.
אפליקציות שמבצעות קריאות API באופן מפורש למזהה מופע צריכות לעדכן את גרסאות ה-SDK ו לבצע שינויים בקוד כדי להחליף את השיטות של מזהה המופע בשיטות המקבילות של Firebaseההתקנות או FCM. אם האפליקציה שלכם משתמשת במזהה מופע כדי לאחזר FCM טוקנים של רישום או משתמשת במזהה מופע באופן מפורש כדי לטרגט מופעים של אפליקציות או לכל מטרה אחרת, תצטרכו לעדכן את קוד האפליקציה.
נכון לעכשיו, FIS תואם לאחור למזהה מדור קודם – מזהה מופע Firebase. מחיקת מזהה מופע היא שיטה חלופית לשליחת בקשה למחיקת נתונים באמצעות ערכות ה-SDK הבאות של Firebase:
- iOS 6.14.0 ומטה
- Android SDKs מגרסאות קודמות ל-27 בפברואר 2020
כלומר, לא חובה להעביר את האפליקציות להתקנות של Firebase, אבל מומלץ מאוד לעשות זאת.
שדרוג לגרסאות SDK מינימליות להתקנות של Firebase
כדי לעבור ממזהה מופע לFirebase התקנות, צריך לוודא שהאפליקציות משתמשות לפחות במספרי הגרסאות המינימליים שמופיעים ברשימה של ערכות Firebase SDK הבאות:
| Firebase SDK | גרסת Android מינימלית | גרסת המינימום של iOS |
| העברת הודעות בענן ב-Firebase | 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 Kit | v22.1.2 | v6.28.0 |
עדכון קוד שקורא באופן מפורש לממשקי API של מזהה מופע
אם אפליקציית Android או Apple שלכם משתמשת ישירות בשיטות של Instance ID SDK, אתם יכולים להחליף את השימוש הזה בחלופות זהות ב-Firebase installations SDK או ב-FCM SDK.
אחזור מזהה
השיטות לקבלת מזהי מופעים הוחלפו בשיטות לקבלת מזהה התקנות. לדוגמה:
לפני
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)") } }
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]; // display message NSLog(@"%@", 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) }
אחרי
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") } }
מחיקת מזהה
השיטות למחיקת מזהי מופעים הוחלפו בשיטות למחיקת מזהי התקנות Firebase. לדוגמה:
לפני
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();
אחרי
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
לפני שהשקנו את Firebase Installations, FCM לקוחות קיבלו טוקנים של רישום מ-Instance 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
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
InstanceID.instanceID().instanceID { result, error in if let error = error { print("Error fetching instance ID: \(error)") } else if let result = result { print("Instance ID token: \(result.token)") } }
Objective-C
[[FIRInstanceID instanceID] instanceIDWithHandler:^(FIRInstanceIDResult * _Nullable result, NSError * _Nullable error) { if (error != nil) { NSLog(@"Error fetching instance ID: %@", error); } else { NSLog(@"Instance ID token: %@", result.token); } }];
אחרי
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 remote FCM registration token: \(error)") } else if let token = token { print("Remote instance ID 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]; // display message NSLog(@"%@", message); } }];