سرویس نصب Firebase (FIS) برای هر نمونه نصب شده یک برنامه Firebase یک شناسه نصب Firebase (FID) ارائه میکند. شناسه نصب 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 | نظارت بر عملکرد از شناسههای نصب Firebase برای محاسبه تعداد نصبهای Firebase منحصربهفرد که به منابع شبکه دسترسی دارند، استفاده میکند تا اطمینان حاصل شود که الگوهای دسترسی به اندازه کافی ناشناس هستند. همچنین از شناسه های نصب Firebase با Firebase Remote Config برای مدیریت نرخ گزارش رویداد عملکرد استفاده می کند. |
Firebase Remote Config | Remote Config از شناسه های نصب Firebase برای انتخاب مقادیر پیکربندی برای بازگشت به دستگاه های کاربر نهایی استفاده می کند. |
Firebase ML | اعتبارنامه هایی به نام نشانه های تأیید اعتبار نصب توسط Firebase ML برای احراز هویت دستگاه هنگام تعامل با نمونه های برنامه استفاده می شود، به عنوان مثال، برای توزیع مدل های توسعه دهنده در نمونه های برنامه. |
ذخیره سازی بخش بندی کاربر Firebase | Firebase User Segmentation Storage شناسههای نصب 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 // ...
سریع
import FirebaseCore import FirebaseFirestore import FirebaseAuth // ...
هدف-C
@import FirebaseCore; @import FirebaseFirestore; @import FirebaseAuth; // ...
- یک نمونه اشتراکگذاری شده
FirebaseApp
را در روش برنامه نماینده برنامهapplication(_:didFinishLaunchingWithOptions:)
پیکربندی کنید:SwiftUI
// Use Firebase library to configure APIs FirebaseApp.configure()
سریع
// Use Firebase library to configure APIs FirebaseApp.configure()
هدف-C
// Use Firebase library to configure APIs [FIRApp configure];
- اگر از SwiftUI استفاده میکنید، باید یک نماینده برنامه ایجاد کنید و آن را از طریق
UIApplicationDelegateAdaptor
یاNSApplicationDelegateAdaptor
به ساختارApp
خود متصل کنید. همچنین باید 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() } } } }
اندروید
وابستگی نصبهای Firebase Android SDK را به فایل Gradle ماژول (سطح برنامه) خود اضافه کنید (معمولا app/build.gradle
):
implementation 'com.google.firebase:firebase-installations:17.1.3'
جاوا اسکریپت
بسته به نحوه میزبانی برنامه وب شما، ممکن است پیکربندی شما به صورت خودکار مدیریت شود یا ممکن است نیاز به به روز رسانی شی پیکربندی Firebase خود داشته باشید.
به عنوان مثال، اگر وابستگی های شما در index.html اضافه شده است، وابستگی را در عنصر <head> اضافه کنید:
<script src="/__/firebase/9.22.1/firebase-installations.js"></script>
بال بال زدن
از دایرکتوری ریشه پروژه 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 برای شناسایی نصبها در عرض ۱۸۰ روز استفاده میکنند، حذف میشود. این فرآیند در بیانیه Google در مورد حذف و حفظ در سطح بالایی توضیح داده شده است.
مگر اینکه تمام خدمات تولید کننده 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"); }
هدف-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") } }
جاوا اسکریپت
await firebase.installations().delete();
Dart
await FirebaseInstallations.instance.delete();
یک FID را با تماس API سرور حذف کنید
برای حذف یک FID با تماس API سرور، Firebase Admin SDK را به سرور خود اضافه کنید ، اگر قبلاً این کار را نکردهاید.
هنگامی که SDK اضافه شد، FID ها را از طریق فراخوانی تابع حذف در زبان انتخابی خود حذف کنید (توجه: به جز Node.js، این روش ها منعکس کننده نام گذاری Instance ID هستند. با این حال، همه آنها در واقع 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();
پایتون
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 این کار را انجام دهید. به عنوان مثال، برای انجام آزمایش در طول توسعه پیامرسانی درونبرنامه 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)") }
هدف-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") } }
جاوا اسکریپت
const installationId = await firebase.installations().getId(); console.log(installationId);
Dart
String id = await FirebaseInstallations.instance.getId();
بازیابی نشانه های تأیید اعتبار نصب
سرویس های Firebase می توانند نصب های Firebase را با توکن های احراز هویت بازیابی شده از FIS تأیید کنند. به عنوان مثال، هنگام طراحی تستهای A/B برای Remote Config، میتوانید با استفاده از یک نشانه تأیید اعتبار نصب، یک دستگاه آزمایش هدفمند را احراز هویت کنید.
یک نشانه تأیید اعتبار نصب، یک توکن حامل کوتاه مدت در قالب توکن وب JSON (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)") })
هدف-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") } }
جاوا اسکریپت
const installationToken = await firebase.installations() .getToken(/* forceRefresh */ true); console.log(installationToken);
Dart
String token = await FirebaseInstallations.instance.getToken();
چرخه عمر ID نصب 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() }
هدف-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 جدید اضافه کنند.
جاوا اسکریپت
برنامه های وب می توانند در قلاب 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');
});
از Instance ID به تاسیسات Firebase مهاجرت کنید
قبل از معرفی نصبهای Firebase، Firebase برای شناسههای نصب برنامه بر روی Instance ID SDK تکیه میکرد. نصب Firebase مزایای قابل توجهی نسبت به Instance ID در قابلیت اطمینان، عملکرد و امنیت دارد. برنامههای Firebase که به Instance ID SDK وابسته هستند باید به تأسیسات Firebase منتقل شوند.
فرآیند مهاجرت بر اساس برنامه شما متفاوت است:
برنامههایی که مستقیماً با Instance ID API تماس نمیگیرند، میتوانند با بهروزرسانی نسخههای SDK خود مهاجرت کنند. اکثر برنامه های Firebase در این دسته قرار می گیرند.
برنامههایی که صراحتاً با Instance ID تماسهای API برقرار میکنند باید نسخههای SDK را بهروزرسانی کنند و کد را تغییر دهند تا روشهای Instance ID را با نصبهای Firebase یا معادلهای FCM خود جایگزین کنند. اگر برنامه شما از Instance ID برای بازیابی نشانههای ثبت FCM استفاده میکند یا صراحتاً از Instance ID برای هدفیابی نمونههای برنامه یا هر هدف دیگری استفاده میکند، باید کد برنامه خود را بهروزرسانی کنید.
در حال حاضر، FIS با شناسه قدیمی Firebase Instance ID سازگار است. حذف یک IID یک روش جایگزین برای درخواست حذف داده با این SDK های Firebase است:
- iOS 6.14.0 و پایین تر
- Android SDK زودتر از 27 فوریه 2020
این بدان معناست که برنامهها نیازی به مهاجرت به نصبهای Firebase ندارند. با این حال، انجام این کار به شدت توصیه می شود.
ارتقاء به حداقل نسخه های SDK برای نصب های Firebase
برای انتقال از Instance ID به نصبهای Firebase، مطمئن شوید که برنامههای شما حداقل از حداقل شمارههای نسخه فهرستشده SDKهای Firebase زیر استفاده میکنند:
Firebase SDK | حداقل نسخه اندروید | حداقل نسخه iOS |
Firebase Cloud Messaging | نسخه 20.3.0 | نسخه 6.34.0 |
پیکربندی از راه دور | نسخه 19.2.0 | نسخه 6.24.0 |
Google Analytics برای Firebase \ (Measurement SDK) | نسخه 17.4.4 | نسخه 6.18.0 |
پیام رسانی درون برنامه ای | نسخه 19.0.7 | نسخه 6.24.0 |
نظارت بر عملکرد | نسخه 19.0.8 | نسخه 6.21.0 |
Crashlytics | نسخه 17.2.1 | نسخه 6.23.0 |
کیت ام ال | نسخه 22.1.2 | نسخه 6.28.0 |
بهروزرسانی کدی که به صراحت از APIهای Instance ID فراخوانی میکند
اگر برنامه Android یا Apple شما مستقیماً از روشهای Instance ID SDK استفاده میکند، میتوانید آن استفاده را با جایگزینهای مشابه در SDK نصبهای Firebase یا FCM SDK جایگزین کنید.
بازیابی یک شناسه
روشهای دریافت شناسههای نمونه با روشهایی برای دریافت شناسه نصب جایگزین میشوند. مثلا:
قبل از
سریع
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)" } }
هدف-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) }
بعد از
سریع
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)") }
هدف-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 جایگزین میشوند. مثلا:
قبل از
سریع
InstanceID.instanceID().deleteID { error in
if let error = error {
print("Error deleting instance ID: \(error)")
}
}
هدف-C
[FIRInstanceID instanceID] deleteIDWithHandler:^(NSError *error) {
if error != nil {
NSLog(@"Error deleting instance ID: %@", error);
}
}];
اندروید
FirebaseInstanceId.deleteInstanceId();
بعد از
سریع
func delete(completion: @escaping (Error?) -> Void)
هدف-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 بازیابی می کردند. اکنون، 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+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)" } }
هدف-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() })
سریع
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)" } }
هدف-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; } }];
سرویس نصب Firebase (FIS) برای هر نمونه نصب شده یک برنامه Firebase یک شناسه نصب Firebase (FID) ارائه میکند. شناسه نصب 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 | نظارت بر عملکرد از شناسههای نصب Firebase برای محاسبه تعداد نصبهای Firebase منحصربهفرد که به منابع شبکه دسترسی دارند، استفاده میکند تا اطمینان حاصل شود که الگوهای دسترسی به اندازه کافی ناشناس هستند. همچنین از شناسه های نصب Firebase با Firebase Remote Config برای مدیریت نرخ گزارش رویداد عملکرد استفاده می کند. |
Firebase Remote Config | Remote Config از شناسه های نصب Firebase برای انتخاب مقادیر پیکربندی برای بازگشت به دستگاه های کاربر نهایی استفاده می کند. |
Firebase ML | اعتبارنامه هایی به نام نشانه های تأیید اعتبار نصب توسط Firebase ML برای احراز هویت دستگاه هنگام تعامل با نمونه های برنامه استفاده می شود، به عنوان مثال، برای توزیع مدل های توسعه دهنده در نمونه های برنامه. |
ذخیره سازی بخش بندی کاربر Firebase | Firebase User Segmentation Storage شناسههای نصب 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 // ...
سریع
import FirebaseCore import FirebaseFirestore import FirebaseAuth // ...
هدف-C
@import FirebaseCore; @import FirebaseFirestore; @import FirebaseAuth; // ...
- یک نمونه اشتراکگذاری شده
FirebaseApp
در روش برنامه نماینده برنامهapplication(_:didFinishLaunchingWithOptions:)
پیکربندی کنید:SwiftUI
// Use Firebase library to configure APIs FirebaseApp.configure()
سریع
// Use Firebase library to configure APIs FirebaseApp.configure()
هدف-C
// Use Firebase library to configure APIs [FIRApp configure];
- اگر از SwiftUI استفاده میکنید، باید یک نماینده برنامه ایجاد کنید و آن را از طریق
UIApplicationDelegateAdaptor
یاNSApplicationDelegateAdaptor
به ساختارApp
خود متصل کنید. همچنین باید 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() } } } }
اندروید
وابستگی نصبهای Firebase Android SDK را به فایل Gradle ماژول (سطح برنامه) خود اضافه کنید (معمولا app/build.gradle
):
implementation 'com.google.firebase:firebase-installations:17.1.3'
جاوا اسکریپت
بسته به نحوه میزبانی برنامه وب شما، ممکن است پیکربندی شما به صورت خودکار مدیریت شود یا ممکن است نیاز به به روز رسانی شی پیکربندی Firebase خود داشته باشید.
به عنوان مثال، اگر وابستگی های شما در index.html اضافه شده است، وابستگی را در عنصر <head> اضافه کنید:
<script src="/__/firebase/9.22.1/firebase-installations.js"></script>
بال بال زدن
از دایرکتوری ریشه پروژه 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 برای شناسایی نصبها در عرض ۱۸۰ روز استفاده میکنند، حذف میشود. این فرآیند در بیانیه Google در مورد حذف و حفظ در سطح بالایی توضیح داده شده است.
مگر اینکه تمام خدمات تولید کننده 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"); }
هدف-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") } }
جاوا اسکریپت
await firebase.installations().delete();
Dart
await FirebaseInstallations.instance.delete();
یک FID را با تماس API سرور حذف کنید
برای حذف یک FID با تماس API سرور، Firebase Admin SDK را به سرور خود اضافه کنید ، اگر قبلاً این کار را نکردهاید.
هنگامی که SDK اضافه شد، FID ها را از طریق فراخوانی تابع حذف در زبان انتخابی خود حذف کنید (توجه: به جز Node.js، این روش ها منعکس کننده نام گذاری Instance ID هستند. با این حال، همه آنها در واقع 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();
پایتون
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 این کار را انجام دهید. به عنوان مثال، برای انجام آزمایش در طول توسعه پیامرسانی درونبرنامه 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)") }
هدف-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") } }
جاوا اسکریپت
const installationId = await firebase.installations().getId(); console.log(installationId);
Dart
String id = await FirebaseInstallations.instance.getId();
بازیابی نشانه های تأیید اعتبار نصب
سرویس های Firebase می توانند نصب های Firebase را با توکن های احراز هویت بازیابی شده از FIS تأیید کنند. به عنوان مثال، هنگام طراحی تستهای A/B برای Remote Config، میتوانید با استفاده از یک نشانه تأیید اعتبار نصب، یک دستگاه آزمایش هدفمند را احراز هویت کنید.
یک نشانه تأیید اعتبار نصب، یک توکن حامل کوتاه مدت در قالب توکن وب JSON (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)") })
هدف-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") } }
جاوا اسکریپت
const installationToken = await firebase.installations() .getToken(/* forceRefresh */ true); console.log(installationToken);
Dart
String token = await FirebaseInstallations.instance.getToken();
چرخه عمر ID نصب 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() }
هدف-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 جدید اضافه کنند.
جاوا اسکریپت
برنامه های وب می توانند در قلاب 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');
});
از Instance ID به تاسیسات Firebase مهاجرت کنید
قبل از معرفی نصبهای Firebase، Firebase برای شناسههای نصب برنامه بر روی Instance ID SDK تکیه میکرد. نصب Firebase مزایای قابل توجهی نسبت به Instance ID در قابلیت اطمینان، عملکرد و امنیت دارد. برنامههای Firebase که به Instance ID SDK وابسته هستند باید به تأسیسات Firebase منتقل شوند.
فرآیند مهاجرت بر اساس برنامه شما متفاوت است:
برنامههایی که مستقیماً با Instance ID API تماس نمیگیرند، میتوانند با بهروزرسانی نسخههای SDK خود مهاجرت کنند. اکثر برنامه های Firebase در این دسته قرار می گیرند.
برنامههایی که صراحتاً با Instance ID تماسهای API برقرار میکنند باید نسخههای SDK را بهروزرسانی کنند و کد را تغییر دهند تا روشهای Instance ID را با نصبهای Firebase یا معادلهای FCM خود جایگزین کنند. اگر برنامه شما از Instance ID برای بازیابی نشانههای ثبت FCM استفاده میکند یا صراحتاً از Instance ID برای هدفیابی نمونههای برنامه یا هر هدف دیگری استفاده میکند، باید کد برنامه خود را بهروزرسانی کنید.
در حال حاضر، FIS با شناسه قدیمی Firebase Instance ID سازگار است. حذف یک IID یک روش جایگزین برای درخواست حذف داده با این SDK های Firebase است:
- iOS 6.14.0 و پایین تر
- Android SDK زودتر از 27 فوریه 2020
این بدان معناست که برنامهها نیازی به مهاجرت به نصبهای Firebase ندارند. با این حال، انجام این کار به شدت توصیه می شود.
ارتقاء به حداقل نسخه های SDK برای نصب های Firebase
برای انتقال از Instance ID به نصبهای Firebase، مطمئن شوید که برنامههای شما حداقل از حداقل شمارههای نسخه فهرستشده SDKهای Firebase زیر استفاده میکنند:
Firebase SDK | حداقل نسخه اندروید | حداقل نسخه iOS |
Firebase Cloud Messaging | نسخه 20.3.0 | نسخه 6.34.0 |
پیکربندی از راه دور | نسخه 19.2.0 | نسخه 6.24.0 |
Google Analytics برای Firebase \ (Measurement SDK) | نسخه 17.4.4 | نسخه 6.18.0 |
پیام رسانی درون برنامه ای | نسخه 19.0.7 | نسخه 6.24.0 |
نظارت بر عملکرد | نسخه 19.0.8 | نسخه 6.21.0 |
Crashlytics | نسخه 17.2.1 | نسخه 6.23.0 |
کیت ام ال | نسخه 22.1.2 | نسخه 6.28.0 |
بهروزرسانی کدی که به صراحت از APIهای Instance ID فراخوانی میکند
اگر برنامه Android یا Apple شما مستقیماً از روشهای Instance ID SDK استفاده میکند، میتوانید آن استفاده را با جایگزینهای مشابه در SDK نصبهای Firebase یا FCM SDK جایگزین کنید.
بازیابی یک شناسه
روشهای دریافت شناسههای نمونه با روشهایی برای دریافت شناسه نصب جایگزین میشوند. مثلا:
قبل از
سریع
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)" } }
هدف-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) }
بعد از
سریع
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)") }
هدف-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 جایگزین میشوند. مثلا:
قبل از
سریع
InstanceID.instanceID().deleteID { error in
if let error = error {
print("Error deleting instance ID: \(error)")
}
}
هدف-C
[FIRInstanceID instanceID] deleteIDWithHandler:^(NSError *error) {
if error != nil {
NSLog(@"Error deleting instance ID: %@", error);
}
}];
اندروید
FirebaseInstanceId.deleteInstanceId();
بعد از
سریع
func delete(completion: @escaping (Error?) -> Void)
هدف-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 بازیابی می کردند. اکنون، 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+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)" } }
هدف-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() })
سریع
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)" } }
هدف-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; } }];
سرویس نصب Firebase (FIS) برای هر نمونه نصب شده یک برنامه Firebase یک شناسه نصب Firebase (FID) ارائه میکند. شناسه نصب 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 | نظارت بر عملکرد از شناسههای نصب Firebase برای محاسبه تعداد نصبهای Firebase منحصربهفرد که به منابع شبکه دسترسی دارند، استفاده میکند تا اطمینان حاصل شود که الگوهای دسترسی به اندازه کافی ناشناس هستند. همچنین از شناسه های نصب Firebase با Firebase Remote Config برای مدیریت نرخ گزارش رویداد عملکرد استفاده می کند. |
Firebase Remote Config | Remote Config از شناسه های نصب Firebase برای انتخاب مقادیر پیکربندی برای بازگشت به دستگاه های کاربر نهایی استفاده می کند. |
Firebase ML | اعتبارنامه هایی به نام نشانه های تأیید اعتبار نصب توسط Firebase ML برای احراز هویت دستگاه هنگام تعامل با نمونه های برنامه استفاده می شود، به عنوان مثال، برای توزیع مدل های توسعه دهنده در نمونه های برنامه. |
ذخیره سازی بخش بندی کاربر Firebase | Firebase User Segmentation Storage شناسههای نصب 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 // ...
سریع
import FirebaseCore import FirebaseFirestore import FirebaseAuth // ...
هدف-C
@import FirebaseCore; @import FirebaseFirestore; @import FirebaseAuth; // ...
- یک نمونه اشتراکگذاری شده
FirebaseApp
در روش برنامه نماینده برنامهapplication(_:didFinishLaunchingWithOptions:)
پیکربندی کنید:SwiftUI
// Use Firebase library to configure APIs FirebaseApp.configure()
سریع
// Use Firebase library to configure APIs FirebaseApp.configure()
هدف-C
// Use Firebase library to configure APIs [FIRApp configure];
- اگر از SwiftUI استفاده میکنید، باید یک نماینده برنامه ایجاد کنید و آن را از طریق
UIApplicationDelegateAdaptor
یاNSApplicationDelegateAdaptor
به ساختارApp
خود متصل کنید. همچنین باید 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() } } } }
اندروید
وابستگی نصبهای Firebase Android SDK را به فایل Gradle ماژول (سطح برنامه) خود اضافه کنید (معمولا app/build.gradle
):
implementation 'com.google.firebase:firebase-installations:17.1.3'
جاوا اسکریپت
بسته به نحوه میزبانی برنامه وب شما، ممکن است پیکربندی شما به صورت خودکار مدیریت شود یا ممکن است نیاز به به روز رسانی شی پیکربندی Firebase خود داشته باشید.
به عنوان مثال، اگر وابستگی های شما در index.html اضافه شده است، وابستگی را در عنصر <head> اضافه کنید:
<script src="/__/firebase/9.22.1/firebase-installations.js"></script>
بال بال زدن
از دایرکتوری ریشه پروژه 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 برای شناسایی نصبها در عرض ۱۸۰ روز استفاده میکنند، حذف میشود. این فرآیند در بیانیه Google در مورد حذف و حفظ در سطح بالایی توضیح داده شده است.
مگر اینکه تمام خدمات تولید کننده 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"); }
هدف-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") } }
جاوا اسکریپت
await firebase.installations().delete();
Dart
await FirebaseInstallations.instance.delete();
یک FID را با تماس API سرور حذف کنید
برای حذف یک FID با تماس API سرور، Firebase Admin SDK را به سرور خود اضافه کنید ، اگر قبلاً این کار را نکردهاید.
هنگامی که SDK اضافه شد، FID ها را از طریق فراخوانی تابع حذف در زبان انتخابی خود حذف کنید (توجه: به جز Node.js، این روش ها منعکس کننده نام گذاری Instance ID هستند. با این حال، همه آنها در واقع 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();
پایتون
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 این کار را انجام دهید. به عنوان مثال، برای انجام آزمایش در طول توسعه پیامرسانی درونبرنامه 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)") }
هدف-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") } }
جاوا اسکریپت
const installationId = await firebase.installations().getId(); console.log(installationId);
Dart
String id = await FirebaseInstallations.instance.getId();
بازیابی نشانه های تأیید اعتبار نصب
سرویس های Firebase می توانند نصب های Firebase را با توکن های احراز هویت بازیابی شده از FIS تأیید کنند. به عنوان مثال، هنگام طراحی تستهای A/B برای Remote Config، میتوانید با استفاده از یک نشانه تأیید اعتبار نصب، یک دستگاه آزمایش هدفمند را احراز هویت کنید.
An installation auth token is a short-lived bearer token in JSON web token (JWT) format containing the following information for an installation:
- The Firebase installation ID
- The associated project (
projectNumber
) - The associated Firebase application ID (
appId
) - The token's expiration date
An installation auth token cannot be revoked, and remains valid until its expiration date. The default token lifetime is one week.
To retrieve an installation auth token:
Swift
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]); }];
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();
Monitor the Firebase installation ID lifecycle
During the normal operation of an app, Firebase installation IDs (FIDs) don't require special monitoring. However, apps that explicitly retrieve and use FIDs should add logic to monitor the potential deletion or rotation of the FID. Here are some cases where FIDs could be deleted or rotated:
- Uninstallation or reinstallation of the app, for instance when an end user installs on a new device.
- The end user clears the cache of the app or the device.
- FID deletion is triggered in the backend due to app inactivity (currently the threshold for this is 270 days of inactivity).
When apps experience FID rotation or deletion in these kinds of cases, they are assigned a new FID. Also, the installation auth token associated with a deleted FID is deleted, regardless of its own maturity, and is replaced with a new installation auth token.
Apps can monitor these changes and respond accordingly.
To monitor FID rotation:
Swift
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]; }];
An NSNotification named NSNotificationName.InstallationIDDidChange
is posted to the default NSNotificationCenter whenever a new FID is assigned.
Android
Kotlin and Java clients should add retry logic to respond on failed calls to retrieve the new FID.
JavaScript
Web apps can subscribe to the onIdChange
hook.
Whenever a new FID is created, the subscribed callback is triggered:
await firebase.installations().onIdChange((newId) => { console.log(newId); // TODO: Handle new installation ID. });
Dart
FirebaseInstallations.instance.onIdChange.listen((token) {
print('FID token: $token');
});
Migrate from Instance ID to Firebase installations
Prior to the introduction of Firebase installations, Firebase relied on the Instance ID SDK for identifiers of app installs. Firebase installations provides significant advantages over Instance ID in reliability, performance, and security. Firebase apps that depend on the Instance ID SDK should migrate to Firebase installations.
The migration process is different based on your app:
Apps that don't directly call Instance ID APIs can migrate by updating their SDK versions . Most Firebase apps fall into this category.
Apps that explicitly make API calls to Instance ID must update SDK versions and make code changes to replace Instance ID methods with their Firebase installations or FCM equivalents. If your app uses Instance ID to retrieve FCM registration tokens or explicitly uses Instance ID to target app instances or for any other purpose, you'll need to update your application code.
Currently, FIS is backward-compatible with the legacy identifier Firebase Instance ID. Deleting an IID is an alternative method of requesting data deletion with these Firebase SDKs:
- iOS 6.14.0 and lower
- Android SDKs earlier than February 27, 2020
This means that apps are not required to migrate to Firebase installations; however, doing so is highly recommended.
Upgrading to minimum SDK versions for Firebase installations
To migrate from Instance ID to Firebase installations, make sure that your applications use at least the listed minimum version numbers of the following Firebase SDKs:
Firebase SDK | Minimum Android version | Minimum iOS version |
Firebase Cloud Messaging | v20.3.0 | v6.34.0 |
Remote Config | v19.2.0 | v6.24.0 |
Google Analytics for Firebase \ (Measurement SDK) | v17.4.4 | v6.18.0 |
In-App Messaging | 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 |
Updating code that explicitly calls Instance ID APIs
If your Android or Apple app directly uses Instance ID SDK methods, you can replace that usage with identical alternatives in the Firebase installations SDK or the FCM SDK.
Retrieving an identifier
Methods to get Instance IDs are replaced with methods to get an installations ID. For example:
Before
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) }
After
Swift
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); }];
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") } }
Deleting an identifier
Methods to delete Instance IDs are replaced with methods to delete Firebase installation IDs. For example:
Before
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();
After
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") } }
Retrieving an FCM registration token
Prior to the introduction of Firebase Installations, FCM clients retrieved registration tokens from Instance ID. Now, the FCM SDK provides methods to retrieve the registration token.
Before
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; } }];
After
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; } }];