إدارة عمليات تثبيت 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

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

مراقبة أداء Firebase

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

تهيئة Firebase عن بُعد

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

Firebase ML

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

تخزين تجزئة مستخدمي Firebase

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

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

  • لحذف تثبيت Firebase والبيانات المرتبطة بالتثبيت.
  • لاسترداد المعرفات (معرفات تثبيت Firebase) من أجل استهداف عمليات تثبيت تطبيقات معينة.
  • لاسترداد رموز مصادقة التثبيت لمصادقة عمليات تثبيت Firebase.

لبدء الاتصال مباشرة بواجهة برمجة تطبيقات FIS ، أضف SDK إلى تطبيقك.

أضف حزمة تطوير البرامج (SDK) الخاصة بتثبيتات Firebase إلى تطبيقك

iOS +

  1. أضف التبعية لعمليات تثبيت Firebase إلى Podfile:
    pod 'FirebaseInstallations'
  2. قم بتشغيل pod install وافتح ملف .xcworkspace الذي تم إنشاؤه.
  3. قم باستيراد وحدة FirebaseCore في مندوب UIApplicationDelegate ، بالإضافة إلى أي وحدات Firebase أخرى يستخدمها مفوض التطبيق. على سبيل المثال ، لاستخدام Cloud Firestore والمصادقة:

    SwiftUI

    import SwiftUI
    import FirebaseCore
    import FirebaseFirestore
    import FirebaseAuth
    // ...
          

    سويفت

    import FirebaseCore
    import FirebaseFirestore
    import FirebaseAuth
    // ...
          

    ج موضوعية

    @import FirebaseCore;
    @import FirebaseFirestore;
    @import FirebaseAuth;
    // ...
          
  4. قم بتهيئة مثيل FirebaseApp مشترك في application(_:didFinishLaunchingWithOptions:) :

    SwiftUI

    // Use Firebase library to configure APIs
    FirebaseApp.configure()

    سويفت

    // Use Firebase library to configure APIs
    FirebaseApp.configure()

    ج موضوعية

    // 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()
          }
        }
      }
    }
          

ذكري المظهر

أضف تبعية تثبيتات Firebase Android SDK إلى ملف Gradle (على مستوى التطبيق) للوحدة النمطية الخاصة بك (عادةً app/build.gradle ):

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

جافا سكريبت

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

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

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

رفرفة

  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 باستدعاء عميل API

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

سويفت

Installations.installations().delete { error in
  if let error = error {
    print("Error deleting installation: \(error)")
    return
  }
  print("Installation deleted");
}

ج موضوعية

[[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")
    }
}

جافا سكريبت

await firebase.installations().delete();

Dart

await FirebaseInstallations.instance.delete();

احذف FID باستدعاء خادم API

لحذف FID باستدعاء خادم API ، أضف Firebase Admin SDK إلى الخادم الخاص بك ، إذا لم تكن قد قمت بذلك بالفعل.

بمجرد إضافة SDK ، احذف FIDs من خلال استدعاء لوظيفة الحذف باللغة التي تختارها (ملاحظة: باستثناء 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();

بايثون

  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 باستخدام استدعاء خادم API ، تبدأ خدمات Firebase العملية لحذف البيانات المرتبطة بمعرف التثبيت هذا ، والتوقف عن قبول البيانات الجديدة لهذا المعرف على مدار يوم أو يومين ، ثم إخطار تطبيق العميل أنه تم حذف المعرف. إلى أن يخطر Firebase تطبيق العميل ، قد تستمر بعض خدمات التطبيق في استهداف المعرف - على سبيل المثال ، قد يستمر تثبيت Firebase في تلقي إشعارات FCM لبضع ساعات.

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

استرجع معرفات العميل

إذا كان لديك متطلب لتحديد عمليات تثبيت معينة لتطبيقك ، فيمكنك القيام بذلك عن طريق استرداد معرف تثبيت Firebase. على سبيل المثال ، لإجراء اختبار أثناء تطوير Firebase In-App Messaging ، يمكنك تحديد جهاز الاختبار الصحيح واستهدافه باستخدام معرف تثبيت Firebase الخاص به.

لاسترداد معرف تثبيت Firebase:

سويفت

Installations.installations().installationID { (id, error) in
  if let error = error {
    print("Error fetching id: \(error)")
    return
  }
  guard let id = id else { return }
  print("Installation ID: \(id)")
}

ج موضوعية

[[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")
    }
}

جافا سكريبت

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

Dart

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

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

يمكن لخدمات Firebase مصادقة عمليات تثبيت Firebase باستخدام رموز المصادقة المستردة من FIS. على سبيل المثال ، عند تصميم اختبارات A / B لـ Remote Config ، يمكنك مصادقة جهاز اختبار مستهدف باستخدام رمز مصادقة التثبيت.

رمز مصادقة التثبيت هو رمز حامل قصير العمر بتنسيق JSON web token (JWT) يحتوي على المعلومات التالية للتثبيت:

  • معرّف تثبيت Firebase
  • المشروع المصاحب ( projectNumber )
  • معرّف تطبيق Firebase المرتبط ( appId )
  • تاريخ انتهاء صلاحية الرمز المميز

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

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

سويفت

Installations.installations().authTokenForcingRefresh(true, completion: { (result, error) in
  if let error = error {
    print("Error fetching token: \(error)")
    return
  }
  guard let result = result else { return }
  print("Installation auth token: \(result.authToken)")
})

ج موضوعية

[[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")
        }
    }

جافا سكريبت

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

Dart

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

راقب دورة حياة معرف تثبيت Firebase

أثناء التشغيل العادي لأحد التطبيقات ، لا تتطلب معرفات تثبيت Firebase (FID) مراقبة خاصة. ومع ذلك ، يجب أن تضيف التطبيقات التي تسترد وتستخدم FIDs بشكل صريح منطقًا لمراقبة الحذف أو التدوير المحتمل لمعرفات الإدخال (FID). فيما يلي بعض الحالات التي يمكن فيها حذف FIDs أو تدويرها:

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

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

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

لمراقبة دوران FID:

سويفت

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

ج موضوعية

__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 جديد.

ذكري المظهر

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

جافا سكريبت

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

تختلف عملية الترحيل بناءً على تطبيقك:

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

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

حاليًا ، FIS متوافق مع الإصدارات السابقة مع المعرف القديم Firebase Instance ID. يعد حذف IID طريقة بديلة لطلب حذف البيانات باستخدام مجموعات Firebase SDK:

  • iOS 6.14.0 والإصدارات الأقدم
  • مجموعات Android SDK قبل 27 فبراير 2020

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

الترقية إلى الحد الأدنى من إصدارات SDK لعمليات تثبيت Firebase

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

Firebase SDK الحد الأدنى من إصدار Android الحد الأدنى من إصدار iOS
Firebase Cloud Messaging الإصدار 20.3.0 الإصدار 6.34.0
التكوين عن بعد الإصدار 19.2.0 الإصدار 6.24.0
Google Analytics for Firebase \ (Measurement 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
ML كيت الإصدار 22.1.2 الإصدار 6.28.0

تحديث التعليمات البرمجية التي تستدعي بشكل صريح واجهات برمجة تطبيقات معرف المثيل

إذا كان تطبيق Android أو Apple الخاص بك يستخدم طرق SDK لمعرف المثيل مباشرةً ، فيمكنك استبدال هذا الاستخدام ببدائل مماثلة في حزمة تطوير البرامج (SDK) الخاصة بتثبيتات Firebase أو FCM SDK.

استرجاع المعرف

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

قبل

سويفت

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)"
  }
}

ج موضوعية

[[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)
        }

بعد

سويفت

Installations.installations().installationID { (id, error) in
  if let error = error {
    print("Error fetching id: \(error)")
    return
  }
  guard let id = id else { return }
  print("Installation ID: \(id)")
}

ج موضوعية

[[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. على سبيل المثال:

قبل

سويفت

InstanceID.instanceID().deleteID { error in
  if let error = error {
    print("Error deleting instance ID: \(error)")
  }
}

ج موضوعية

[FIRInstanceID instanceID] deleteIDWithHandler:^(NSError *error) {
  if error != nil {
    NSLog(@"Error deleting instance ID: %@", error);
  }
}];

ذكري المظهر

FirebaseInstanceId.deleteInstanceId();

بعد

سويفت

func delete(completion: @escaping (Error?) -> Void)

ج موضوعية

- (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 باسترداد الرموز المميزة للتسجيل من معرف المثيل. الآن ، توفر FCM SDK طرقًا لاسترداد رمز التسجيل.

قبل

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()
        })

سويفت

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)"
  }
}

ج موضوعية

[[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()
})

سويفت

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)"
  }
}

ج موضوعية

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