נהל התקנות Firebase

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

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

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

הוסף את SDK התקנות Firebase לאפליקציה שלך

iOS

  1. מוסיפים את התלות עבור התקנות Firebase כדי Podfile שלך:
    pod 'Firebase/Installations'
  2. הפעלת pod install ולפתוח את יצר .xcworkspace הקובץ.
  3. ייבא את מודול Firebase ב שלך UIApplicationDelegate :

    מָהִיר

    import Firebase

    Objective-C

    @import Firebase;
  4. & Nbsp הגדר FirebaseApp משותף למשל, בדרך כלל של האפליקציה שלך application:didFinishLaunchingWithOptions: השיטה:

    מָהִיר

    // Use Firebase library to configure APIs
    FirebaseApp.configure()

    Objective-C

    // Use Firebase library to configure APIs
    [FIRApp configure];

דְמוּי אָדָם

מוסיפים את התלות של מתקנים Firebase Android SDK כדי מודול שלך (ברמת האפליקציה) קובץ Gradle (בדרך כלל app/build.gradle ):

implementation 'com.google.firebase:firebase-installations:17.0.0'

JavaScript

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

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

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

מחק התקנת Firebase

הנתונים קשור התקנת Firebase הוא בדרך כלל לא מזהים. ובכל זאת, זה יכול להיות מועיל לתת למשתמשים אפשרות לנהל ולמחוק נתונים אלה.

מזהי ההתקנה של Firebase שונים לכל התקנה של כל יישום; ליישומים שונים באותו מכשיר יש מזהי התקנה שונים של Firebase. מזהי התקנת Firebase מזהים התקנות אפליקציות ונתונים הקשורים להתקנות האפליקציה האלה.

כאשר אתה מוחק מזהה התקנה, הנתונים הקשורים לאותו מזהה התקנה מוסרים ממערכות חי וגיבוי של כל שירותי Firebase המשתמשים במזהי התקנה של Firebase כדי לזהות התקנות בתוך 180 יום. תהליך זה מתואר ברמה גבוהה של גוגל בהצהרה על מחיקה ושימור .

אלא אם תשבית את כל השירותים שמייצרים FID באפליקציה שלך, FIS יוצר מזהה חדש תוך מספר ימים. Firebase רואה את המזהה החדש שנוצר כהתקנת Firebase חדשה, ואינו משייך אותו למזהה או לנתונים הקודמים בשום צורה.

מחק FID עם קריאת API של לקוח

כדי למחוק מסמכי FID שנוצרים על ידי שירותי Firebase, התקשר לשיטה המתאימה מ- SDK התקנות Firebase:

מָהִיר

Installations.installations().delete { error in
  if let error = error {
    print("Error deleting installation: \(error)")
    return
  }
  print("Installation deleted");
}

Objective-C

[[FIRInstallations installations] deleteWithCompletion:^(NSError *error) {
   if (error != nil) {
     NSLog(@"Error deleting Installation %@", error);
     return;
   }
   NSLog(@"Installation deleted");
}];

ג'אווה

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

קוטלין+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();

מחק FID עם קריאת API לשרת

כדי למחוק FID עם שיחת API השרת, מוסיפים את SDK של ניהול Firebase לשרת שלך , אם לא עשית זאת עדיין.

לאחר הוספת SDK, מחק FIDs באמצעות קריאה לפונקציית המחיקה בשפת הבחירה שלך (הערה: למעט Node.js, שיטות אלה משקפות את שמות מזהי המופע. עם זאת, כולן למעשה מוחקות את ה- FID כאשר מתקשרים עם כל Firebase נוכחי. SDK).

Node.js

// An FIDsent from a client service SDK
const idToDelete = 'eyJhbGciOiJFUzI1N_iIs5';

admin.installations().deleteInstallation(idToDelete);

ג'אווה

// An FID sent from a client service SDK
String idToDelete = "eyJhbGciOiJFUzI1N_iIs5";

FirebaseInstanceId.getInstance().deleteInstanceIdAsync(idToDelete).get();

פִּיתוֹן

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

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

אחזר מזהי לקוחות

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

כדי לאחזר מזהה התקנה של Firebase:

מָהִיר

Installations.installations().installationID { (id, error) in
  if let error = error {
    print("Error fetching id: \(error)")
    return
  }
  guard let id = id else { return }
  print("Installation ID: \(id)")
}

Objective-C

[[FIRInstallations installations] installationIDWithCompletion:^(NSString *identifier, NSError *error) {
  if (error != nil) {
    NSLog(@"Error fetching Installation ID %@", error);
    return;
  }
  NSLog(@"Installation ID: %@", identifier);
}];

ג'אווה

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

קוטלין+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);

אחזר אסימוני אימות התקנה

שירותי Firebase יכולים לאמת התקנות Firebase באמצעות אסימוני אימות שאוחזרו מ- FIS. לדוגמה, בעת תכנון בדיקות A/B עבור Config Remote, תוכל לאמת מכשיר בדיקה ממוקד באמצעות אסימון אימות התקנה.

אסימון אימות התקנה הוא אסימון נושא קצר לזמן בפורמט JSON web token (JWT) המכיל את המידע הבא להתקנה:

  • מזהה ההתקנה של Firebase
  • הפרויקט קשור ( projectNumber )
  • מזהה האפליקציה הקשורים Firebase ( appId )
  • תאריך התפוגה של האסימון

לא ניתן לבטל אסימון אימות התקנה והוא נשאר תקף עד לתאריך התפוגה שלו. אורך חיי האסימון המוגדר כברירת מחדל הוא שבוע.

כדי לאחזר אסימון אימות התקנה:

מָהִיר

Installations.installations().authTokenForcingRefresh(true, completion: { (result, error) in
  if let error = error {
    print("Error fetching token: \(error)")
    return
  }
  guard let result = result else { return }
  print("Installation auth token: \(result.authToken)")
})

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

ג'אווה

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

קוטלין+KTX

FirebaseInstallations.getInstance().getToken(/* forceRefresh */ true)
    .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);

עקוב אחר מחזור החיים של מזהה ההתקנה של Firebase

במהלך הפעולה הרגילה של אפליקציה, מזהי התקנה של Firebase (FID) אינם דורשים ניטור מיוחד. עם זאת, אפליקציות שאוחזרות ומשתמשות ב- FID במפורש צריכות להוסיף לוגיקה כדי לעקוב אחר המחיקה או הסיבוב הפוטנציאלי של ה- FID. להלן מספר מקרים בהם ניתן למחוק או לסובב את ה- FID:

  • הסרה או התקנה מחדש של האפליקציה, למשל כאשר משתמש קצה מתקין בהתקן חדש.
  • משתמש הקצה מנקה את המטמון של האפליקציה או המכשיר.
  • מחיקת FID מופעלת בקצה האחורי עקב חוסר פעילות באפליקציה (כרגע הסף לכך הוא 270 ימים של חוסר פעילות).

כאשר אפליקציות חוות סיבוב או מחיקה של FID במקרים מסוג זה, מוקצה להם FID חדש. כמו כן, אסימון אימות ההתקנה המשויך ל- FID שנמחק נמחק, ללא קשר לבגרותו, והוא מוחלף באסימון אימות התקנה חדש.

אפליקציות יכולות לעקוב אחר שינויים אלה ולהגיב בהתאם.

כדי לעקוב אחר סיבוב FID:

מָהִיר

installationIDObserver = NotificationCenter.default.addObserver(
        forName: .InstallationIDDidChange,
        object: nil,
        queue: nil
) { (notification) in
  // Fetch new Installation ID
  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 החדש מוקצה.

דְמוּי אָדָם

לקוחות Kotlin ו- Java צריכים להוסיף לוגיקת ניסיון חוזר כדי להגיב על שיחות שנכשלו כדי לאחזר את ה- FID החדש.

JavaScript

יישומים אינטרנטיים יכולים להירשם onIdChange וו.

בכל פעם שנוצר FID חדש, השיחה החזרה המנויה מופעלת:

await firebase.installations().onIdChange((newId) => {
  console.log(newId);
  // TODO: Handle new installation ID.
});

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

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

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

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

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

נכון לעכשיו, FIS תואם לאחור עם המזהה הקודם של Firebase ID. מחיקת iid היא שיטה חלופית של המבקשת מחיקת נתונים עם אלה Firebase SDKs:

  • iOS 6.14.0 ומעלה
  • ערכות SDK של Android מוקדמות יותר מ -27 בפברואר 2020

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

שדרוג לגרסאות SDK מינימליות להתקנות Firebase

כדי לעבור ממזהה המופע להתקנות Firebase, ודא שהיישומים שלך משתמשים לפחות במספרי הגירסה המינימליים המפורטים של SDKs הבאים של Firebase:

Firebase SDK גרסת אנדרואיד מינימלית גרסת iOS מינימלית
הודעות ענן של Firebase v20.3.0 v6.34.0
תצורה מרחוק v19.2.0 v6.24.0
Google Analytics \ (מדידת SDK) v17.4.4 v6.18.0
הודעות בתוך האפליקציה v19.0.7 v6.24.0
ניטור ביצועים v19.0.8 v6.21.0
התרסקות v17.2.1 v6.23.0
ערכת ML v22.1.2 v6.28.0

מעדכן קוד שקורא במפורש APIs ID Instance

אם אפליקציית Android או iOS משתמשת ישירות בשיטות מזהה SDK של Instance ID, תוכל להחליף שימוש זה בחלופות זהות ב- SDK התקנות Firebase או ב- FCM SDK.

אחזור מזהה

שיטות לקבלת מזהי Instance מוחלפות בשיטות לקבלת מזהה התקנות. לדוגמה:

לפני

מָהִיר

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

ג'אווה

FirebaseInstanceId.getInstance().getInstanceId()
        .addOnCompleteListener(new OnCompleteListener<InstanceIdResult>() {
            @Override
            public void onComplete(@NonNull Task<InstanceIdResult> task) {
                Log.d("IID_TOKEN", task.getResult().getToken());
            }
        });

קוטלין+KTX

FirebaseInstanceId.getInstance().instanceId
        .addOnSuccessListener { result ->
            Log.d("IID_TOKEN", result.token)
        }

לאחר

מָהִיר

Installations.installations().installationID { (id, error) in
  if let error = error {
    print("Error fetching id: \(error)")
    return
  }
  guard let id = id else { return }
  print("Installation ID: \(id)")
}

Objective-C

[[FIRInstallations installations] installationIDWithCompletion:^(NSString *identifier, NSError *error) {
  if (error != nil) {
    NSLog(@"Error fetching Installation ID %@", error);
    return;
  }
  NSLog(@"Installation ID: %@", identifier);
}];

ג'אווה

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

קוטלין+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")
    }
}

מחיקת מזהה

שיטות למחיקת מזהי Instance מוחלפות בשיטות למחיקת מזהי התקנה של Firebase. לדוגמה:

לפני

מָהִיר

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

דְמוּי אָדָם

FirebaseInstanceId.deleteInstanceId();

לאחר

מָהִיר

func delete(completion: @escaping (Error?) -> Void)

Objective-C

- (void)deleteWithCompletion:(nonnull void (^)(NSError *_Nullable))completion;

ג'אווה

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

קוטלין+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 אחזרו אסימוני רישום ממזהה המופע. כעת, ה- FCM SDK מספק שיטות לאחזור אסימון ההרשמה.

לפני

ג'אווה

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

קוטלין+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()
        })

מָהִיר

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

לאחר

ג'אווה

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

קוטלין+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()
})

מָהִיר

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