Quản lý các lượt cài đặt Firebase

Dịch vụ cài đặt Firebase (FIS) cung cấp mã cài đặt Firebase (FID) cho mỗi bản sao đã cài đặt của ứng dụng Firebase. Các dịch vụ Firebase sau đây sử dụng mã cài đặt Firebase nội bộ:

Dịch vụ Firebase Chức năng cài đặt Firebase
Giải pháp gửi thông báo qua đám mây của Firebase

Giải pháp gửi thông báo qua đám mây của Firebase sử dụng mã cài đặt Firebase để nhắm mục tiêu đến các thiết bị nhằm gửi tin nhắn.

Firebase Crashlytics

Firebase Crashlytics xoay vòng mã nhận dạng duy nhất (UUID) cài đặt Crashlytics dựa trên các thay đổi đối với mã cài đặt Firebase của phiên bản ứng dụng đó. Trong tương lai, mã cài đặt có thể được dùng để bật các tính năng giúp cải thiện dịch vụ báo cáo sự cố và quản lý sự cố.

Tính năng gửi thông báo trong ứng dụng của Firebase

Tính năng gửi thông báo trong ứng dụng của Firebase sử dụng mã cài đặt Firebase để nhắm mục tiêu các thiết bị nhằm gửi tin nhắn.

Giám sát hiệu suất Firebase

Tính năng Giám sát hiệu suất sử dụng mã cài đặt Firebase để tính toán số lượt cài đặt Firebase duy nhất có truy cập vào tài nguyên mạng, nhằm đảm bảo rằng mẫu truy cập đủ ẩn danh. Tính năng này cũng sử dụng mã cài đặt Firebase với Cấu hình từ xa Firebase để quản lý tỷ lệ báo cáo sự kiện về hiệu suất.

Cấu hình từ xa Firebase

Cấu hình từ xa sử dụng mã cài đặt Firebase để chọn các giá trị cấu hình để trả về thiết bị của người dùng cuối.

Firebase ML

Thông tin đăng nhập có tên là mã thông báo xác thực việc cài đặt được công nghệ học máy Firebase sử dụng để xác thực thiết bị khi tương tác với các thực thể ứng dụng, chẳng hạn như để phân phối mô hình nhà phát triển cho các thực thể ứng dụng.

Bộ nhớ phân khúc người dùng Firebase

Bộ nhớ phân đoạn người dùng Firebase lưu trữ mã cài đặt Firebase cũng như các thuộc tính và phân đoạn có liên quan để cung cấp thông tin nhắm mục tiêu cho các dịch vụ Firebase khác sử dụng chúng.

Thông thường, các dịch vụ của Firebase sử dụng dịch vụ cài đặt Firebase mà không yêu cầu nhà phát triển tương tác trực tiếp với FIS API. Tuy nhiên, trong một số trường hợp nhà phát triển ứng dụng có thể muốn gọi trực tiếp API FIS, chẳng hạn như:

  • Để xoá một bản cài đặt Firebase và dữ liệu liên kết với lượt cài đặt đó.
  • Để truy xuất giá trị nhận dạng (mã cài đặt Firebase) nhằm nhắm mục tiêu các lượt cài đặt ứng dụng cụ thể.
  • Để truy xuất mã thông báo xác thực cài đặt nhằm xác thực chế độ cài đặt Firebase.

Để bắt đầu gọi trực tiếp API FIS, hãy thêm SDK vào ứng dụng của bạn.

Thêm SDK cài đặt Firebase vào ứng dụng của bạn

iOS trở lên

  1. Thêm phần phụ thuộc cho các lượt cài đặt Firebase vào Podfile của bạn:
    pod 'FirebaseInstallations'
  2. Chạy pod install và mở tệp .xcworkspace đã tạo.
  3. Nhập mô-đun FirebaseCore trong UIApplicationDelegate, cũng như bất kỳ mô-đun Firebase nào khác mà đại diện ứng dụng của bạn sử dụng. Ví dụ: Cách sử dụng Cloud Firestore và Xác thực:

    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. Định cấu hình một thực thể dùng chung của FirebaseApp trong phương thức application(_:didFinishLaunchingWithOptions:) của uỷ quyền ứng dụng:

    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. Nếu đang sử dụng SwiftUI, bạn phải tạo một ứng dụng uỷ quyền và đính kèm ứng dụng đó vào cấu trúc App thông qua UIApplicationDelegateAdaptor hoặc NSApplicationDelegateAdaptor. Bạn cũng phải tắt tính năng uỷ quyền ứng dụng. Để biết thêm thông tin, hãy xem hướng dẫn về 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

Thêm phần phụ thuộc cho SDK Android cài đặt Firebase vào tệp Gradle của mô-đun (cấp ứng dụng) (thường là app/build.gradle):

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

JavaScript

Tuỳ thuộc vào cách ứng dụng web của bạn được lưu trữ, cấu hình của bạn có thể được xử lý tự động hoặc bạn có thể cần phải cập nhật đối tượng cấu hình Firebase.

Ví dụ: nếu các phần phụ thuộc được thêm vào http://index.html, hãy thêm phần phụ thuộc đó vào phần tử <head>:

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

Flutter

  1. Từ thư mục gốc của dự án Flutter, hãy chạy lệnh sau để cài đặt trình bổ trợ cài đặt Firebase:

    flutter pub add firebase_app_installations
    
  2. Tạo lại dự án:

    flutter run
    
  3. Nhập trình bổ trợ cài đặt Firebase:

    import 'package:firebase_app_installations/firebase_app_installations.dart';
    

Xoá chế độ cài đặt Firebase

Dữ liệu liên kết với quá trình cài đặt Firebase thường không được nhận dạng cá nhân. Tuy nhiên, việc cung cấp cho người dùng lựa chọn quản lý và xoá dữ liệu này có thể sẽ hữu ích.

Mã cài đặt Firebase là khác nhau cho mọi lượt cài đặt của mọi ứng dụng; các ứng dụng khác nhau trên cùng một thiết bị có mã cài đặt Firebase khác nhau. Mã cài đặt Firebase xác định các lượt cài đặt ứng dụng và dữ liệu liên quan đến các lượt cài đặt ứng dụng đó.

Khi bạn xoá một mã cài đặt, dữ liệu liên kết với mã cài đặt đó sẽ bị xoá khỏi các hệ thống đang hoạt động và sao lưu của tất cả các dịch vụ Firebase sử dụng mã cài đặt Firebase để xác định các lượt cài đặt trong vòng 180 ngày. Quy trình này được mô tả ở cấp độ tổng quan trong tuyên bố của Google về việc xoá và giữ lại dữ liệu.

Trừ phi bạn tắt tất cả các dịch vụ tạo FID trong ứng dụng của mình, FIS sẽ tạo một mã nhận dạng mới trong vòng vài ngày. Firebase coi mã nhận dạng mới tạo là một bản cài đặt Firebase mới và không liên kết mã đó với mã nhận dạng hoặc dữ liệu trước đó theo bất kỳ cách nào.

Xoá FID bằng lệnh gọi API ứng dụng

Để xoá FID do các dịch vụ Firebase tạo ra, hãy gọi phương thức thích hợp từ SDK cài đặt Firebase:

Swift

do {
  try await Installations.installations().delete()
  print("Installation deleted");
} catch {
  print("Error deleting installation: \(error)")
}

Objective-C

[[FIRInstallations installations] deleteWithCompletion:^(NSError *error) {
   if (error != nil) {
     NSLog(@"Error deleting Installation %@", error);
     return;
   }
   NSLog(@"Installation deleted");
}];

Java

FirebaseInstallations.getInstance().delete()
        .addOnCompleteListener(new OnCompleteListener<Void>() {
    @Override
    public void onComplete(@NonNull Task<Void> task) {
        if (task.isSuccessful()) {
            Log.d("Installations", "Installation deleted");
        } else {
            Log.e("Installations", "Unable to delete Installation");
        }
    }
});

Kotlin+KTX

FirebaseInstallations.getInstance().delete().addOnCompleteListener { task ->
    if (task.isComplete) {
        Log.d("Installations", "Installation deleted")
    } else {
        Log.e("Installations", "Unable to delete Installation")
    }
}

JavaScript

await firebase.installations().delete();

Dart

await FirebaseInstallations.instance.delete();

Xoá FID bằng lệnh gọi API máy chủ

Để xoá FID bằng lệnh gọi API máy chủ, hãy thêm SDK quản trị Firebase vào máy chủ của bạn (nếu bạn chưa thêm).

Sau khi thêm SDK, hãy xoá FID thông qua lệnh gọi đến hàm xoá bằng ngôn ngữ bạn chọn (lưu ý: Ngoại trừ Node.js, các phương thức này đều phản ánh cách đặt tên cho mã nhận dạng phiên bản. Tuy nhiên, tất cả đều thực sự xoá FID khi được gọi bằng bất kỳ SDK Firebase hiện tại nào).

Node.js

// An FIDsent from a client service SDK
const idToDelete = 'eyJhbGciOiJFUzI1N_iIs5';

admin.installations().deleteInstallation(idToDelete);

Java

// An FID sent from a client service SDK
String idToDelete = "eyJhbGciOiJFUzI1N_iIs5";

FirebaseInstanceId.getInstance().deleteInstanceIdAsync(idToDelete).get();

Python

  from firebase_admin import instance_id

  # An FID sent from a client service SDK
  id_to_delete = 'eyJhbGciOiJFUzI1N_iIs5'

  instance_id.delete_instance_id(id_to_delete)

Tiến hành

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

Khi bạn xoá mã cài đặt Firebase bằng lệnh gọi API máy chủ, các dịch vụ của Firebase sẽ bắt đầu quá trình xoá dữ liệu liên kết với mã cài đặt đó, ngừng chấp nhận dữ liệu mới cho mã cài đặt đó trong khoảng thời gian 1-2 ngày, sau đó thông báo cho ứng dụng khách rằng mã nhận dạng đã bị xoá. Cho đến khi Firebase thông báo cho ứng dụng khách, một số dịch vụ của ứng dụng có thể vẫn nhắm mục tiêu mã nhận dạng này – ví dụ: quá trình cài đặt Firebase có thể tiếp tục nhận được thông báo FCM trong vài giờ.

Nếu bạn muốn xoá mã cài đặt Firebase hiện tại và sử dụng ngay các dịch vụ Firebase với một mã mới không liên quan, hãy sử dụng API ứng dụng khách để xử lý việc xoá.

Truy xuất giá trị nhận dạng ứng dụng khách

Nếu cần xác định các lượt cài đặt cụ thể của ứng dụng, bạn có thể thực hiện bằng cách truy xuất mã cài đặt Firebase. Ví dụ: để tạo các phân đoạn lượt cài đặt ứng dụng để nhập BiqQuery hoặc để kiểm thử trong quá trình phát triển tính năng Gửi thông báo trong ứng dụng của Firebase, bạn có thể xác định và nhắm đến đúng thiết bị bằng cách sử dụng mã cài đặt Firebase tương ứng.

Cách truy xuất mã cài đặt Firebase:

Swift

do {
  let id = try await Installations.installations().installationID()
  print("Installation ID: \(id)")
} catch {
  print("Error fetching id: \(error)")
}

Objective-C

[[FIRInstallations installations] installationIDWithCompletion:^(NSString *identifier, NSError *error) {
  if (error != nil) {
    NSLog(@"Error fetching Installation ID %@", error);
    return;
  }
  NSLog(@"Installation ID: %@", identifier);
}];

Java

FirebaseInstallations.getInstance().getId()
        .addOnCompleteListener(new OnCompleteListener<String>() {
    @Override
    public void onComplete(@NonNull Task<String> task) {
        if (task.isSuccessful()) {
            Log.d("Installations", "Installation ID: " + task.getResult());
        } else {
            Log.e("Installations", "Unable to get Installation ID");
        }
    }
});

Kotlin+KTX

FirebaseInstallations.getInstance().id.addOnCompleteListener { task ->
    if (task.isSuccessful) {
        Log.d("Installations", "Installation ID: " + task.result)
    } else {
        Log.e("Installations", "Unable to get Installation ID")
    }
}

JavaScript

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

Dart

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

Truy xuất mã thông báo xác thực việc cài đặt

Các dịch vụ Firebase có thể xác thực việc cài đặt Firebase bằng mã thông báo xác thực truy xuất từ FIS. Ví dụ: khi thiết kế thử nghiệm A/B cho Cấu hình từ xa, bạn có thể xác thực một thiết bị thử nghiệm được nhắm mục tiêu bằng cách sử dụng mã thông báo xác thực cài đặt.

Mã thông báo xác thực việc cài đặt là một mã thông báo truy cập ngắn hạn ở định dạng mã thông báo web JSON (JWT) chứa những thông tin sau đây cho quá trình cài đặt:

  • Mã cài đặt Firebase
  • Dự án đã liên kết (projectNumber)
  • Mã ứng dụng Firebase đã liên kết (appId)
  • Ngày hết hạn của mã thông báo

Không thể thu hồi mã thông báo xác thực cài đặt và mã này vẫn có hiệu lực cho đến ngày hết hạn. Thời gian tồn tại của mã thông báo mặc định là một tuần.

Cách truy xuất mã thông báo xác thực chế độ cài đặt:

Swift

do {
  let result = try await Installations.installations()
    .authTokenForcingRefresh(true)
  print("Installation auth token: \(result.authToken)")
} catch {
  print("Error fetching token: \(error)")
}

Objective-C

[[FIRInstallations installations] authTokenForcingRefresh:true
                                               completion:^(FIRInstallationsAuthTokenResult *result, NSError *error) {
  if (error != nil) {
    NSLog(@"Error fetching Installation token %@", error);
    return;
  }
  NSLog(@"Installation auth token: %@", [result authToken]);
}];

Java

FirebaseInstallations.getInstance().getToken(/* forceRefresh */true)
        .addOnCompleteListener(new OnCompleteListener<InstallationTokenResult>() {
    @Override
    public void onComplete(@NonNull Task<InstallationTokenResult> task) {
        if (task.isSuccessful() && task.getResult() != null) {
            Log.d("Installations", "Installation auth token: " + task.getResult().getToken());
        } else {
            Log.e("Installations", "Unable to get Installation auth token");
        }
    }
});

Kotlin+KTX

val forceRefresh = true
FirebaseInstallations.getInstance().getToken(forceRefresh)
    .addOnCompleteListener { task ->
        if (task.isSuccessful) {
            Log.d("Installations", "Installation auth token: " + task.result?.token)
        } else {
            Log.e("Installations", "Unable to get Installation auth token")
        }
    }

JavaScript

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

Dart

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

Theo dõi vòng đời mã cài đặt Firebase

Trong quá trình ứng dụng hoạt động bình thường, mã cài đặt Firebase (FID) không yêu cầu giám sát đặc biệt. Tuy nhiên, các ứng dụng truy xuất và sử dụng FID một cách rõ ràng nên thêm logic để theo dõi khả năng xoá hoặc xoay FID. Dưới đây là một số trường hợp mà FID có thể bị xoá hoặc xoay:

  • Gỡ cài đặt hoặc cài đặt lại ứng dụng, chẳng hạn như khi người dùng cuối cài đặt trên một thiết bị mới.
  • Người dùng cuối xoá bộ nhớ đệm của ứng dụng hoặc thiết bị.
  • Tính năng xoá FID được kích hoạt trong phần phụ trợ do ứng dụng không hoạt động (hiện ngưỡng cho trường hợp này là 270 ngày không hoạt động).

Khi ứng dụng bị xoá hoặc xoay FID trong những trường hợp này, ứng dụng sẽ được chỉ định FID mới. Ngoài ra, mã thông báo xác thực cài đặt được liên kết với FID đã bị xoá sẽ bị xoá (bất kể độ ổn định của mã) và được thay thế bằng mã thông báo xác thực cài đặt mới.

Các ứng dụng có thể theo dõi những thay đổi này và phản hồi một cách phù hợp.

Cách giám sát chế độ xoay 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];
}];

Một NSNotification có tên NSNotificationName.InstallationIDDidChange sẽ được đăng lên NSNotificationCenter mặc định bất cứ khi nào FID mới được gán.

Android

Các ứng dụng Kotlin và Java nên thêm logic thử lại để phản hồi các lệnh gọi không thành công nhằm truy xuất FID mới.

JavaScript

Các ứng dụng web có thể đăng ký hook onIdChange.

Bất cứ khi nào một FID mới được tạo, lệnh gọi lại đã đăng ký sẽ được kích hoạt:

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

Dart

FirebaseInstallations.instance.onIdChange.listen((token) {
  print('FID token: $token');
});

Di chuyển từ mã phiên bản sang lượt cài đặt Firebase

Trước khi triển khai lượt cài đặt Firebase, Firebase dựa vào SDK mã phiên bản để nhận dạng lượt cài đặt ứng dụng. Bản cài đặt Firebase mang lại nhiều lợi thế đáng kể so với mã thực thể về độ tin cậy, hiệu suất và tính bảo mật. Các ứng dụng Firebase phụ thuộc vào SDK mã phiên bản nên di chuyển sang bản cài đặt Firebase.

Quá trình di chuyển khác nhau tuỳ theo ứng dụng của bạn:

  • Các ứng dụng không gọi trực tiếp API mã phiên bản có thể di chuyển bằng cách cập nhật phiên bản SDK. Hầu hết các ứng dụng Firebase đều thuộc danh mục này.

  • Những ứng dụng thực hiện lệnh gọi API đến mã phiên bản thể hiện rõ ràng phải cập nhật các phiên bản SDK thay đổi mã để thay thế phương thức Mã phiên bản bằng các lượt cài đặt Firebase hoặc FCM tương đương. Nếu ứng dụng của bạn sử dụng mã phiên bản để truy xuất mã thông báo đăng ký FCM hoặc sử dụng rõ ràng mã phiên bản để nhắm mục tiêu đến các phiên bản ứng dụng hoặc cho bất kỳ mục đích nào khác, thì bạn cần cập nhật mã xử lý ứng dụng của mình.

Hiện tại, FIS có khả năng tương thích ngược với mã nhận dạng phiên bản cũ của Firebase. Xoá IID là một phương thức thay thế để yêu cầu xoá dữ liệu bằng các SDK Firebase sau:

  • iOS 6.14.0 trở xuống
  • Các SDK Android trước ngày 27 tháng 2 năm 2020

Điều này có nghĩa là bạn không bắt buộc phải di chuyển các ứng dụng sang lượt cài đặt Firebase. Tuy nhiên, bạn nên làm như vậy.

Nâng cấp lên các phiên bản SDK tối thiểu để cài đặt Firebase

Để di chuyển từ mã phiên bản sang lượt cài đặt Firebase, hãy đảm bảo rằng ứng dụng của bạn sử dụng số phiên bản tối thiểu được liệt kê của các SDK Firebase sau đây:

SDK Firebase Phiên bản Android tối thiểu Phiên bản iOS tối thiểu
Giải pháp gửi thông báo qua đám mây của Firebase Phiên bản 20.3.0 Phiên bản 6.34.0
Cấu hình từ xa Các phiên bản 19.2.0 Phiên bản 6.24.0
Google Analytics cho Firebase \ (SDK đo lường) Phiên bản 17.4.4 Phiên bản 6.18.0
Gửi thông báo trong ứng dụng Các phiên bản 19.0.7 Phiên bản 6.24.0
Giám sát hiệu suất Phiên bản 19.0.8 Phiên bản 6.21.0
Crashlytics Phiên bản 17.2.1 Phiên bản 6.23.0
Bộ công cụ máy học Phiên bản 22.1.2 Phiên bản 6.28.0

Cập nhật mã gọi rõ ràng Instance ID API

Nếu ứng dụng Android hoặc Apple của bạn trực tiếp sử dụng các phương thức SDK mã phiên bản, thì bạn có thể thay thế cách sử dụng đó bằng các phương án thay thế tương tự trong SDK cài đặt Firebase hoặc SDK FCM.

Truy xuất giá trị nhận dạng

Các phương thức để lấy mã thực thể sẽ được thay thế bằng các phương thức để lấy mã lượt cài đặt. Ví dụ:

Trước

Swift

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

Objective-C

[[FIRMessaging messaging] tokenWithCompletion:^(NSString * _Nullable token, NSError * _Nullable error) {
   if (error != nil) {
     NSLog(@"Error fetching the remote FCM registration token: %@", error);
   } else {
     NSLog(@"Remote FCM registration token: %@", token);
     NSString* message =
       [NSString stringWithFormat:@"FCM registration token: %@", token];
     self.remoteFCMTokenMessage.text = message;
   }
 }];

Java

FirebaseInstanceId.getInstance().getInstanceId()
        .addOnCompleteListener(new OnCompleteListener<InstanceIdResult>() {
            @Override
            public void onComplete(@NonNull Task<InstanceIdResult> task) {
                Log.d("IID_TOKEN", task.getResult().getToken());
            }
        });

Kotlin+KTX

FirebaseInstanceId.getInstance().instanceId
        .addOnSuccessListener { result ->
            Log.d("IID_TOKEN", result.token)
        }

Sau

Swift

do {
  let id = try await Installations.installations().installationID()
  print("Installation ID: \(id)")
} catch {
  print("Error fetching id: \(error)")
}

Objective-C

[[FIRInstallations installations] installationIDWithCompletion:^(NSString *identifier, NSError *error) {
  if (error != nil) {
    NSLog(@"Error fetching Installation ID %@", error);
    return;
  }
  NSLog(@"Installation ID: %@", identifier);
}];

Java

FirebaseInstallations.getInstance().getId()
        .addOnCompleteListener(new OnCompleteListener<String>() {
    @Override
    public void onComplete(@NonNull Task<String> task) {
        if (task.isSuccessful()) {
            Log.d("Installations", "Installation ID: " + task.getResult());
        } else {
            Log.e("Installations", "Unable to get Installation ID");
        }
    }
});

Kotlin+KTX

FirebaseInstallations.getInstance().id.addOnCompleteListener { task ->
    if (task.isSuccessful) {
        Log.d("Installations", "Installation ID: " + task.result)
    } else {
        Log.e("Installations", "Unable to get Installation ID")
    }
}

Xoá giá trị nhận dạng

Các phương thức xoá mã nhận dạng phiên bản sẽ được thay thế bằng các phương thức để xoá mã cài đặt Firebase. Ví dụ:

Trước

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

Sau

Swift

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

Objective-C

- (void)deleteWithCompletion:(nonnull void (^)(NSError *_Nullable))completion;

Java

FirebaseInstallations.getInstance().delete()
        .addOnCompleteListener(new OnCompleteListener<Void>() {
    @Override
    public void onComplete(@NonNull Task<Void> task) {
        if (task.isSuccessful()) {
            Log.d("Installations", "Installation deleted");
        } else {
            Log.e("Installations", "Unable to delete Installation");
        }
    }
});

Kotlin+KTX

FirebaseInstallations.getInstance().delete().addOnCompleteListener { task ->
    if (task.isComplete) {
        Log.d("Installations", "Installation deleted")
    } else {
        Log.e("Installations", "Unable to delete Installation")
    }
}

Truy xuất mã thông báo đăng ký FCM

Trước khi cài đặt Firebase, ứng dụng FCM đã truy xuất mã thông báo đăng ký từ Mã phiên bản. SDK FCM hiện cung cấp các phương thức để truy xuất mã thông báo đăng ký.

Trước

Java

FirebaseInstanceId.getInstance().getInstanceId()
        .addOnCompleteListener(new OnCompleteListener<InstanceIdResult>() {
            @Override
            public void onComplete(@NonNull Task<InstanceIdResult> task) {
                if (!task.isSuccessful()) {
                    Log.w(TAG, "getInstanceId failed", task.getException());
                    return;
                }

                // Get new Instance ID token
                String token = task.getResult().getToken();

                // Log and toast
                String msg = getString(R.string.msg_token_fmt, token);
                Log.d(TAG, msg);
                Toast.makeText(MainActivity.this, msg, Toast.LENGTH_SHORT).show();
            }
        });

Kotlin+KTX

FirebaseInstanceId.getInstance().instanceId
        .addOnCompleteListener(OnCompleteListener { task ->
            if (!task.isSuccessful) {
                Log.w(TAG, "getInstanceId failed", task.exception)
                return@OnCompleteListener
            }

            // Get new Instance ID token
            val token = task.result?.token

            // Log and toast
            val msg = getString(R.string.msg_token_fmt, token)
            Log.d(TAG, msg)
            Toast.makeText(baseContext, msg, Toast.LENGTH_SHORT).show()
        })

Swift

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

Objective-C

[[FIRMessaging messaging] tokenWithCompletion:^(NSString * _Nullable token, NSError * _Nullable error) {
   if (error != nil) {
     NSLog(@"Error fetching the remote FCM registration token: %@", error);
   } else {
     NSLog(@"Remote FCM registration token: %@", token);
     NSString* message =
       [NSString stringWithFormat:@"FCM registration token: %@", token];
     self.remoteFCMTokenMessage.text = message;
   }
 }];

Sau

Java

FirebaseMessaging.getInstance().getToken()
    .addOnCompleteListener(new OnCompleteListener<String>() {
        @Override
        public void onComplete(@NonNull Task<String> task) {
          if (!task.isSuccessful()) {
            Log.w(TAG, "Fetching FCM registration token failed", task.getException());
            return;
          }

          // Get new FCM registration token
          String token = task.getResult();

          // Log and toast
          String msg = getString(R.string.msg_token_fmt, token);
          Log.d(TAG, msg);
          Toast.makeText(MainActivity.this, msg, Toast.LENGTH_SHORT).show();
        }
    });

Kotlin+KTX

FirebaseMessaging.getInstance().token.addOnCompleteListener(OnCompleteListener { task ->
    if (!task.isSuccessful) {
        Log.w(TAG, "Fetching FCM registration token failed", task.exception)
        return@OnCompleteListener
    }

    // Get new FCM registration token
    val token = task.result

    // Log and toast
    val msg = getString(R.string.msg_token_fmt, token)
    Log.d(TAG, msg)
    Toast.makeText(baseContext, msg, Toast.LENGTH_SHORT).show()
})

Swift

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

Objective-C

[[FIRMessaging messaging] tokenWithCompletion:^(NSString *token, NSError *error) {
  if (error != nil) {
    NSLog(@"Error getting FCM registration token: %@", error);
  } else {
    NSLog(@"FCM registration token: %@", token);
    self.fcmRegTokenMessage.text = token;
  }
}];