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

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

    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.14.1/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 يومًا. وقد تم توضيح هذه العملية على مستوى عالٍ في تقرير بيان الحذف والاحتفاظ بالبيانات.

ما لم يتم إيقاف جميع خدمات إنشاء مقياس FID في ينشئ نظام FIS معرّفًا جديدًا في غضون بضعة أيام. الإعداد عن بُعد رقم التعريف الذي تم إنشاؤه حديثًا هو عملية تثبيت 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)

انتقال

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+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 في 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+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 ضمن هذه الفئة.

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

حاليًا، 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 يستخدم مباشرةً طرق حزمة تطوير البرامج (SDK) لمعرّف المثيل، يمكنك: استبدال هذا الاستخدام ببدائل مماثلة في Firebase من عمليات التثبيت حزمة تطوير البرامج (SDK) أو حزمة تطوير البرامج (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+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")
    }
}

جارٍ استرداد الرمز المميّز للتسجيل في 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+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;
  }
}];