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

Firebase ML

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

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

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

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

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

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

הוספת ה-SDK של Firebase installations לאפליקציה

iOS+‎

  1. מוסיפים את התלות של ההתקנות של Firebase ל-Podfile:
    pod 'FirebaseInstallations'
  2. מריצים את pod install ופותחים את קובץ ה-.xcworkspace שנוצר.
  3. מייבאים את המודול FirebaseCore אל UIApplicationDelegate, וגם כל מודול Firebase אחר שבו משתמש ה-app delegate. לדוגמה, כדי להשתמש ב-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;
    // ...
          
  4. מגדירים מופע משותף של FirebaseApp ב-method‏ 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];
  5. אם אתם משתמשים ב-SwiftUI, אתם צריכים ליצור נציג של האפליקציה ולצרף אותו ל-struct של App באמצעות UIApplicationDelegateAdaptor או NSApplicationDelegateAdaptor. צריך גם להשבית את ה-swizzling של נציג האפליקציה. מידע נוסף זמין בהוראות של 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:20.0.0'

JavaScript

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

לדוגמה, אם יחסי התלות נוספים ב-index.html, צריך להוסיף את יחסי התלות ברכיב <head>:

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

Flutter

  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 של הלקוח

כדי למחוק מזהי 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

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

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

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

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. הנה כמה מקרים שבהם מזהי 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];
}];

בכל פעם שמוקצה מזהה FID חדש, נשלחת הודעת NSNotification בשם NSNotificationName.InstallationIDDidChange אל NSNotificationCenter שמוגדר כברירת מחדל.

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

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

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

תהליך ההעברה משתנה בהתאם לאפליקציה:

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

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

נכון לעכשיו, FIS תואם לדורות קודמים עם המזהה הקודם Firebase Instance ID. מחיקת מזהה מכשיר היא שיטה חלופית לבקשת מחיקת נתונים באמצעות ערכות ה-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 גרסה 6.24.0
Google Analytics for Firebase \ (SDK למדידות) v17.4.4 v6.18.0
עיצוב הודעות בתוך האפליקציה v19.0.7 גרסה 6.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. עכשיו, ה-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

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