Catch up on everthing we announced at this year's Firebase Summit. Learn more

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

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

خدمة Firebase وظائف عمليات تثبيت Firebase
Firebase Cloud Messaging

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

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

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

مراقبة أداء Firebase

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

توقعات Firebase

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

Google Analytics for Firebase

يستخدم Google Analytics for Firebase البيانات لتوفير معلومات التحليلات والإحالة. يمكن أن تختلف المعلومات الدقيقة التي يتم جمعها حسب الجهاز والبيئة.

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

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

Firebase ML

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

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

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

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

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

iOS +

  1. إضافة تبعية المنشآت Firebase لديك Podfile:
    pod 'Firebase/Installations'
  2. تشغيل pod install وفتح إنشاؤها .xcworkspace الملف.
  3. استيراد وحدة Firebase في حياتك UIApplicationDelegate :

    سويفت

    import Firebase

    ج موضوعية

    @import Firebase;
  4. تكوين ل FirebaseApp المشتركة المثال، عادة في التطبيق الخاص بك application:didFinishLaunchingWithOptions: الأسلوب:

    سويفت

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

    ج موضوعية

    // Use Firebase library to configure APIs
    [FIRApp configure];

ذكري المظهر

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

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

جافا سكريبت

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

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

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

احذف تثبيت Firebase

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

تختلف معرفات تثبيت Firebase لكل عملية تثبيت لكل تطبيق ؛ التطبيقات المختلفة على نفس الجهاز لها معرّفات تثبيت Firebase مختلفة. تحدد معرفات تثبيت Firebase عمليات تثبيت التطبيق والبيانات المرتبطة بعمليات تثبيت التطبيق هذه.

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

ما لم تقم بتعطيل جميع خدمات إنشاء 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");
}];

جافا

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

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

لحذف ااا مع مكالمة API الخادم، إضافة Firebase الادارية 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);

جافا

// 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);
}];

جافا

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

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

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

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

  • معرّف تثبيت Firebase
  • المشروع المرتبط ( projectNumber )
  • ويرتبط Firebase ID التطبيق ( 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]);
}];

جافا

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

FirebaseInstallations.getInstance().getToken(/* forceRefresh */ true)
    .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);

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

ذكري المظهر

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

جافا سكريبت

يمكن تطبيقات الويب الاشتراك في onIdChange هوك.

عندما يتم إنشاء FID جديد ، يتم تشغيل رد الاتصال المشترك:

await firebase.installations().onIdChange((newId) => {
  console.log(newId);
  // TODO: Handle new installation ID.
});

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

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

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

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

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

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

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

جافا

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

جافا

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;

جافا

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 طرقًا لاسترداد رمز التسجيل.

قبل

جافا

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

بعد، بعدما

جافا

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