Google cam kết thúc đẩy công bằng chủng tộc cho Cộng đồng người da đen. Xem cách thực hiện.

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

Việc lắp đặt dịch vụ căn cứ hỏa lực (FIS) cung cấp một cài đặt ID căn cứ hỏa lực (FID) cho mỗi trường hợp cài đặt của một ứng dụng căn cứ hỏa lực. Các căn cứ hỏa lực cài đặt ID được sử dụng trong nội bộ bởi những dịch vụ căn cứ hỏa lực:

dịch vụ căn cứ hỏa lực chức năng cài đặt căn cứ hỏa lực
Căn cứ hỏa lực Cloud Messaging

Căn cứ hỏa lực Cloud Messaging sử dụng ID cài đặt căn cứ hỏa lực để nhắm mục tiêu các thiết bị giao thông.

Căn cứ hỏa lực trong ứng dụng Tin nhắn

Căn cứ hỏa lực trong ứng dụng Tin nhắn sử dụng ID cài đặt căn cứ hỏa lực để nhắm mục tiêu các thiết bị giao thông.

Căn cứ hỏa lực Performance Monitoring

Hiệu suất giám sát sử dụng ID cài đặt căn cứ hỏa lực để tính toán số lượng cài đặt căn cứ hỏa lực duy nhất truy cập tài nguyên mạng, để đảm bảo rằng các mô hình truy cập là đủ nặc danh. Nó cũng sử dụng ID cài đặt căn cứ hỏa lực với căn cứ hỏa lực từ xa Config để quản lý tỷ lệ báo cáo sự kiện hiệu suất.

Google Analytics cho căn cứ hỏa lực

Google Analytics cho căn cứ hỏa lực sử dụng dữ liệu để cung cấp phân tích và thông tin ghi công. Các thông tin chính xác thu thập có thể khác nhau tùy theo thiết bị và môi trường.

Căn cứ hỏa lực từ xa Config

Từ xa Config sử dụng ID cài đặt căn cứ hỏa lực để chọn giá trị cấu hình để trở lại với các thiết bị của người dùng cuối.

căn cứ hỏa lực ML

Thông tin được gọi là cài đặt auth thẻ được sử dụng bởi căn cứ hỏa lực ML để xác thực thiết bị khi tương tác với các trường hợp ứng dụng, ví dụ, để phân phối mô hình phát triển để trường hợp ứng dụng.

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

  • Để xóa một cài đặt căn cứ hỏa lực và dữ liệu gắn liền với quá trình cài đặt.
  • Để lấy định danh (ID căn cứ hỏa lực cài đặt) để nhắm mục tiêu cài đặt ứng dụng cụ thể.
  • Để lấy thẻ cài đặt auth để xác thực cài đặt căn cứ hỏa lực.

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

Thêm căn cứ hỏa lực cài đặt SDK để ứng dụng của bạn

iOS +

  1. Thêm phụ thuộc cho việc cài đặt căn cứ hỏa lực để Podfile của bạn:
    pod 'FirebaseInstallations'
    PLACEHOLDER1
  2. Run pod install và mở tạo .xcworkspace tập tin.
  3. Nhập FirebaseCore module của bạn UIApplicationDelegate , cũng như bất kỳ khác căn cứ hỏa lực module sử dụng ứng dụng đại biểu của mình. Ví dụ, để sử dụng đám mây FireStore và Xác thực:

    Nhanh

    import FirebaseCore
    import FirebaseFirestore
    import FirebaseAuth
    // ...
          

    Objective-C

    @import FirebaseCore;
    @import FirebaseFirestore;
    @import FirebaseAuth;
    // ...
          
  4. Cấu hình một FirebaseApp chia sẻ Ví dụ, thông thường trong bạn App initializer hoặc ứng dụng đại biểu của 's application(_:didFinishLaunchingWithOptions:) phương pháp:

    Nhanh

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

    Objective-C

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

Android

Thêm phụ thuộc cho các cài đặt căn cứ hỏa lực Android SDK để mô-đun của bạn (ứng dụng cấp) tập tin Gradle (thường là app/build.gradle ):

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

Javascript

Tùy 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 của bạn đối tượng cấu hình căn cứ hỏa lực .

Ví dụ, nếu phụ thuộc của bạn được thêm vào index.html, thêm phụ thuộc vào phần <head> yếu tố:

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

Chớp cánh

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

    flutter pub add firebase_app_installations
    
  2. Rebuild dự án của bạn:

    flutter run
    
  3. Nhập cài đặt căn cứ hỏa lực plugin:

    import 'package:firebase_app_installations/firebase_app_installations.dart';
    

Xóa cài đặt căn cứ hỏa lực

Dữ liệu gắn với một cài đặt căn cứ hỏa lực nói chung là không nhận dạng cá nhân. Tuy nhiên, nó có thể hữu ích để cung cấp cho người dùng một tùy chọn để quản lý và xóa dữ liệu này.

ID cài đặt căn cứ hỏa lực là khác nhau cho mỗi cài đặt mọi ứng dụng; các ứng dụng khác nhau trên cùng một thiết bị có ID cài đặt căn cứ hỏa lực khác nhau. ID cài đặt căn cứ hỏa lực xác định cài đặt ứng dụng và dữ liệu gắn liền với những cài đặt ứng dụng.

Khi bạn xóa một ID cài đặt, dữ liệu gắn liền với đó cài đặt ID được lấy ra từ hệ thống sống và sao lưu của tất cả các dịch vụ căn cứ hỏa lực sử dụng ID cài đặt căn cứ hỏa lực để xác định cài đặt trong vòng 180 ngày. Quá trình này được mô tả ở mức cao trong của Google tuyên bố về xóa và duy trì .

Trừ khi bạn vô hiệu hóa tất cả các dịch vụ FID-tạo trong ứng dụng của bạn, FIS tạo ra một ID mới trong vòng vài ngày. Căn cứ hỏa lực coi ID mới tạo ra để trở thành một căn cứ hỏa lực lắp đặt mới, và không liên kết nó với ID trước hoặc dữ liệu trong bất kỳ cách nào.

Xóa một FID với một cuộc gọi API khách hàng

Để FIDs xóa được tạo ra bởi các dịch vụ căn cứ hỏa lực, gọi phương thức thích hợp từ cài đặt căn cứ hỏa lực SDK:

Nhanh

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

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

Xóa một FID với một máy chủ gọi API

Để xóa một FID với một máy chủ cuộc gọi API, thêm căn cứ hỏa lực SDK quản trị máy chủ của bạn , nếu bạn chưa có.

Khi SDK được thêm vào, FIDs xóa thông qua một cuộc gọi đến các chức năng xóa trong ngôn ngữ của bạn lựa chọn (lưu ý: Trừ Node.js, các phương pháp này phản ánh Instance ID đặt tên Tuy nhiên, tất cả họ đều thực sự xóa FID khi được gọi với bất kỳ căn cứ hỏa lực hiện tại. 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();

mãng xà

  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)

Đi

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 xóa một ID cài đặt căn cứ hỏa lực với một máy chủ gọi API, dịch vụ căn cứ hỏa lực bắt đầu quá trình xóa dữ liệu gắn liền với đó cài đặt ID, dừng chấp nhận dữ liệu mới cho ID đó trong quá trình 1-2 ngày, và sau đó thông báo cho ứng dụng client rằng ID đã bị xóa. Cho đến căn cứ hỏa lực thông báo cho ứng dụng khách hàng, một số dịch vụ của ứng dụng vẫn có thể nhắm mục tiêu ID-ví dụ, một cài đặt căn cứ hỏa lực có thể tiếp tục nhận được thông báo FCM trong một vài giờ.

Nếu bạn muốn xóa dòng ID cài đặt căn cứ hỏa lực và ngay lập tức sử dụng dịch vụ căn cứ hỏa lực với một mới, ID không liên quan, sử dụng API của khách hàng để xử lý xoá.

Lấy định danh khách hàng

Nếu bạn có một yêu cầu để xác định cài đặt cụ thể của ứng dụng của bạn, bạn có thể làm như vậy bằng cách lấy ID cài đặt căn cứ hỏa lực. Ví dụ, để thực hiện kiểm tra trong quá trình phát triển căn cứ hỏa lực trong ứng dụng Tin nhắn, bạn có thể xác định và nhắm mục tiêu các thiết bị kiểm tra đúng bằng ID cài đặt căn cứ hỏa lực của nó.

Để lấy một ID cài đặt căn cứ hỏa lực:

Nhanh

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

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

Lấy thẻ cài đặt auth

dịch vụ căn cứ hỏa lực có thể xác thực cài đặt căn cứ hỏa lực với auth thẻ lấy từ FIS. Ví dụ, khi thiết kế A / kiểm tra B cho Remote Config, bạn có thể xác thực một thiết bị kiểm tra mục tiêu sử dụng một cài đặt auth token.

Một thẻ cài đặt auth là một định dạng ngắn ngủi mang thẻ trong JSON web token (JWT) chứa các thông tin sau cho một cài đặt:

  • ID cài đặt căn cứ hỏa lực
  • Dự án liên quan ( projectNumber )
  • Các liên căn cứ hỏa lực ứng dụng ID ( appId )
  • ngày hết hạn của thẻ

Một thẻ cài đặt auth không thể bị thu hồi, và vẫn còn hiệu lực đến ngày hết hạn của nó. Giá trị mặc định thẻ đời là một tuần.

Để lấy một auth cài đặt mã thông báo:

Nhanh

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

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

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

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 căn cứ hỏa lực cài đặt ID

Trong quá trình hoạt động bình thường của một ứng dụng, ID cài đặt căn cứ hỏa lực (FIDs) không yêu cầu giám sát đặc biệt. Tuy nhiên, các ứng dụng một cách rõ ràng lấy và FIDs sử dụng nên thêm logic để giám sát việc xóa tiềm năng hoặc quay của FID. Dưới đây là một số trường hợp FIDs có thể bị xóa hoặc xoay:

  • Gỡ bỏ hoặc cài đặt lại các ứng dụng, ví dụ như khi một người dùng cuối cài đặt trên thiết bị mới.
  • Người dùng cuối xóa bộ nhớ cache của ứng dụng hoặc thiết bị.
  • FID xóa được kích hoạt trong backend do ứng dụng không hoạt động (hiện tại ngưỡng này là 270 ngày không hoạt động).

Khi các ứng dụng kinh nghiệm FID luân chuyển hoặc xóa trong các loại trường hợp, họ được giao một FID mới. Ngoài ra, các auth cài đặt thẻ liên kết với một FID xóa sẽ bị xóa, không phân biệt của sự trưởng thành của riêng mình, và được thay thế bằng một cài đặt mới auth token.

Ứng dụng có thể theo dõi những thay đổi này và đáp ứng cho phù hợp.

Theo dõi FID luân chuyển:

Nhanh

installationIDObserver = NotificationCenter.default.addObserver(
        forName: .InstallationIDDidChange,
        object: nil,
        queue: nil
) { (notification) in
  // Fetch new Installation ID
  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 tên NSNotificationName.InstallationIDDidChange được đăng tải trên NSNotificationCenter mặc định bất cứ khi nào một FID mới được giao.

Android

Kotlin và Java khách hàng nên thêm thử lại logic để đáp ứng cho các cuộc gọi thất bại trong việc lấy FID mới.

Javascript

Các ứng dụng Web có thể đăng ký vào onIdChange móc.

Bất cứ khi nào một FID mới được tạo ra, gọi lại thuê bao đượ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ừ Instance ID để cài đặt căn cứ hỏa lực

Trước khi giới thiệu các sự cài đặt căn cứ hỏa lực, căn cứ hỏa lực dựa trên ID SDK Instance cho định danh của cài đặt ứng dụng. cài đặt căn cứ hỏa lực cung cấp lợi thế đáng kể so với Instance ID trong độ tin cậy, hiệu suất và an ninh. ứng dụng căn cứ hỏa lực mà phụ thuộc vào ID SDK Instance nên chuyển sang cài đặt căn cứ hỏa lực.

Quá trình chuyển đổi là khác nhau dựa trên ứng dụng của bạn:

  • Apps mà không trực tiếp gọi Instance ID API có thể di chuyển bằng cách cập nhật các phiên bản SDK của họ . Hầu hết các ứng dụng căn cứ hỏa lực rơi vào thể loại này.

  • Apps mà làm cho rõ ràng cuộc gọi API để Instance ID phải cập nhật phiên bản SDK thay đổi làm cho mã để thay thế các phương pháp thẩm ID với cài đặt căn cứ hỏa lực của họ hoặc FCM tương đương. Nếu ứng dụng của bạn sử dụng Instance ID để lấy thẻ đăng ký FCM hoặc rõ ràng sử dụng Instance ID để các trường hợp ứng dụng mục tiêu hoặc cho bất kỳ mục đích nào khác, bạn sẽ cần phải cập nhật mã ứng dụng của bạn.

Hiện nay, FIS là tương thích ngược với các di sản định danh căn cứ hỏa lực Instance ID. Xóa một IID là một phương pháp thay thế yêu cầu xóa dữ liệu với những căn cứ hỏa lực SDK:

  • iOS 6.14.0 và hạ thấp
  • SDK Android sớm hơn ngày 27 tháng hai năm 2020

Điều này có nghĩa rằng các ứng dụng không cần phải di chuyển đến lắp đặt căn cứ hỏa lực; Tuy nhiên, làm như vậy là rất khuyến khích.

Nâng cấp lên phiên bản SDK tối thiểu cho việc cài đặt căn cứ hỏa lực

Để di chuyển từ Instance ID để cài đặt căn cứ hỏa lực, hãy chắc chắn rằng các ứng dụng của bạn sử dụng ít nhất là số phiên bản tối thiểu được liệt kê trong những căn cứ hỏa lực SDK sau:

căn cứ hỏa lực SDK Phiên bản tối thiểu Android Phiên bản tối thiểu iOS
Căn cứ hỏa lực Cloud Messaging v20.3.0 v6.34.0
từ xa Config v19.2.0 v6.24.0
Google Analytics cho căn cứ hỏa lực \ (Đo lường SDK) v17.4.4 v6.18.0
Trong ứng dụng Tin nhắn v19.0.7 v6.24.0
Giám sát hiệu suất v19.0.8 v6.21.0
Crashlytics v17.2.1 v6.23.0
ML Kit v22.1.2 v6.28.0

Cập nhật mã mà các cuộc gọi một cách 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 pháp thẩm ID SDK, bạn có thể thay thế mà sử dụng với lựa chọn thay thế giống hệt nhau trong cài đặt căn cứ hỏa lực SDK hoặc FCM SDK.

Lấy một định danh

Phương pháp để có được Instance ID được thay thế bằng các phương pháp để có được một bản cài đặt ID. Ví dụ:

Trước

Nhanh

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

Nhanh

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

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

Xóa một định danh

Phương pháp để xóa Instance ID được thay thế bằng phương pháp xóa ID cài đặt căn cứ hỏa lực. Ví dụ:

Trước

Nhanh

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

Nhanh

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

Lấy một đăng ký thẻ FCM

Trước sự ra đời của Cài đặt căn cứ hỏa lực, FCM khách hàng lấy thẻ đăng ký từ Instance ID. Bây giờ, FCM SDK cung cấp phương pháp để lấy thẻ đă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()
        })

Nhanh

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

Nhanh

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