שירות ההתקנות של Firebase (FIS) מספק מזהה ההתקנה FID של Firebase לכל מכונה מותקנת של אפליקציית Firebase. מזהה ההתקנה של Firebase משמש באופן פנימי את האפליקציות האלה ב-Firebase שירותים:
שירות Firebase | פונקציונליות של Firebase התקנות |
---|---|
Firebase Cloud Messaging |
Firebase Cloud Messaging שימושים Firebase מזהי התקנה לטירגוט מכשירים לשליחת הודעות. |
Firebase Crashlytics |
התקנת Crashlytics מתבצעת על ידי Firebase Crashlytics UUID על סמך שינויים ב-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 ללא דרישה ממפתחים ליצור אינטראקציה ישירה עם ה-API של FIS. אבל יש מקרים שבהם מפתחי אפליקציות ירצו להתקשר ישירות FIS API, כמו:
- כדי למחוק התקנה של Firebase ונתונים שקשורים להתקנה.
- לאחזר מזהים (Firebase מזהי התקנה) כדי לטרגט התקנות ספציפיות של האפליקציות.
- כדי לאחזר אסימוני אימות להתקנה לצורך אימות של Firebase התקנות.
כדי להתחיל בהתקשרות ישירה מוסיפים את ה-SDK לאפליקציה.
הוספת ה-SDK של Firebase התקנות לאפליקציה
iOS+
- מוסיפים ל-Podfile את התלות של Firebase התקנות:
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/10.13.1/firebase-installations.js"></script>
Flutter
בתיקיית השורש של פרויקט Flutter, מריצים את הפקודה הבאה הפקודה כדי להתקין את הפלאגין Firebase להתקנה:
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 יום. התהליך הזה מתואר ברמה גבוהה הצהרה לגבי מחיקה ושמירה.
אלא אם משביתים את כל השירותים ליצירת 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, הערכים הבאים methods משקפות את השם של מזהה המכונה. אבל למעשה הם מוחקים את FID כאשר קוראים לו באמצעות כל SDK קיים של Firebase).
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 עם מזהה חדש ולא קשור, משתמשים ב-Client 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, אתם יכולים לאמת מכשיר בדיקה ספציפי באמצעות אסימון אימות להתקנה.
אסימון אימות להתקנה הוא אסימון למוכ"ז לטווח קצר בפורמט JWT בפורמט JSON שמכיל את המידע הבא התקנה:
- מזהה ההתקנה 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
במהלך פעולה רגילה של אפליקציה, 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 התקנות מספק יתרונות משמעותיים על פני מזהה המכונה באמינות, בביצועים, ואבטחה. צריך להעביר אפליקציות Firebase שתלויות ב-SDK של מזהה המופע עד Firebase התקנות.
תהליך ההעברה משתנה בהתאם לאפליקציה:
כדי להעביר אפליקציות שלא קוראות ישירות לממשקי ה-API של מזהי המכונות, צריך לעדכן את גרסאות ה-SDK שלהן. רוב האפליקציות של Firebase נכללות בקטגוריה הזו.
אפליקציות שמבצעות באופן מפורש קריאות API למזהה המכונה צריכות לעדכן את גרסאות ה-SDK וגם לבצע שינויים בקוד כדי להחליף את השיטות של מזהה המכונה בהתקנות שלהן ב-Firebase או ב-FCM המקבילות. אם האפליקציה משתמשת מזהה מכונה כדי לאחזר FCM אסימוני רישום או משתמש באופן מפורש מזהה מכונה כדי לטרגט מופעים של האפליקציה, או לכל מטרה אחרת, צריך מעדכנים את קוד האפליקציה.
נכון לעכשיו, FIS תואם לאחור למזהה הקודם של המופע של Firebase. מחיקת IID היא שיטה חלופית לשליחת בקשה למחיקת נתונים באמצעות ערכות Firebase SDK האלה:
- iOS 6.14.0 ומטה
- ערכות Android SDK שפורסמו לפני 27 בפברואר 2020
כלומר, אין חובה להעביר אפליקציות להתקנות Firebase, אבל מומלץ מאוד לעשות זאת.
שדרוג לגרסאות SDK מינימליות של Firebase התקנות
כדי לעבור ממזהה מכונה ל-Firebase התקנות, צריך לוודא שה יישומים משתמשים לפחות במספרי הגרסה המינימליים המפורטים של ערכות Firebase SDK הבאות:
Firebase SDK | גרסת Android המינימלית | גרסת iOS מינימלית |
העברת הודעות בענן ב-Firebase | גרסה 20.3.0 | גרסה 6.34.0 |
הגדרת תצורה מרחוק | גרסה 19.2.0 | גרסה 6.24.0 |
Google Analytics for Firebase \ (SDK למדידת ביצועים) | v17.4.4 | v6.18.0 |
העברת הודעות בתוך האפליקציה | v19.0.7 | גרסה 6.24.0 |
מעקב אחר ביצועים | גרסה 19.0.8 | גרסה 6.21.0 |
Crashlytics | גרסה 17.2.1 | גרסה 6.23.0 |
ML Kit | גרסה 22.1.2 | גרסה 6.28.0 |
עדכון קוד שקורא באופן מפורש לממשקי API של מזהה מכונות
אם באפליקציה ל-Android או ל-Apple משתמשים ישירות בשיטות SDK של מזהה מכונה, אתם יכולים להחליף את השימוש הזה בחלופות זהות בהתקנות של Firebase SDK או FCM SDK.
אחזור מזהה
השיטות לאיתור מזהי מכונות מוחלפות בשיטות שמאפשרות להתקין התקנות ID. לדוגמה:
לפני
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, היו FCM לקוחות אוחזרו אסימוני רישום ממזהה המכונה. עכשיו, ה-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; } }];