مدیریت نصب‌ها و شناسه‌های Firebase

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

سرویس Firebase عملکرد نصب‌های Firebase
Firebase Cloud Messaging

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

Firebase Crashlytics

Firebase Crashlytics شناسه منحصربه‌فرد جهانی نصب Crashlytics را براساس تغییرات شناسه نصب 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 برای انتخاب مقادیر پیکربندی برای بازگرداندن به دستگاه‌های کاربر نهایی استفاده می‌کند. ویژگی شخصی‌سازی Remote Config از شناسه‌های نصب Firebase برای مرتبط کردن داده‌های رویداد برنامه با نصب‌های Firebase استفاده می‌کند تا مقادیر پیکربندی بهینه را برای دستگاه‌های کاربر نهایی پیش‌بینی کند و برگرداند.

Firebase ML

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

Firebase User Segmentation Storage

«فضای ذخیره‌سازی بخش‌بندی کاربر Firebase» شناسه‌های نصب Firebase و مشخصه‌ها و بخش‌های مرتبط را ذخیره می‌کند تا اطلاعات هدف‌یابی را به دیگر سرویس‌های Firebase که از آن‌ها استفاده می‌کنند ارائه دهد.

معمولاً سرویس‌های Firebase از سرویس نصب‌های Firebase استفاده می‌کنند بدون اینکه توسعه‌دهندگان را ملزم به تعامل مستقیم با FIS API کنند. بااین‌حال، مواردی وجود دارد که توسعه‌دهندگان برنامه ممکن است بخواهند مستقیماً FIS API را فراخوانی کنند، مانند:

  • برای حذف نصب Firebase و داده‌های مرتبط با نصب.
  • برای بازیابی شناسه‌ها (شناسه‌های نصب Firebase) به‌منظور هدف‌یابی نصب‌های خاص برنامه.
  • برای بازیابی کردن کدهای اصالت‌سنجی نصب برای اصالت‌سنجی کردن نصب‌های Firebase.

برای شروع به کار با فراخوانی مستقیم FIS API، کیت توسعه نرم‌افزار را به برنامه‌تان اضافه کنید.

کیت توسعه نرم‌افزار نصب‌های Firebase را به برنامه‌تان اضافه کنید

iOS+‎

  1. وابستگی نصب‌های Firebase را به Podfile خود اضافه کنید:
    pod 'FirebaseInstallations'
  2. pod install را اجرا کنید و فایل .xcworkspace ایجادشده را باز کنید.
  3. واحد FirebaseCore را در UIApplicationDelegate و همچنین هر واحد Firebase دیگری که نماینده برنامه‌تان استفاده می‌کند وارد کنید. برای مثال، برای استفاده از Cloud Firestore و Authentication:

    SwiftUI

    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:) روش نماینده برنامه‌تان پیکربندی کنید:

    SwiftUI

    // 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 استفاده می‌کنید، باید یک نماینده برنامه ایجاد کنید و آن را ازطریق UIApplicationDelegateAdaptor یا NSApplicationDelegateAdaptor به ساختار App خود متصل کنید. همچنین باید «سویزلینگ نماینده برنامه» را غیرفعال کنید. برای اطلاعات بیشتر، دستورالعمل‌های SwiftUI را ببینید.

    SwiftUI

    @main
    struct YourApp: App {
      // register app delegate for Firebase setup
      @UIApplicationDelegateAdaptor(AppDelegate.self) var delegate
    
      var body: some Scene {
        WindowGroup {
          NavigationView {
            ContentView()
          }
        }
      }
    }
          

Android

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

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

جاوا اسکریپت

بسته به اینکه برنامه وب شما چگونه میزبانی می‌شود، پیکربندی شما ممکن است به‌طور خودکار انجام شود یا ممکن است لازم باشد شیء پیکربندی Firebase خود را به‌روز کنید.

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

<script src="/__/firebase/13.0.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 با فراخوانی میانای برنامه‌سازی کاربردی کارخواه

برای حذف کردن شناسه‌های نصب Firebase که توسط سرویس‌های Firebase تولید شده‌اند، روش مناسب را از کیت توسعه نرم‌افزار نصب‌های 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

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 با تماس میانای برنامه‌سازی کاربردی سرور

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

پس‌از افزودن کیت توسعه نرم‌افزار، شناسه‌های نصب Firebase را ازطریق فراخوانی تابع حذف به زبان انتخابی‌تان حذف کنید (توجه: به‌جز Node.js، این روش‌ها نام‌گذاری شناسه نمونه را منعکس می‌کنند. اما درواقع همه آن‌ها هنگام فراخوانی با هر کیت توسعه نرم‌افزار Firebase فعلی، FID را حذف می‌کنند).

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 را با فراخوانی میانای برنامه‌سازی کاربردی سرور حذف می‌کنید، سرویس‌های 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

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

کد اصالت‌سنجی نصب را نمی‌توان لغو کرد و تا تاریخ انقضای آن معتبر باقی می‌ماند. طول عمر پیش‌فرض داده‌واحد یک هفته است.

برای بازیابی کد اصالت‌سنجی نصب:

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

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) به نظارت خاصی نیاز ندارند. بااین‌حال، برنامه‌هایی که به‌طور صریح «شناسه نصب Firebase» را بازیابی و استفاده می‌کنند باید منطقی را برای نظارت بر حذف یا چرخش احتمالی «شناسه نصب Firebase» اضافه کنند. در اینجا چند مورد که در آن‌ها شناسه نصب Firebase ممکن است حذف یا چرخانده شود آورده شده است:

  • حذف نصب یا بازنصب برنامه، برای مثال وقتی کاربر نهایی برنامه را در دستگاه جدیدی نصب می‌کند.
  • کاربر نهایی حافظه پنهان برنامه یا دستگاه را پاک کند.
  • حذف 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];
}];

هرزمان FID جدیدی اختصاص داده شود، NSNotification با نام NSNotificationName.InstallationIDDidChange به NSNotificationCenter پیش‌فرض پست می‌شود.

Android

کلاینت‌های Kotlin و Java باید منطق تکرار مجدد را برای پاسخ دادن به تماس‌های ناموفق اضافه کنند تا FID جدید را بازیابی کنند.

جاوا اسکریپت

برنامه‌های وب می‌توانند در قلاب onIdChange مشترک شوند.

هرگاه شناسه نصب Firebase جدیدی ایجاد شود، فراخوانی برگشتی مشترک‌شده راه‌اندازی می‌شود:

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 که به Instance ID SDK وابسته هستند باید به نصب‌های Firebase منتقل شوند.

فرایند انتقال براساس برنامه شما متفاوت است:

  • برنامه‌هایی که مستقیماً میاناهای برنامه‌سازی کاربردی Instance ID را فراخوانی نمی‌کنند می‌توانند با به‌روزرسانی نسخه‌های کیت توسعه نرم‌افزار خود انتقال یابند. اکثر برنامه‌های Firebase در این دسته قرار می‌گیرند.

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

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

  • ‫iOS نسخه ۶.۱۴.۰ و پایین‌تر
  • کیت‌های توسعه نرم‌افزار Android قدیمی‌تر از ۲۷ فوریه ۲۰۲۰

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

ارتقا به حداقل نسخه‌های کیت توسعه نرم‌افزار برای نصب‌های Firebase

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

کیت توسعه نرم‌افزار Firebase پایین‌ترین نسخه Android حداقل نسخه iOS
پیام‌رسانی ابریِ Firebase v20.3.0 v6.34.0
پیکربندی ازراه‌دور v19.2.0 v6.24.0
Google Analytics برای Firebase \ (کیت توسعه نرم‌افزار سنجش) v17.4.4 v6.18.0
پیام‌رسانی درون‌برنامه‌ای v19.0.7 v6.24.0
پایشگر کارایی v19.0.8 v6.21.0
Crashlytics v17.2.1 v6.23.0
ML Kit v22.1.2 v6.28.0

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

اگر برنامه Android یا Apple شما مستقیماً از روش‌های Instance ID SDK استفاده می‌کند، می‌توانید آن کاربرد را با جایگزین‌های یکسان در Firebase installations SDK یا FCM SDK جایگزین کنید.

درحال بازیابی شناسه

روش‌های دریافت «شناسه نمونه» با روش‌های دریافت «شناسه نصب» جایگزین شده است. برای مثال:

قبل

Swift

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

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];
    // display message
    NSLog(@"%@", 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

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

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

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 روش‌هایی برای بازیابی کردن کد ثبت ارائه می‌دهد.

قبل

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

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

InstanceID.instanceID().instanceID { result, error in
  if let error = error {
    print("Error fetching instance ID: \(error)")
  } else if let result = result {
    print("Instance ID token: \(result.token)")
  }
}

Objective-C

[[FIRInstanceID instanceID] instanceIDWithHandler:^(FIRInstanceIDResult * _Nullable result,
                                                    NSError * _Nullable error) {
  if (error != nil) {
    NSLog(@"Error fetching instance ID: %@", error);
  } else {
    NSLog(@"Instance ID token: %@", result.token);
  }
}];

بعداز

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

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 remote FCM registration token: \(error)")
  } else if let token = token {
    print("Remote instance ID 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];
    // display message
    NSLog(@"%@", message);
  }
}];