مدیریت تاسیسات Firebase

با مجموعه‌ها، منظم بمانید ذخیره و دسته‌بندی محتوا براساس اولویت‌های شما.

سرویس نصب Firebase (FIS) برای هر نمونه نصب شده یک برنامه Firebase یک شناسه نصب Firebase (FID) ارائه می‌کند. شناسه نصب Firebase به صورت داخلی توسط این سرویس های Firebase استفاده می شود:

سرویس Firebase قابلیت نصب Firebase
Firebase Cloud Messaging

Firebase Cloud Messaging از شناسه های نصب Firebase برای هدف قرار دادن دستگاه ها برای تحویل پیام استفاده می کند.

Firebase In-App Messaging

Firebase In-App Messaging از شناسه های نصب Firebase برای هدف قرار دادن دستگاه ها برای تحویل پیام استفاده می کند.

نظارت بر عملکرد Firebase

نظارت بر عملکرد از شناسه‌های نصب Firebase برای محاسبه تعداد نصب‌های Firebase منحصربه‌فرد که به منابع شبکه دسترسی دارند، استفاده می‌کند تا اطمینان حاصل شود که الگوهای دسترسی به اندازه کافی ناشناس هستند. همچنین از شناسه های نصب Firebase با Firebase Remote Config برای مدیریت نرخ گزارش رویداد عملکرد استفاده می کند.

Firebase Remote Config

Remote Config از شناسه های نصب Firebase برای انتخاب مقادیر پیکربندی برای بازگشت به دستگاه های کاربر نهایی استفاده می کند.

Firebase ML

اعتبارنامه هایی به نام نشانه های تأیید اعتبار نصب توسط Firebase ML برای احراز هویت دستگاه هنگام تعامل با نمونه های برنامه استفاده می شود، به عنوان مثال، برای توزیع مدل های توسعه دهنده در نمونه های برنامه.

ذخیره سازی بخش بندی کاربر Firebase

Firebase User Segmentation Storage شناسه‌های نصب 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 FirebaseCore
    import FirebaseFirestore
    import FirebaseAuth
    // ...
          

    هدف-C

    @import FirebaseCore;
    @import FirebaseFirestore;
    @import FirebaseAuth;
    // ...
          
  4. یک نمونه اشتراک‌گذاری شده FirebaseApp را در روش برنامه نماینده application(_:didFinishLaunchingWithOptions:) :

    سریع

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

    هدف-C

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

اندروید

وابستگی نصب‌های Firebase Android SDK را به فایل Gradle ماژول (سطح برنامه) خود اضافه کنید (معمولا app/build.gradle ):

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

جاوا اسکریپت

بسته به نحوه میزبانی برنامه وب شما، ممکن است پیکربندی شما به صورت خودکار مدیریت شود یا ممکن است نیاز به به روز رسانی شی پیکربندی Firebase خود داشته باشید.

به عنوان مثال، اگر وابستگی های شما در index.html اضافه شده است، وابستگی را در عنصر <head> اضافه کنید:

<script src="/__/firebase/9.14.0/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 برای شناسایی نصب‌ها در عرض ۱۸۰ روز استفاده می‌کنند، حذف می‌شود. این فرآیند در بیانیه 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");
}

هدف-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")
    }
}

جاوا اسکریپت

await firebase.installations().delete();

Dart

await FirebaseInstallations.instance.delete();

یک FID را با تماس API سرور حذف کنید

برای حذف یک FID با تماس API سرور، Firebase Admin SDK را به سرور خود اضافه کنید ، اگر قبلاً این کار را نکرده‌اید.

هنگامی که SDK اضافه شد، FID ها را از طریق فراخوانی تابع حذف در زبان انتخابی خود حذف کنید (توجه: به جز Node.js، این روش ها منعکس کننده نام گذاری Instance ID هستند. با این حال، همه آنها در واقع 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 با یک شناسه جدید و نامرتبط استفاده کنید، از API مشتری برای مدیریت حذف استفاده کنید.

بازیابی شناسه های مشتری

اگر نیاز به شناسایی نصب‌های خاصی از برنامه خود دارید، می‌توانید با بازیابی شناسه نصب Firebase این کار را انجام دهید. به عنوان مثال، برای انجام آزمایش در طول توسعه پیام‌رسانی درون‌برنامه Firebase، می‌توانید دستگاه آزمایشی صحیح را با استفاده از شناسه نصب 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)")
}

هدف-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")
    }
}

جاوا اسکریپت

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 )
  • تاریخ انقضای توکن

نشانه تأیید اعتبار نصب قابل ابطال نیست و تا تاریخ انقضا معتبر باقی می ماند. طول عمر توکن پیش فرض یک هفته است.

برای بازیابی رمز تأیید نصب:

سریع

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

هدف-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

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

Dart

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

چرخه عمر ID نصب Firebase را نظارت کنید

در طول عملکرد عادی یک برنامه، شناسه های نصب Firebase (FID) به نظارت خاصی نیاز ندارند. با این حال، برنامه هایی که به صراحت FID ها را بازیابی و استفاده می کنند باید منطقی برای نظارت بر حذف یا چرخش احتمالی FID اضافه کنند. در اینجا مواردی وجود دارد که FID ها می توانند حذف یا چرخانده شوند:

  • حذف نصب یا نصب مجدد برنامه، به عنوان مثال زمانی که کاربر نهایی روی دستگاه جدیدی نصب می کند.
  • کاربر نهایی حافظه پنهان برنامه یا دستگاه را پاک می کند.
  • حذف FID در پشتیبان به دلیل عدم فعالیت برنامه فعال می شود (در حال حاضر آستانه برای این کار 270 روز عدم فعالیت است).

وقتی برنامه‌ها در این نوع موارد چرخش یا حذف FID را تجربه می‌کنند، یک FID جدید به آن‌ها اختصاص داده می‌شود. همچنین، نشانه تأیید اعتبار نصب مرتبط با یک FID حذف شده، بدون توجه به بلوغ خود، حذف می شود و با یک نشانه تأیید اعتبار نصب جدید جایگزین می شود.

برنامه‌ها می‌توانند این تغییرات را نظارت کنند و بر اساس آن پاسخ دهند.

برای نظارت بر چرخش FID:

سریع

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

هدف-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 جدید اختصاص داده شود.

اندروید

کلاینت های 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');
});

از Instance ID به تاسیسات Firebase مهاجرت کنید

قبل از معرفی نصب‌های Firebase، Firebase برای شناسه‌های نصب برنامه بر روی Instance ID SDK تکیه می‌کرد. نصب Firebase مزایای قابل توجهی نسبت به Instance ID در قابلیت اطمینان، عملکرد و امنیت دارد. برنامه‌های Firebase که به Instance ID SDK وابسته هستند باید به تأسیسات Firebase منتقل شوند.

فرآیند مهاجرت بر اساس برنامه شما متفاوت است:

  • برنامه‌هایی که مستقیماً با Instance ID API تماس نمی‌گیرند، می‌توانند با به‌روزرسانی نسخه‌های SDK خود مهاجرت کنند. اکثر برنامه های Firebase در این دسته قرار می گیرند.

  • برنامه‌هایی که صراحتاً با Instance ID تماس‌های API برقرار می‌کنند باید نسخه‌های SDK را به‌روزرسانی کنند و کد را تغییر دهند تا روش‌های Instance ID را با نصب‌های Firebase یا معادل‌های FCM خود جایگزین کنند. اگر برنامه شما از Instance ID برای بازیابی نشانه‌های ثبت FCM استفاده می‌کند یا صراحتاً از Instance ID برای هدف‌یابی نمونه‌های برنامه یا هر هدف دیگری استفاده می‌کند، باید کد برنامه خود را به‌روزرسانی کنید.

در حال حاضر، FIS با شناسه قدیمی Firebase Instance ID سازگار است. حذف یک IID یک روش جایگزین برای درخواست حذف داده با این SDK های Firebase است:

  • iOS 6.14.0 و پایین تر
  • Android SDK زودتر از 27 فوریه 2020

این بدان معناست که برنامه‌ها نیازی به مهاجرت به نصب‌های Firebase ندارند. با این حال، انجام این کار به شدت توصیه می شود.

ارتقاء به حداقل نسخه های SDK برای نصب های Firebase

برای انتقال از Instance ID به نصب‌های Firebase، مطمئن شوید که برنامه‌های شما حداقل از حداقل شماره‌های نسخه فهرست‌شده SDK‌های Firebase زیر استفاده می‌کنند:

Firebase SDK حداقل نسخه اندروید حداقل نسخه iOS
Firebase Cloud Messaging نسخه 20.3.0 نسخه 6.34.0
پیکربندی از راه دور نسخه 19.2.0 نسخه 6.24.0
Google Analytics برای 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
کیت ام ال نسخه 22.1.2 نسخه 6.28.0

به‌روزرسانی کدی که به صراحت از APIهای Instance ID فراخوانی می‌کند

اگر برنامه Android یا Apple شما مستقیماً از روش‌های Instance ID 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)"
  }
}

هدف-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)
        }

بعد از

سریع

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

هدف-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 جایگزین می‌شوند. مثلا:

قبل از

سریع

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

هدف-C

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

اندروید

FirebaseInstanceId.deleteInstanceId();

بعد از

سریع

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

هدف-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 Installations، مشتریان FCM توکن های ثبت نام را از Instance ID بازیابی می کردند. اکنون، 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)"
  }
}

هدف-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()
})

سریع

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

هدف-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;
  }
}];