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

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

خدمة Firebase وظائف عمليات التثبيت من Firebase
المراسلة عبر السحابة الإلكترونية من Firebase

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

Firebase Crashlytics

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

المراسلة داخل تطبيق Firebase

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

مراقبة أداء Firebase

تستخدم ميزة "مراقبة الأداء" أرقام تعريف تثبيت Firebase لاحتساب عدد عمليات التثبيت الفريدة لمنصة Firebase التي يمكنها الوصول إلى موارد الشبكة، لضمان أن تكون أنماط الوصول مخفية الهوية بشكل كافٍ. وتستخدم أيضًا أرقام تعريف التثبيت في Firebase مع ميزة "الإعداد عن بُعد في Firebase" لإدارة معدّل إعداد تقارير أحداث الأداء.

الإعداد عن بُعد في Firebase

تستخدم ميزة "الإعداد عن بُعد" أرقام تعريف التثبيت من Firebase لاختيار قيم الإعدادات من أجل الرجوع إلى أجهزة المستخدمين النهائيين.

Firebase ML

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

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

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

تستخدم خدمات Firebase عادةً خدمة عمليات تثبيت Firebase بدون طلب من المطوّرين التفاعل مباشرةً مع 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 والمصادقة:

    واجهة المستخدم

    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:) الخاصة بمفوَّض تطبيقك:

    واجهة المستخدم

    // 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.

    واجهة المستخدم

    @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:18.0.0'

JavaScript

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

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

<script src="/__/firebase/10.12.2/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 بشأن الحذف والاحتفاظ بالبيانات.

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

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

لحذف معرّفات 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+KTX

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 باستخدام طلب بيانات من واجهة برمجة التطبيقات للخادم، يمكنك إضافة حزمة تطوير البرامج (SDK) لمشرف Firebase إلى خادمك، إذا لم يسبق لك إجراء ذلك.

بعد إضافة حزمة تطوير البرامج (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)

Go

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 في تلقِّي إشعارات ميزة "المراسلة عبر السحابة الإلكترونية من Firebase" لبضع ساعات.

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

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

إذا كانت لديك مطلب لتحديد عمليات تثبيت معيّنة لتطبيقك، يمكنك إجراء ذلك من خلال استرداد معرّف تثبيت Firebase. على سبيل المثال، لإنشاء شرائح من عمليات تثبيت التطبيق لاستيراد BiqQuery، أو لإجراء اختبار أثناء تطوير "المراسلة داخل التطبيق على Firebase"، يمكنك تحديد الأجهزة الصحيحة واستهدافها باستخدام معرّفات تثبيت 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+KTX

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

JavaScript

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

Dart

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

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

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

رمز مصادقة التثبيت هو رمز مميّز قصير الأجل للحامل بتنسيق رمز 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+KTX

val forceRefresh = true
FirebaseInstallations.getInstance().getToken(forceRefresh)
    .addOnCompleteListener { task ->
        if (task.isSuccessful) {
            Log.d("Installations", "Installation auth token: " + task.result?.token)
        } else {
            Log.e("Installations", "Unable to get Installation auth token")
        }
    }

JavaScript

const installationToken = await firebase.installations()
    .getToken(/* forceRefresh */ true);
console.log(installationToken);

Dart

String token = await FirebaseInstallations.instance.getToken();

مراقبة مراحل نشاط معرّف تثبيت 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 التلقائي كلما تم تعيين قيمة FID جديدة.

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');
});

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

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

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

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

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

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

  • iOS 6.14.0 والإصدارات الأقدم
  • حِزم تطوير البرامج (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 يستخدم مباشرةً طرق Instance ID SDK، يمكنك استبدال هذا الاستخدام ببدائل مماثلة في حزمة SDK الخاصة بعمليات تثبيت Firebase أو حزمة FCM SDK.

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

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

قبل

Swift

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

Objective-C

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

Java

FirebaseInstanceId.getInstance().getInstanceId()
        .addOnCompleteListener(new OnCompleteListener<InstanceIdResult>() {
            @Override
            public void onComplete(@NonNull Task<InstanceIdResult> task) {
                Log.d("IID_TOKEN", task.getResult().getToken());
            }
        });

Kotlin+KTX

FirebaseInstanceId.getInstance().instanceId
        .addOnSuccessListener { result ->
            Log.d("IID_TOKEN", result.token)
        }

بعد

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+KTX

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

حذف أحد المعرّفات

يتم استبدال طرق حذف أرقام تعريف المثيلات بطرق لحذف أرقام تعريف تثبيت Firebase. على سبيل المثال:

قبل

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+KTX

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

استرداد الرمز المميز للتسجيل في خدمة "المراسلة عبر السحابة الإلكترونية من Firebase"

قبل طرح عمليات تثبيت Firebase، استرجع عملاء خدمة "المراسلة عبر السحابة الإلكترونية من Firebase" رموز التسجيل المميَّزة من رقم تعريف المثيل. توفِّر حزمة تطوير البرامج (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+KTX

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

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

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

Swift

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

Objective-C

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

بعد

Java

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

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

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

Kotlin+KTX

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

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

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

Swift

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

Objective-C

[[FIRMessaging messaging] tokenWithCompletion:^(NSString *token, NSError *error) {
  if (error != nil) {
    NSLog(@"Error getting FCM registration token: %@", error);
  } else {
    NSLog(@"FCM registration token: %@", token);
    self.fcmRegTokenMessage.text = token;
  }
}];