ניהול התקנות והמספרים המזהים ב-Firebase

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

Firebase ML

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

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

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

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

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

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

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

‫iOS+‎

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

JavaScript

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

לדוגמה, אם יחסי התלות מתווספים בקובץ index.html, מוסיפים את יחסי התלות ברכיב <head>:

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

Flutter

  1. מתיקיית השורש של פרויקט Flutter, מריצים את הפקודה הבאה כדי להתקין את הפלאגין Firebase installations:

    flutter pub add firebase_app_installations
    
  2. בונים מחדש את הפרויקט:

    flutter run
    
  3. מייבאים את הפלאגין 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 של לקוח

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

אסימון אימות להתקנה הוא אסימון 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מזהי התקנה (FID). עם זאת, אפליקציות שמחלצות ומשתמשות במזהי מופע Firebase באופן מפורש צריכות להוסיף לוגיקה למעקב אחרי מחיקה או החלפה פוטנציאלית של מזהה המופע. אלה כמה מקרים שבהם יכול להיות ש-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 חדש, מתבצעת הפעלה של הקריאה החוזרת (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 installations מספקת יתרונות משמעותיים בהשוואה ל-Instance ID מבחינת אמינות, ביצועים ואבטחה. אפליקציות Firebase שתלויות ב-Instance ID SDK צריכות לעבור אל Firebase התקנות.

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

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

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

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

  • ‫iOS מגרסה 6.14.0 ומטה
  • גרסאות Android SDK ישנות יותר מ-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
Performance Monitoring ‫v19.0.8 ‫v6.21.0
Crashlytics ‫v17.2.1 ‫v6.23.0
ML Kit ‫v22.1.2 ‫v6.28.0

עדכון קוד שקורא באופן מפורש לממשקי Instance ID 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);
  }
}];