إدارة عمليات تثبيت 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 مباشرةً، أضِف حزمة تطوير البرامج (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) لعمليات تثبيت Firebase على Android إلى ملف Gradle للوحدة (على مستوى التطبيق) (عادةً app/build.gradle):

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

JavaScript

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

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

<script src="/__/firebase/13.1.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، ولا تربطه برقم التعريف السابق أو البيانات السابقة بأي شكل من الأشكال.

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

لحذف معرّفات 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();

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

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

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

Node.js

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

admin.installations().deleteInstallation(idToDelete);

Java

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

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

Python

  from firebase_admin import instance_id

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

  instance_id.delete_instance_id(id_to_delete)

متابعة

client, err := app.InstanceId(ctx)
if err != nil {
  log.Fatalln("error initializing client", err)
}

iidToDelete := "eyJhbGciOiJFUzI1N_iIs5"
if err := client.DeleteInstanceId(ctx, iidToDelete); err != nil {
  log.Fatalln("error deleting FID", err)
}

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

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

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

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

لتتبُّع عملية تدوير مفاتيح 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

لنقل البيانات من "معرّف المثيل" إلى عمليات تثبيت 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 يستردّون رموز التسجيل المميّزة من Instance ID. الآن، توفّر حزمة تطوير البرامج (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);
  }
}];