שירות ההתקנות של Firebase (FIS) מספק מזהה התקנה (FID) של Firebase לכל מופע מותקן של אפליקציית Firebase. שירותי Firebase הבאים משתמשים במזהה ההתקנה של Firebase באופן פנימי:
שירות Firebase | הפונקציונליות של Firebase התקנות |
---|---|
Firebase Cloud Messaging |
Firebase Cloud Messaging משתמש במזהי ההתקנה של Firebase כדי לטרגט מכשירים לשליחת הודעות. |
Firebase Crashlytics |
Firebase Crashlytics מבצע רוטציה של מזהה ה-UUID של ההתקנה Crashlytics על סמך שינויים במזהה ההתקנה של מופע האפליקציה ב-Firebase. בעתיד, יכול להיות שנשתמש במזהה ההתקנה כדי להפעיל תכונות לשיפור שירותי הדיווח על קריסות וניהול קריסות. |
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 מאוחסנים מזהי התקנה מסוג Firebase, מאפיינים ופלחים קשורים, כדי לספק מידע על טירגוט לשירותים אחרים של Firebase שמשתמשים בהם. |
בדרך כלל, שירותי Firebase משתמשים בשירות ההתקנות Firebase בלי שמפתחים יצטרכו לבצע אינטראקציה ישירה עם FIS API. עם זאת, יש מקרים שבהם מפתחי אפליקציות עשויים לרצות להפעיל ישירות את FIS API, למשל:
- כדי למחוק התקנה של Firebase ונתונים שמשויכים להתקנה.
- כדי לאחזר מזהים (מזהי התקנות Firebase) לצורך טירגוט להתקנות ספציפיות של אפליקציות.
- כדי לאחזר אסימוני אימות של התקנות כדי לאמת התקנות של Firebase.
כדי להתחיל לבצע קריאה ישירה ל-FIS API, מוסיפים את ה-SDK לאפליקציה.
הוספת ה-SDK למעקב אחר התקנות של Firebase לאפליקציה
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; // ...
- מגדירים מופע משותף של
FirebaseApp
בשיטהapplication(_:didFinishLaunchingWithOptions:)
של הנציג של האפליקציה: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];
- אם אתם משתמשים ב-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
מוסיפים את התלות של Android SDK להתקנות Firebase לקובץ Gradle של המודול (ברמת האפליקציה) (בדרך כלל app/build.gradle
):
implementation 'com.google.firebase:firebase-installations:18.0.0'
JavaScript
בהתאם לאופן שבו אפליקציית האינטרנט מתארחת, יכול להיות שההגדרות יטופלו באופן אוטומטי או שתצטרכו לעדכן את אובייקט ההגדרות של Firebase.
לדוגמה, אם יחסי התלות נוספים בקובץ index.html, מוסיפים את יחסי התלות ברכיב <head>:
<script src="/__/firebase/11.0.2/firebase-installations.js"></script>
Flutter
בתיקיית השורש של פרויקט Flutter, מריצים את הפקודה הבאה כדי להתקין את הפלאגין Firebase installations:
flutter pub add firebase_app_installations
מריצים מחדש את הפרויקט:
flutter run
מייבאים את הפלאגין 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 של לקוח
כדי למחוק מזהי FID שנוצרו על ידי שירותי Firebase, צריך להפעיל את השיטה המתאימה מ-SDK של התקנות Firebase:
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+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, מוחקים את מזהי ה-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)
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)
}
כשאתם מוחקים מזהה התקנה של Firebase באמצעות קריאה ל-API של שרת, שירותי Firebase מתחילים בתהליך המחיקה של הנתונים שמקושרים למזהה ההתקנה הזה, מפסיקים לקבל נתונים חדשים למזהה הזה במשך יום או יומיים, ולאחר מכן מדווחים לאפליקציית הלקוח שהמזהה נמחק. עד שמערכת Firebase תודיע לאפליקציית הלקוח, יכול להיות שחלק מהשירותים של האפליקציה עדיין יטרגטו את המזהה. לדוגמה, ייתכן שהתקנה של Firebase תמשיך לקבל התראות FCM במשך כמה שעות.
אם רוצים למחוק את מזהה ההתקנה הנוכחי של Firebase ולהשתמש מיד בשירותי Firebase עם מזהה חדש ולא קשור, צריך להשתמש ב-API של הלקוח כדי לבצע את המחיקה.
אחזור של מזהי לקוחות
אם אתם צריכים לזהות התקנות מסוימות של האפליקציה, תוכלו לעשות זאת על ידי אחזור מזהה ההתקנה Firebase. לדוגמה, כדי ליצור פלחים של התקנות אפליקציה לייבוא ל-BigQuery, או כדי לבצע בדיקות במהלך הפיתוח של Firebase In-App Messaging, אפשר לזהות את המכשירים הנכונים ולטרגט אותם באמצעות מזהי ההתקנה התואמים של Firebase.
כדי לאחזר מזהה התקנה של 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+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
) - תאריך התפוגה של הטוקן
אי אפשר לבטל אסימון אימות להתקנה, והוא נשאר בתוקף עד תאריך התפוגה שלו. משך החיים שמוגדר כברירת מחדל לאסימון הוא שבוע אחד.
כדי לאחזר את טוקן האימות של ההתקנה:
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+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
במהלך הפעולה הרגילה של אפליקציה, אין צורך במעקב מיוחד אחרי מזהי ההתקנה (FID) של Firebase. עם זאת, אפליקציות שמאחזרות FID ומשתמשות בהם באופן מפורש צריכות להוסיף לוגיקה למעקב אחר המחיקה או ההחלפה הפוטנציאלית של ה-FID. ריכזנו כאן כמה מקרים שבהם יכול להיות ש-FIDs יימחקו או יעברו רוטציה:
- הסרה או התקנה מחדש של האפליקציה, למשל כשמשתמש קצה מתקין אותה במכשיר חדש.
- משתמש הקצה מנקה את המטמון של האפליקציה או המכשיר.
- המחיקה של 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 חדש, נקרא חזרה למספר הטלפון שרשום:
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 יש יתרונות משמעותיים על פני Instance ID מבחינת אמינות, ביצועים ואבטחה. אפליקציות Firebase שתלויות ב-SDK של מזהה המופע צריכות לעבור להתקנות של Firebase.
תהליך ההעברה משתנה בהתאם לאפליקציה:
כדי להעביר אפליקציות שלא קוראות ישירות לממשקי API של מזהי מכונות, צריך לעדכן את גרסאות ה-SDK שלהן. רוב האפליקציות של Firebase נכללות בקטגוריה הזו.
אפליקציות שמבצעות באופן מפורש קריאות API למזהה המכונה צריכות לעדכן את גרסאות ה-SDK וגם לבצע שינויים בקוד כדי להחליף את השיטות של מזהה המכונה בהתקנות שלהן ב-Firebase או ב-FCM המקבילות. אם באפליקציה שלכם נעשה שימוש במזהה המכונה כדי לאחזר אסימוני רישום מסוג FCM, או אם נעשה שימוש מפורש במזהה המכונה כדי לטרגט מכונות של אפליקציות או למטרה אחרת, תצטרכו לעדכן את קוד האפליקציה.
בשלב זה, ה-FIS תואם לאחור למזהה הקודם 'מזהה המכונה ב-Firebase'. מחיקת מזהה IID היא שיטה חלופית לבקשה למחיקת נתונים באמצעות ערכות ה-SDK הבאות של Firebase:
- iOS מגרסה 6.14.0 ומטה
- ערכות Android SDK שפורסמו לפני 27 בפברואר 2020
כלומר, לא חובה להעביר אפליקציות להתקנות Firebase, אבל מומלץ מאוד לעשות זאת.
שדרוג לגרסאות ה-SDK המינימליות להתקנות של Firebase
כדי לעבור מ-Instance ID להתקנות של Firebase, צריך לוודא שבאפליקציות שלכם נעשה שימוש לפחות במספרי הגרסאות המינימליים הבאים של ערכות ה-SDK הבאות של Firebase:
Firebase SDK | גרסת Android מינימלית | גרסת iOS מינימלית |
העברת הודעות בענן ב-Firebase | v20.3.0 | v6.34.0 |
הגדרת תצורה מרחוק | v19.2.0 | v6.24.0 |
Google Analytics for Firebase (Measurement 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 נעשה שימוש ישיר בשיטות של SDK של מזהה מופע, תוכלו להחליף את השימוש הזה בחלופות זהות ב-SDK של Firebase להתקנות או ב-SDK של FCM.
אחזור מזהה
שיטות לקבלת מזהי מכונות מוחלפות בשיטות לקבלת מזהה התקנה. לדוגמה:
לפני
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+KTX
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+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. לדוגמה:
לפני
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+KTX
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. עכשיו, ה-SDK של FCM מספק שיטות לאחזור של אסימון הרישום.
לפני
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() })
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
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() })
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; } }];