إدارة عمليات تثبيت Firebase وأرقام التعريف

توفّر خدمة عمليات تثبيت Firebase (FIS) رقم تعريف تثبيت Firebase (FID) لكل نسخة افتراضية مثبّتة من تطبيق Firebase. ويتم استخدام رقم تعريف تثبيت Firebase داخليًا من خلال خدمات Firebase التالية:

خدمة Firebase وظائف تثبيت Firebase
Firebase Cloud Messaging

يستخدم تطبيق "Firebase Cloud Messaging" معرّفات تثبيت "Firebase" لاستهداف الأجهزة من أجل تسليم الرسائل.

Firebase Crashlytics

Firebase Crashlytics يغيّر معرّف UUID لتثبيت Crashlytics استنادًا إلى التغييرات في معرّف تثبيت Firebase لنسخة التطبيق. في المستقبل، قد يتم استخدام معرّف التثبيت لتفعيل الميزات التي تحسّن خدمات إعداد تقارير الأعطال وإدارة الأعطال.

Firebase In-App Messaging

يستخدم Firebase In-App Messaging معرّفات تثبيت عددها Firebase لاستهداف الأجهزة من أجل تسليم الرسائل.

Firebase Performance Monitoring

تستخدم Performance Monitoring معرّفات تثبيت Firebase لاحتساب عدد عمليات تثبيت Firebase الفريدة التي تصل إلى موارد الشبكة، وذلك لضمان أن تكون أنماط الوصول مجهولة الهوية بشكل كافٍ. وتستخدم أيضًا معرّفات تثبيت Firebase مع Firebase Remote Config لإدارة معدّل إعداد تقارير أحداث الأداء.

Firebase Remote Config

تستخدم ميزة "Remote Config" معرّفات تثبيت "Firebase" لاختيار قيم الإعدادات التي سيتم عرضها على أجهزة المستخدمين النهائيين. تستخدم ميزة التخصيص في Remote Config معرّفات تثبيت Firebase لربط بيانات أحداث التطبيق بعمليات تثبيت Firebase من أجل توقّع قيم الإعدادات المثلى وعرضها على أجهزة المستخدمين النهائيين.

Firebase ML

يستخدم Firebase ML بيانات الاعتماد التي تُسمى رموز المصادقة المميزة للتثبيت للمصادقة على الجهاز عند التفاعل مع نُسخ التطبيق، على سبيل المثال، لتوزيع نماذج المطوّرين على نُسخ التطبيق.

Firebase User Segmentation Storage

تخزّن خدمة Firebase User Segmentation Storage معرّفات التثبيت البالغ عددها Firebase والسمات وشرائح المستخدمين ذات الصلة لتوفير معلومات الاستهداف لخدمات Firebase الأخرى التي تستخدمها.

عادةً ما تستخدم خدمات Firebase خدمة عمليات تثبيت Firebase بدون مطالبة المطوّرين بالتفاعل مباشرةً مع واجهة برمجة التطبيقات FIS API. ومع ذلك، قد يحتاج مطوّرو التطبيقات في بعض الحالات إلى طلب واجهة برمجة التطبيقات Firebase Installations API مباشرةً، مثل:

  • لحذف عملية تثبيت Firebase والبيانات المرتبطة بها
  • استرداد المعرّفات (معرّفات تثبيت Firebase) لاستهداف عمليات تثبيت تطبيقات معيّنة
  • استرداد الرموز المميّزة لمصادقة عمليات تثبيت Firebase

لبدء طلب البيانات من واجهة برمجة التطبيقات FIS API مباشرةً، أضِف حزمة تطوير البرامج (SDK) إلى تطبيقك.

إضافة حزمة تطوير البرامج (SDK) لعمليات تثبيت Firebase إلى تطبيقك

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. يجب أيضًا إيقاف ميزة "تبديل مفوّض التطبيق". لمزيد من المعلومات، يُرجى الاطّلاع على تعليمات 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

أضِف الاعتمادية لعمليات تثبيت حزمة تطوير البرامج (SDK) لنظام التشغيل Android في Firebase إلى ملف Gradle للوحدة (على مستوى التطبيق) (عادةً app/build.gradle):

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

JavaScript

بناءً على طريقة استضافة تطبيق الويب، قد تتم معالجة الإعدادات تلقائيًا أو قد تحتاج إلى تعديل عنصر إعدادات Firebase.

على سبيل المثال، إذا تمت إضافة التبعيات في index.html، أضِف التبعية في عنصر <head>:

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

Flutter

  1. من الدليل الجذري لمشروع Flutter، نفِّذ الأمر التالي لتثبيت المكوّن الإضافي لعمليات تثبيت Firebase:

    flutter pub add firebase_app_installations
    
  2. أعِد إنشاء مشروعك:

    flutter run
    
  3. استورِد المكوّن الإضافي لعمليات تثبيت Firebase:

    import 'package:firebase_app_installations/firebase_app_installations.dart';
    

حذف عملية تثبيت Firebase

البيانات المرتبطة بعملية تثبيت Firebase هي بشكل عام غير محدِّدة للهوية الشخصية. ومع ذلك، قد يكون من المفيد منح المستخدمين خيارًا لإدارة هذه البيانات وحذفها.

تختلف أرقام تعريف تثبيت "Firebase" لكل عملية تثبيت لكل تطبيق، كما تختلف أرقام تعريف تثبيت "Firebase" للتطبيقات المختلفة على الجهاز نفسه. تحدّد معرّفات التثبيت في "Firebase" عمليات تثبيت التطبيقات والبيانات المرتبطة بها.

عند حذف معرّف تثبيت، تتم إزالة البيانات المرتبطة به من الأنظمة المباشرة وأنظمة الاحتفاظ بنسخة احتياطية لجميع خدمات Firebase التي تستخدم معرّفات تثبيت Firebase لتحديد عمليات التثبيت في غضون 180 يومًا. يتم وصف هذه العملية بشكل عام في بيان Google بشأن الحذف والاحتفاظ بالبيانات.

ما لم يتم إيقاف جميع الخدمات التي تنشئ معرّفات تثبيت Firebase في تطبيقك، ستنشئ خدمة FIS معرّفًا جديدًا في غضون بضعة أيام. تعتبر Firebase رقم التعريف الذي تم إنشاؤه حديثًا عملية تثبيت جديدة لـ Firebase، ولا تربطه برقم التعريف السابق أو البيانات السابقة بأي شكل من الأشكال.

حذف معرّف FID من خلال طلب بيانات من واجهة برمجة التطبيقات للعميل

لحذف معرّفات Firebase التي تم إنشاؤها بواسطة خدمات Firebase، استدعِ الطريقة المناسبة من حزمة تطوير البرامج (SDK) لعمليات تثبيت Firebase:

Swift

do {
  try await Installations.installations().delete()
  print("Installation deleted");
} catch {
  print("Error deleting installation: \(error)")
}

Objective-C

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

Java

FirebaseInstallations.getInstance().delete()
        .addOnCompleteListener(new OnCompleteListener<Void>() {
    @Override
    public void onComplete(@NonNull Task<Void> task) {
        if (task.isSuccessful()) {
            Log.d("Installations", "Installation deleted");
        } else {
            Log.e("Installations", "Unable to delete Installation");
        }
    }
});

Kotlin

FirebaseInstallations.getInstance().delete().addOnCompleteListener { task ->
    if (task.isComplete) {
        Log.d("Installations", "Installation deleted")
    } else {
        Log.e("Installations", "Unable to delete Installation")
    }
}

JavaScript

await firebase.installations().delete();

Dart

await FirebaseInstallations.instance.delete();

حذف معرّف مثيل Firebase من خلال طلب بيانات من واجهة برمجة التطبيقات للخادم

لحذف معرّف مثبّت Firebase من خلال طلب بيانات من واجهة برمجة تطبيقات الخادم، أضِف حزمة تطوير البرامج (SDK) لمشرف Firebase إلى الخادم، إذا لم يسبق لك إجراء ذلك.

بعد إضافة حزمة تطوير البرامج (SDK)، احذف معرّفات مثيلات Firebase من خلال استدعاء دالة الحذف باللغة التي تختارها (ملاحظة: باستثناء Node.js، تعكس هذه الطرق تسمية معرّف المثيل. ومع ذلك، فإنّها جميعًا تحذف معرّف FID عند استدعائها باستخدام أي حزمة تطوير برامج (SDK) حالية من Firebase).

Node.js

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

admin.installations().deleteInstallation(idToDelete);

Java

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

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

Python

  from firebase_admin import instance_id

  # An FID sent from a client service SDK
  id_to_delete = 'eyJhbGciOiJFUzI1N_iIs5'

  instance_id.delete_instance_id(id_to_delete)

متابعة

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 من خلال طلب بيانات من واجهة برمجة التطبيقات للخادم، تبدأ خدمات Firebase عملية حذف البيانات المرتبطة بمعرّف التثبيت هذا، وتتوقف عن قبول بيانات جديدة لهذا المعرّف على مدار يوم أو يومين، ثم تُرسل إشعارًا إلى تطبيق العميل يفيد بأنّه تم حذف المعرّف. إلى أن تُرسل Firebase إشعارًا إلى تطبيق العميل، قد تظل بعض خدمات التطبيق تستهدف رقم التعريف، على سبيل المثال، قد يستمر تثبيت Firebase في تلقّي إشعارات FCM لبضع ساعات.

إذا أردت حذف معرّف تثبيت Firebase الحالي واستخدام خدمات Firebase على الفور باستخدام معرّف جديد غير مرتبط، استخدِم واجهة برمجة تطبيقات العميل لمعالجة عملية الحذف.

استرداد معرّفات العملاء

إذا كنت بحاجة إلى تحديد عمليات تثبيت معيّنة لتطبيقك، يمكنك إجراء ذلك من خلال استرداد معرّف تثبيت "Firebase". على سبيل المثال، لإنشاء شرائح لعمليات تثبيت التطبيقات من أجل استيرادها إلى BigQuery أو لإجراء اختبارات أثناء تطوير Firebase In-App Messaging، يمكنك تحديد الأجهزة الصحيحة واستهدافها باستخدام معرّفات تثبيت Firebase المقابلة.

لاسترداد رقم تعريف تثبيت Firebase:

Swift

do {
  let id = try await Installations.installations().installationID()
  print("Installation ID: \(id)")
} catch {
  print("Error fetching id: \(error)")
}

Objective-C

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

Java

FirebaseInstallations.getInstance().getId()
        .addOnCompleteListener(new OnCompleteListener<String>() {
    @Override
    public void onComplete(@NonNull Task<String> task) {
        if (task.isSuccessful()) {
            Log.d("Installations", "Installation ID: " + task.getResult());
        } else {
            Log.e("Installations", "Unable to get Installation ID");
        }
    }
});

Kotlin

FirebaseInstallations.getInstance().id.addOnCompleteListener { task ->
    if (task.isSuccessful) {
        Log.d("Installations", "Installation ID: " + task.result)
    } else {
        Log.e("Installations", "Unable to get Installation ID")
    }
}

JavaScript

const installationId = await firebase.installations().getId();
console.log(installationId);

Dart

String id = await FirebaseInstallations.instance.getId();

استرداد الرموز المميّزة لمصادقة التثبيت

يمكن لخدمات Firebase مصادقة عمليات تثبيت Firebase باستخدام رموز المصادقة المميّزة التي يتم استردادها من FIS. على سبيل المثال، عند تصميم اختبارات A/B لـ "Remote Config"، يمكنك مصادقة جهاز اختبار مستهدَف باستخدام رمز مميّز لمصادقة التثبيت.

رمز المصادقة للتثبيت هو رمز حامل مميز قصير الأجل بتنسيق رمز الويب المميّز JSON‏ (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) مراقبة خاصة. ومع ذلك، يجب أن تضيف التطبيقات التي تسترد معرّفات FID وتستخدمها بشكل صريح منطقًا لمراقبة الحذف أو التغيير المحتمل لمعرّف FID. في ما يلي بعض الحالات التي يمكن فيها حذف معرّفات FID أو تدويرها:

  • إلغاء تثبيت التطبيق أو إعادة تثبيته، على سبيل المثال عندما يثبّت المستخدم النهائي التطبيق على جهاز جديد
  • محو المستخدم النهائي لذاكرة التخزين المؤقت للتطبيق أو الجهاز
  • يتم حذف معرّف FID في الخلفية بسبب عدم نشاط التطبيق (الحدّ الأقصى حاليًا هو 270 يومًا من عدم النشاط).

عندما يتم تدوير معرّفات FID أو حذفها في التطبيقات في هذه الحالات، يتم تخصيص معرّف FID جديد لها. بالإضافة إلى ذلك، يتم حذف رمز المصادقة الخاص بالتثبيت والمرتبط بمعرّف FID محذوف، بغض النظر عن مدى صلاحيته، ويتم استبداله برمز مصادقة جديد خاص بالتثبيت.

ويمكن للتطبيقات مراقبة هذه التغييرات والاستجابة لها وفقًا لذلك.

لمراقبة تدوير مفتاح FID:

Swift

installationIDObserver = NotificationCenter.default.addObserver(
        forName: .InstallationIDDidChange,
        object: nil,
        queue: nil
) { (notification) in
  // Fetch new Installation ID
  Task {
    await self.fetchInstallationToken()
  }
}

Objective-C

__weak __auto_type weakSelf = self;
self.installationIDObserver = [[NSNotificationCenter defaultCenter]
        addObserverForName: FIRInstallationIDDidChangeNotification
                    object:nil
                     queue:nil
                usingBlock:^(NSNotification * _Nonnull notification) {
    // Fetch new Installation ID
    [weakSelf fetchInstallationsID];
}];

يتم نشر NSNotification باسم NSNotificationName.InstallationIDDidChange إلى NSNotificationCenter التلقائي كلما تم تعيين معرّف مثبّت Firebase جديد.

Android

يجب أن يضيف عملاء Kotlin وJava منطق إعادة المحاولة للاستجابة للمكالمات التي تعذّر إجراؤها لاسترداد معرّف FID الجديد.

JavaScript

يمكن لتطبيقات الويب الاشتراك في الرمز البرمجي onIdChange.

عند إنشاء معرّف مثيل Firebase جديد، يتم تشغيل دالة ردّ الاتصال التي تم الاشتراك فيها:

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

Dart

FirebaseInstallations.instance.onIdChange.listen((token) {
  print('FID token: $token');
});

النقل من "رقم تعريف المثيل" إلى عمليات تثبيت Firebase

قبل طرح عمليات تثبيت Firebase، كان Firebase يعتمد على حزمة تطوير البرامج (SDK) لرقم تعريف المثيل من أجل الحصول على معرّفات عمليات تثبيت التطبيقات. Firebase installations provides significant advantages over Instance ID in reliability, performance, and security. يجب نقل تطبيقات Firebase التي تعتمد على حزمة تطوير البرامج (SDK) لرقم تعريف المثيل إلى عمليات تثبيت Firebase.

تختلف عملية النقل حسب تطبيقك:

  • يمكن للتطبيقات التي لا تستدعي واجهات برمجة التطبيقات Instance ID مباشرةً نقل بياناتها من خلال تحديث إصدارات حِزم تطوير البرامج (SDK). وتندرج معظم تطبيقات Firebase ضمن هذه الفئة.

  • يجب أن تعمل التطبيقات التي تطلب بيانات من واجهة برمجة التطبيقات بشكل صريح إلى Instance ID على تحديث إصدارات حزمة تطوير البرامج (SDK) و إجراء تغييرات على الرمز لاستبدال طرق Instance ID بما يعادلها من Firebase installations أو FCM. إذا كان تطبيقك يستخدم &quot;رقم تعريف المثيل&quot; لاسترداد رموز تسجيل FCM أو يستخدم صراحةً &quot;رقم تعريف المثيل&quot; لاستهداف مثيلات التطبيق أو لأي غرض آخر، عليك تعديل الرمز البرمجي للتطبيق.

في الوقت الحالي، تتوافق خدمة FIS مع الأنظمة القديمة، مثل معرّف Firebase Instance ID. يُعدّ حذف معرّف مثيل Firebase طريقة بديلة لطلب حذف البيانات باستخدام حِزم تطوير البرامج (SDK) التالية من Firebase:

  • الإصدار 6.14.0 من نظام التشغيل iOS والإصدارات الأقدم
  • حِزم تطوير البرامج (SDK) لنظام التشغيل Android التي تم إصدارها قبل 27 فبراير 2020

وهذا يعني أنّ التطبيقات ليست مُلزَمة بالانتقال إلى عمليات تثبيت Firebase، ولكن يُنصح بشدة بإجراء ذلك.

الترقية إلى الحد الأدنى من إصدارات حزمة تطوير البرامج (SDK) لعمليات تثبيت "Firebase"

لنقل البيانات من Instance ID إلى عمليات تثبيت Firebase، تأكَّد من أنّ تطبيقاتك تستخدم على الأقل الحد الأدنى من أرقام الإصدارات المدرَجة لحِزم Firebase SDK التالية:

Firebase SDK الحد الأدنى لإصدار Android الحد الأدنى لإصدار iOS
مراسلة Firebase السحابية الإصدار 20.3.0 الإصدار 6.34.0
الإعداد عن بُعد الإصدار 19.2.0 الإصدار 6.24.0
إحصاءات Google لـ Firebase (حزمة 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

تعديل الرمز البرمجي الذي يطلب واجهات برمجة تطبيقات Instance ID بشكل صريح

إذا كان تطبيق Android أو Apple يستخدم مباشرةً طرق حزمة تطوير البرامج (SDK) لمعرّف المثيل، يمكنك استبدال هذا الاستخدام ببدائل مماثلة في حزمة تطوير البرامج (SDK) لعمليات تثبيت Firebase أو حزمة تطوير البرامج (SDK) لخدمة FCM.

استرداد معرّف

تم استبدال طرق الحصول على معرّفات المثيلات بطرق الحصول على معرّف عمليات التثبيت. على سبيل المثال:

قبل

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 يستردّون رموز التسجيل المميّزة من "رقم تعريف المثيل". توفّر حزمة تطوير البرامج (SDK) لخدمة FCM الآن طرقًا لاسترداد الرمز المميّز للتسجيل.

قبل

Java

FirebaseInstanceId.getInstance().getInstanceId()
        .addOnCompleteListener(new OnCompleteListener<InstanceIdResult>() {
            @Override
            public void onComplete(@NonNull Task<InstanceIdResult> task) {
                if (!task.isSuccessful()) {
                    Log.w(TAG, "getInstanceId failed", task.getException());
                    return;
                }

                // Get new Instance ID token
                String token = task.getResult().getToken();

                // Log and toast
                String msg = getString(R.string.msg_token_fmt, token);
                Log.d(TAG, msg);
                Toast.makeText(MainActivity.this, msg, Toast.LENGTH_SHORT).show();
            }
        });

Kotlin

FirebaseInstanceId.getInstance().instanceId
        .addOnCompleteListener(OnCompleteListener { task ->
            if (!task.isSuccessful) {
                Log.w(TAG, "getInstanceId failed", task.exception)
                return@OnCompleteListener
            }

            // Get new Instance ID token
            val token = task.result?.token

            // Log and toast
            val msg = getString(R.string.msg_token_fmt, token)
            Log.d(TAG, msg)
            Toast.makeText(baseContext, msg, Toast.LENGTH_SHORT).show()
        })

Swift

InstanceID.instanceID().instanceID { result, error in
  if let error = error {
    print("Error fetching instance ID: \(error)")
  } else if let result = result {
    print("Instance ID token: \(result.token)")
  }
}

Objective-C

[[FIRInstanceID instanceID] instanceIDWithHandler:^(FIRInstanceIDResult * _Nullable result,
                                                    NSError * _Nullable error) {
  if (error != nil) {
    NSLog(@"Error fetching instance ID: %@", error);
  } else {
    NSLog(@"Instance ID token: %@", result.token);
  }
}];

بعد

Java

FirebaseMessaging.getInstance().getToken()
    .addOnCompleteListener(new OnCompleteListener<String>() {
        @Override
        public void onComplete(@NonNull Task<String> task) {
          if (!task.isSuccessful()) {
            Log.w(TAG, "Fetching FCM registration token failed", task.getException());
            return;
          }

          // Get new FCM registration token
          String token = task.getResult();

          // Log and toast
          String msg = getString(R.string.msg_token_fmt, token);
          Log.d(TAG, msg);
          Toast.makeText(MainActivity.this, msg, Toast.LENGTH_SHORT).show();
        }
    });

Kotlin

FirebaseMessaging.getInstance().token.addOnCompleteListener(OnCompleteListener { task ->
    if (!task.isSuccessful) {
        Log.w(TAG, "Fetching FCM registration token failed", task.exception)
        return@OnCompleteListener
    }

    // Get new FCM registration token
    val token = task.result

    // Log and toast
    val msg = getString(R.string.msg_token_fmt, token)
    Log.d(TAG, msg)
    Toast.makeText(baseContext, msg, Toast.LENGTH_SHORT).show()
})

Swift

Messaging.messaging().token { token, error in
  if let error = error {
    print("Error fetching remote FCM registration token: \(error)")
  } else if let token = token {
    print("Remote instance ID token: \(token)")
  }
}

Objective-C

[[FIRMessaging messaging] tokenWithCompletion:^(NSString * _Nullable token, NSError * _Nullable error) {
  if (error != nil) {
    NSLog(@"Error fetching the remote FCM registration token: %@", error);
  } else {
    NSLog(@"Remote FCM registration token: %@", token);
    NSString* message =
      [NSString stringWithFormat:@"FCM registration token: %@", token];
    // display message
    NSLog(@"%@", message);
  }
}];