إدارة عمليات تثبيت Firebase

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

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

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

Firebase Crashlytics

Firebase Crashlytics تُغيّر Crashlytics قيمة معرّف فريد لجلسة قياس الأداء (UUID) استنادًا إلى التغييرات في معرّف عملية التثبيت على 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 لاختيار قيم الإعدادات التي سيتم عرضها على أجهزة المستخدمين النهائيين.

Firebase ML

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

مساحة تخزين تصنيف المستخدِمين في Firebase

تخزِّن ميزة "تخزين شرائح المستخدمين في Firebase" Firebase أرقام تعريف عمليات التثبيت والسمات والشرائح ذات الصلة لتقديم معلومات الاستهداف إلى خدمات Firebase الأخرى التي تستخدمها.

تستخدِم خدمات Firebase عادةً خدمة Firebase installations بدون طلب المطوّرين التفاعل مباشرةً مع واجهة برمجة التطبيقات FIS API. ومع ذلك، قد يحتاج مطوّرو التطبيقات في بعض الحالات إلى طلب واجهة برمجة التطبيقات FIS 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:18.0.0'

JavaScript

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

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

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

Flutter

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

    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 بشأن الحذف والاحتفاظ بالبيانات.

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

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

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

Swift

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

Objective-C

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

Java

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

Kotlin

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

JavaScript

await firebase.installations().delete();

Dart

await FirebaseInstallations.instance.delete();

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

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

بعد إضافة حزمة تطوير البرامج (SDK)، يمكنك حذف معرّفات FID من خلال طلب دالّة الحذف بلغة من اختيارك (ملاحظة: باستثناء Node.js، تعكس هذه الدالّات طريقة تسمية معرّف النسخة). ومع ذلك، تحذف جميع هذه الأدوات ملف IDE عند استدعائه باستخدام أي حزمة حالية من حِزم تطوير البرامج (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 إشعارًا إلى تطبيق العميل، قد تستمر بعض خدمات التطبيق في استهداف المعرّف. على سبيل المثال، قد يستمر تلقّي إشعارات FCM من عملية تثبيت Firebase لعدة ساعات.

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

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

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

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

لتتبُّع عملية تدوير FID:

Swift

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

Objective-C

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

يتم تسجيل NSNotification باسم NSNotificationName.InstallationIDDidChange في NSNotificationCenter التلقائي عند تعيين FID جديد.

Android

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

JavaScript

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

عند إنشاء معرّف FID جديد، يتم بدء callback المشترَك:

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

Dart

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

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

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

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

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

  • على التطبيقات التي تُجري طلبات بيانات صريحة من واجهة برمجة التطبيقات إلى معرّف الإصدار استبدال إصدارات حزمة تطوير البرامج و إجراء تغييرات على الرمز البرمجي لاستبدال Firebase عمليات التثبيت أو FCM المكافئ لها بطرق معرّف الإصدار. إذا كان تطبيقك يستخدم معرّف المثيل لاسترداد FCM الرموز المميّزة لتسجيل الأجهزة أو يستخدم معرّف المثيل صراحةً لاستهداف نُسخ التطبيق أو لأي غرض آخر، عليك تعديل رمز تطبيقك.

في الوقت الحالي، تتوافق ميزة FIS مع المعرّف القديم "رقم تعريف نسخة Firebase الافتراضية". حذف معرّف الجهاز المتّصل (IID) هو طريقة بديلة لطلب حذف البيانات باستخدام حِزم تطوير البرامج (SDK) التالية من Firebase:

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

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

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

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

حزمة تطوير البرامج (SDK) لمنصة Firebase الحد الأدنى لإصدار 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

تعديل الرمز الذي يستدعي واجهات برمجة تطبيقات أرقام تعريف النُسخ الافتراضية بشكل صريح

إذا كان تطبيق Android أو Apple يستخدم مباشرةً طرق حزمة تطوير البرامج (SDK) لـ Instance ID، يمكنك استبدال هذا الاستخدام ببدائل متطابقة في حزمة تطوير البرامج (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)")
    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

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"، كان عملاء FCM retrieving registration tokens from Instance ID. توفّر حزمة SDK لتطبيق FCM الآن methods لاسترداد الرمز المميّز للتسجيل.

قبل

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

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

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