إدارة عمليات تثبيت 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 لاختيار قيم الإعدادات التي سيتم عرضها على أجهزة المستخدمين النهائيين.

Firebase ML

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

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

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

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

  • لحذف عملية تثبيت 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) لعمليات التثبيت في Firebase إلى ملف Gradle الخاص بالوحدة (على مستوى التطبيق) (عادةً app/build.gradle):

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

JavaScript

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

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

<script src="/__/firebase/12.12.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.

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

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

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

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 من خلال طلب بيانات من واجهة برمجة التطبيقات على الخادم

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

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

Android

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

JavaScript

يمكن لتطبيقات الويب الاشتراك في خطاف 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 تعتمد على حزمة تطوير البرامج (SDK) الخاصة برقم تعريف المثيل للحصول على معرّفات عمليات تثبيت التطبيق. توفّر Firebase عمليات التثبيت مزايا كبيرة مقارنةً بمعرّف المثيل من حيث الموثوقية والأداء والأمان. يجب نقل تطبيقات Firebase التي تعتمد على حزمة تطوير البرامج (SDK) الخاصة بخدمة Instance ID إلى عمليات التثبيت Firebase.

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

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

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

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

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

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

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

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

Firebase SDK الحد الأدنى لإصدار Android الحد الأدنى لإصدار iOS
المراسلة عبر السحابة الإلكترونية من Firebase الإصدار 20.3.0 v6.34.0
الإعداد عن بُعد الإصدار 19.2.0 v6.24.0
‫إحصاءات Google لـ Firebase (حزمة SDK للقياس) v17.4.4 v6.18.0
المراسلة داخل التطبيق v19.0.7 v6.24.0
مراقبة الأداء v19.0.8 الإصدار 6.21.0
Crashlytics v17.2.1 v6.23.0
حزمة تعلّم الآلة الإصدار 22.1.2 v6.28.0

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

إذا كان تطبيقك على Android أو Apple يستخدم بشكل مباشر طرق Instance ID 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"، كانت تطبيقات 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);
  }
}];