จัดการการติดตั้ง Firebase

บริการติดตั้ง Firebase (FIS) ให้รหัสการติดตั้ง Firebase (FID) สำหรับแต่ละอินสแตนซ์ที่ติดตั้งของแอป Firebase ID การติดตั้ง Firebase ถูกใช้เป็นการภายในโดยบริการ Firebase เหล่านี้:

บริการ Firebase ฟังก์ชันการติดตั้ง Firebase
การส่งข้อความบนคลาวด์ของ Firebase

Firebase Cloud Messaging ใช้รหัสการติดตั้ง Firebase เพื่อกำหนดเป้าหมายอุปกรณ์สำหรับการส่งข้อความ

Firebase Crashlytics

Firebase Crashlytics หมุนเวียน UUID การติดตั้ง Crashlytics ตามการเปลี่ยนแปลง ID การติดตั้ง Firebase ของอินสแตนซ์แอป ในอนาคต อาจใช้ ID การติดตั้งเพื่อเปิดใช้งานคุณสมบัติที่ปรับปรุงการรายงานข้อขัดข้องและบริการการจัดการข้อขัดข้อง

การส่งข้อความในแอปของ Firebase

Firebase In-App Messaging ใช้ ID การติดตั้ง Firebase เพื่อกำหนดเป้าหมายอุปกรณ์สำหรับการส่งข้อความ

การตรวจสอบประสิทธิภาพ Firebase

การตรวจสอบประสิทธิภาพใช้รหัสการติดตั้ง Firebase เพื่อคำนวณจำนวนการติดตั้ง Firebase ที่ไม่ซ้ำกันซึ่งเข้าถึงทรัพยากรเครือข่าย เพื่อให้แน่ใจว่ารูปแบบการเข้าถึงเป็นแบบนิรนามเพียงพอ นอกจากนี้ยังใช้ ID การติดตั้ง Firebase กับ Firebase Remote Config เพื่อจัดการอัตราการรายงานเหตุการณ์ประสิทธิภาพ

การกำหนดค่าระยะไกลของ Firebase

การกำหนดค่าระยะไกลใช้รหัสการติดตั้ง Firebase เพื่อเลือกค่าการกำหนดค่าเพื่อส่งกลับไปยังอุปกรณ์ของผู้ใช้ปลายทาง

Firebase ML

Firebase ML ใช้ข้อมูลรับรองที่เรียกว่า โทเค็นการตรวจสอบการติดตั้ง สำหรับการตรวจสอบสิทธิ์อุปกรณ์เมื่อโต้ตอบกับอินสแตนซ์ของแอป เช่น เพื่อแจกจ่ายโมเดลของนักพัฒนาซอฟต์แวร์ไปยังอินสแตนซ์ของแอป

พื้นที่เก็บข้อมูลแบ่งกลุ่มผู้ใช้ Firebase

Firebase User Segmentation Storage เก็บ ID การติดตั้ง Firebase และแอตทริบิวต์และเซกเมนต์ที่เกี่ยวข้องเพื่อให้ข้อมูลการกำหนดเป้าหมายแก่บริการ Firebase อื่นๆ ที่ใช้งาน

โดยทั่วไป บริการ Firebase จะใช้บริการติดตั้ง Firebase โดยไม่ต้องให้นักพัฒนาโต้ตอบโดยตรงกับ FIS API อย่างไรก็ตาม มีบางกรณีที่นักพัฒนาแอปอาจต้องการเรียก FIS API โดยตรง เช่น:

  • หากต้องการลบการติดตั้ง Firebase และข้อมูลที่เชื่อมโยงกับการติดตั้ง
  • เพื่อดึงตัวระบุ (ID การติดตั้ง Firebase) เพื่อกำหนดเป้าหมายการติดตั้งแอปเฉพาะ
  • เพื่อดึงโทเค็นการตรวจสอบสิทธิ์การติดตั้งเพื่อตรวจสอบความถูกต้องของการติดตั้ง Firebase

หากต้องการเริ่มต้นใช้งานการเรียก FIS API โดยตรง ให้เพิ่ม SDK ลงในแอปของคุณ

เพิ่ม SDK การติดตั้ง Firebase ลงในแอปของคุณ

iOS+

  1. เพิ่มการอ้างอิงสำหรับการติดตั้ง Firebase ใน Podfile ของคุณ:
    pod 'FirebaseInstallations'
  2. เรียกใช้ pod install และเปิดไฟล์ .xcworkspace ที่สร้างขึ้น
  3. นำเข้าโมดูล FirebaseCore ใน UIApplicationDelegate ของคุณ รวมถึง โมดูล Firebase อื่นๆ ที่ตัวแทนแอปของคุณใช้ ตัวอย่างเช่น หากต้องการใช้ Cloud Firestore และการรับรองความถูกต้อง:

    SwiftUI

    import SwiftUI
    import FirebaseCore
    import FirebaseFirestore
    import FirebaseAuth
    // ...
          

    สวิฟต์

    import FirebaseCore
    import FirebaseFirestore
    import FirebaseAuth
    // ...
          

    วัตถุประสงค์-C

    @import FirebaseCore;
    @import FirebaseFirestore;
    @import FirebaseAuth;
    // ...
          
  4. กำหนดค่าอินสแตนซ์ที่ใช้ร่วมกันของ FirebaseApp ใน application(_:didFinishLaunchingWithOptions:) วิธีการ:

    SwiftUI

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

    สวิฟต์

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

    วัตถุประสงค์-C

    // Use Firebase library to configure APIs
    [FIRApp configure];
  5. หากคุณใช้ SwiftUI คุณต้องสร้างตัวแทนแอปพลิเคชันและแนบกับโครงสร้าง App ของคุณผ่าน UIApplicationDelegateAdaptor หรือ NSApplicationDelegateAdaptor คุณต้องปิดใช้งานการ swizzling ของผู้รับมอบสิทธิ์แอปด้วย สำหรับข้อมูลเพิ่มเติม โปรดดู คำแนะนำ SwiftUI

    SwiftUI

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

แอนดรอยด์

เพิ่มการพึ่งพาสำหรับการติดตั้ง Firebase Android SDK ให้กับโมดูลของคุณ (ระดับแอพ) ไฟล์ Gradle (โดยปกติคือ app/build.gradle ):

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

จาวาสคริปต์

ขึ้นอยู่กับวิธีการโฮสต์เว็บแอปพลิเคชันของคุณ การกำหนดค่าของคุณอาจได้รับการจัดการโดยอัตโนมัติ หรือคุณอาจต้องอัปเดตอ อบเจกต์การกำหนดค่า Firebase

ตัวอย่างเช่น ถ้าการพึ่งพาของคุณถูกเพิ่มใน index.html ให้เพิ่มการพึ่งพาในองค์ประกอบ <head>:

<script src="/__/firebase/9.22.2/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 นั้นแตกต่างกันไปสำหรับการติดตั้งทุกครั้งของทุกแอปพลิเคชัน แอปพลิเคชันต่างๆ บนอุปกรณ์เดียวกันมี ID การติดตั้ง Firebase ต่างกัน รหัสการติดตั้ง Firebase ระบุการติดตั้งแอปและข้อมูลที่เชื่อมโยงกับการติดตั้งแอปเหล่านั้น

เมื่อคุณลบ ID การติดตั้ง ข้อมูลที่เชื่อมโยงกับ ID การติดตั้งนั้นจะถูกลบออกจากระบบที่ใช้งานอยู่และระบบสำรองของบริการ Firebase ทั้งหมดที่ใช้ ID การติดตั้ง Firebase เพื่อระบุการติดตั้งภายใน 180 วัน กระบวนการนี้มีการอธิบายไว้ในระดับสูงใน คำชี้แจงของ Google เกี่ยวกับการลบและการเก็บรักษา

เว้นแต่คุณจะปิดใช้งานบริการที่สร้าง FID ทั้งหมดในแอปของคุณ FIS จะสร้าง ID ใหม่ภายในสองสามวัน Firebase ถือว่า ID ที่สร้างขึ้นใหม่เป็นการติดตั้ง Firebase ใหม่ และไม่เชื่อมโยงกับ ID หรือข้อมูลก่อนหน้าแต่อย่างใด

ลบ 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 เมธอดเหล่านี้แสดงถึงการตั้งชื่อ ID อินสแตนซ์ อย่างไรก็ตาม วิธีการทั้งหมดจะลบ FID เมื่อเรียกใช้ด้วย Firebase ปัจจุบัน เอสดีเค).

โหนด 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)
}

เมื่อคุณลบ ID การติดตั้ง Firebase ด้วยการเรียก API ของเซิร์ฟเวอร์ บริการ Firebase จะเริ่มกระบวนการลบข้อมูลที่เชื่อมโยงกับ ID การติดตั้งนั้น หยุดรับข้อมูลใหม่สำหรับ ID นั้นในช่วง 1-2 วัน จากนั้นจึงแจ้งแอปไคลเอ็นต์ ว่าไอดีถูกลบ จนกว่า Firebase จะแจ้งเตือนแอปไคลเอ็นต์ บริการบางอย่างของแอปอาจยังคงกำหนดเป้าหมายที่ ID เช่น การติดตั้ง Firebase อาจยังคงได้รับการแจ้งเตือน FCM เป็นเวลาสองสามชั่วโมง

หากคุณต้องการลบรหัสการติดตั้ง Firebase ปัจจุบันและใช้บริการ Firebase ด้วยรหัสใหม่ที่ไม่เกี่ยวข้องทันที ให้ใช้ API ของไคลเอนต์เพื่อจัดการการลบ

รับตัวระบุไคลเอนต์

หากคุณมีข้อกำหนดในการระบุการติดตั้งแอปของคุณโดยเฉพาะ คุณสามารถทำได้โดยเรียกรหัสการติดตั้ง Firebase ตัวอย่างเช่น หากต้องการทำการทดสอบระหว่างการพัฒนา Firebase In-App Messaging คุณสามารถระบุและกำหนดเป้าหมายอุปกรณ์ทดสอบที่ถูกต้องโดยใช้ ID การติดตั้ง Firebase

ในการรับ ID การติดตั้ง 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 สำหรับการกำหนดค่าระยะไกล คุณสามารถตรวจสอบอุปกรณ์ทดสอบที่เป็นเป้าหมายได้โดยใช้โทเค็นการตรวจสอบสิทธิ์การติดตั้ง

โทเค็นการตรวจสอบสิทธิ์การติดตั้งเป็นโทเค็นผู้ถือที่มีอายุสั้นในรูปแบบ JSON web token (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

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

ตรวจสอบวงจรชีวิต 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 hook ได้

เมื่อใดก็ตามที่มีการสร้าง 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 อาศัย SDK ID อินสแตนซ์สำหรับระบุการติดตั้งแอป การติดตั้ง Firebase ให้ข้อได้เปรียบที่สำคัญเหนือ Instance ID ในด้านความน่าเชื่อถือ ประสิทธิภาพ และความปลอดภัย แอป Firebase ที่ต้องใช้ Instance ID SDK ควรย้ายไปยังการติดตั้ง Firebase

กระบวนการย้ายข้อมูลจะแตกต่างกันไปตามแอปของคุณ:

  • แอปที่ไม่ได้เรียกใช้ Instance ID API โดยตรงสามารถย้ายข้อมูลได้โดย การอัปเดตเวอร์ชัน SDK แอป Firebase ส่วนใหญ่จัดอยู่ในหมวดหมู่นี้

  • แอปที่เรียก API ไปยัง Instance ID อย่างชัดเจนต้องอัปเดตเวอร์ชัน SDK และ ทำการเปลี่ยนแปลงโค้ด เพื่อแทนที่เมธอด Instance ID ด้วยการติดตั้ง Firebase หรือเทียบเท่ากับ FCM หากแอปของคุณใช้รหัสอินสแตนซ์เพื่อดึงโทเค็นการลงทะเบียน FCM หรือใช้รหัสอินสแตนซ์อย่างชัดแจ้งเพื่อกำหนดเป้าหมายอินสแตนซ์ของแอปหรือเพื่อวัตถุประสงค์อื่นใด คุณจะต้องอัปเดตรหัสแอปพลิเคชันของคุณ

ปัจจุบัน FIS เข้ากันได้กับรหัสอินสแตนซ์ Firebase ของตัวระบุเดิม การลบ IID เป็นอีกวิธีหนึ่งในการขอลบข้อมูลด้วย Firebase SDK เหล่านี้:

  • iOS 6.14.0 และต่ำกว่า
  • Android SDK ก่อนวันที่ 27 กุมภาพันธ์ 2020

ซึ่งหมายความว่าไม่ จำเป็น ต้องย้ายแอปไปยังการติดตั้ง Firebase อย่างไรก็ตามขอแนะนำให้ทำเช่นนั้น

การอัปเกรดเป็นเวอร์ชัน SDK ขั้นต่ำสำหรับการติดตั้ง Firebase

หากต้องการย้ายจากรหัสอินสแตนซ์ไปยังการติดตั้ง Firebase ตรวจสอบให้แน่ใจว่าแอปพลิเคชันของคุณใช้หมายเลขเวอร์ชันขั้นต่ำที่ระบุไว้ของ Firebase SDK ต่อไปนี้เป็นอย่างน้อย:

Firebase SDK เวอร์ชัน Android ขั้นต่ำ เวอร์ชัน iOS ขั้นต่ำ
การส่งข้อความบนคลาวด์ของ Firebase v20.3.0 v6.34.0
การกำหนดค่าระยะไกล v19.2.0 v6.24.0
Google Analytics สำหรับ Firebase \ (การวัด SDK) v17.4.4 v6.18.0
การส่งข้อความในแอป v19.0.7 v6.24.0
การตรวจสอบประสิทธิภาพ v19.0.8 v6.21.0
แครชไลติค v17.2.1 v6.23.0
ม.ล.คิท v22.1.2 v6.28.0

การอัปเดตโค้ดที่เรียก Instance ID API อย่างชัดเจน

หากแอป Android หรือ Apple ของคุณใช้วิธีการ SDK ของ ID อินสแตนซ์โดยตรง คุณสามารถแทนที่การใช้งานนั้นด้วยทางเลือกที่เหมือนกันใน 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 ไคลเอนต์ FCM จะดึงโทเค็นการลงทะเบียนจากรหัสอินสแตนซ์ ขณะนี้ 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;
  }
}];
,

บริการติดตั้ง Firebase (FIS) ให้รหัสการติดตั้ง Firebase (FID) สำหรับแต่ละอินสแตนซ์ที่ติดตั้งของแอป Firebase ID การติดตั้ง Firebase ถูกใช้เป็นการภายในโดยบริการ Firebase เหล่านี้:

บริการ Firebase ฟังก์ชันการติดตั้ง Firebase
การส่งข้อความบนคลาวด์ของ Firebase

Firebase Cloud Messaging ใช้รหัสการติดตั้ง Firebase เพื่อกำหนดเป้าหมายอุปกรณ์สำหรับการส่งข้อความ

Firebase Crashlytics

Firebase Crashlytics หมุนเวียน UUID การติดตั้ง Crashlytics ตามการเปลี่ยนแปลง ID การติดตั้ง Firebase ของอินสแตนซ์แอป ในอนาคต อาจใช้ ID การติดตั้งเพื่อเปิดใช้งานคุณสมบัติที่ปรับปรุงการรายงานข้อขัดข้องและบริการการจัดการข้อขัดข้อง

การส่งข้อความในแอปของ Firebase

Firebase In-App Messaging ใช้ ID การติดตั้ง Firebase เพื่อกำหนดเป้าหมายอุปกรณ์สำหรับการส่งข้อความ

การตรวจสอบประสิทธิภาพ Firebase

การตรวจสอบประสิทธิภาพใช้รหัสการติดตั้ง Firebase เพื่อคำนวณจำนวนการติดตั้ง Firebase ที่ไม่ซ้ำกันซึ่งเข้าถึงทรัพยากรเครือข่าย เพื่อให้แน่ใจว่ารูปแบบการเข้าถึงเป็นแบบนิรนามเพียงพอ นอกจากนี้ยังใช้ ID การติดตั้ง Firebase กับ Firebase Remote Config เพื่อจัดการอัตราการรายงานเหตุการณ์ประสิทธิภาพ

การกำหนดค่าระยะไกลของ Firebase

การกำหนดค่าระยะไกลใช้รหัสการติดตั้ง Firebase เพื่อเลือกค่าการกำหนดค่าเพื่อส่งกลับไปยังอุปกรณ์ของผู้ใช้ปลายทาง

Firebase ML

Firebase ML ใช้ข้อมูลรับรองที่เรียกว่า โทเค็นการตรวจสอบการติดตั้ง สำหรับการตรวจสอบสิทธิ์อุปกรณ์เมื่อโต้ตอบกับอินสแตนซ์ของแอป เช่น เพื่อแจกจ่ายโมเดลของนักพัฒนาซอฟต์แวร์ไปยังอินสแตนซ์ของแอป

พื้นที่เก็บข้อมูลแบ่งกลุ่มผู้ใช้ Firebase

Firebase User Segmentation Storage เก็บ ID การติดตั้ง Firebase และแอตทริบิวต์และเซกเมนต์ที่เกี่ยวข้องเพื่อให้ข้อมูลการกำหนดเป้าหมายแก่บริการ Firebase อื่นๆ ที่ใช้งาน

โดยทั่วไป บริการ Firebase จะใช้บริการติดตั้ง Firebase โดยไม่ต้องให้นักพัฒนาโต้ตอบโดยตรงกับ FIS API อย่างไรก็ตาม มีบางกรณีที่นักพัฒนาแอปอาจต้องการเรียก FIS API โดยตรง เช่น:

  • หากต้องการลบการติดตั้ง Firebase และข้อมูลที่เชื่อมโยงกับการติดตั้ง
  • เพื่อดึงตัวระบุ (ID การติดตั้ง Firebase) เพื่อกำหนดเป้าหมายการติดตั้งแอปเฉพาะ
  • เพื่อดึงโทเค็นการตรวจสอบสิทธิ์การติดตั้งเพื่อตรวจสอบความถูกต้องของการติดตั้ง Firebase

หากต้องการเริ่มต้นใช้งานการเรียก FIS API โดยตรง ให้เพิ่ม SDK ลงในแอปของคุณ

เพิ่ม SDK การติดตั้ง Firebase ลงในแอปของคุณ

iOS+

  1. เพิ่มการอ้างอิงสำหรับการติดตั้ง Firebase ใน Podfile ของคุณ:
    pod 'FirebaseInstallations'
  2. เรียกใช้ pod install และเปิดไฟล์ .xcworkspace ที่สร้างขึ้น
  3. นำเข้าโมดูล FirebaseCore ใน UIApplicationDelegate ของคุณ รวมถึง โมดูล Firebase อื่นๆ ที่ตัวแทนแอปของคุณใช้ ตัวอย่างเช่น หากต้องการใช้ Cloud Firestore และการรับรองความถูกต้อง:

    SwiftUI

    import SwiftUI
    import FirebaseCore
    import FirebaseFirestore
    import FirebaseAuth
    // ...
          

    สวิฟต์

    import FirebaseCore
    import FirebaseFirestore
    import FirebaseAuth
    // ...
          

    วัตถุประสงค์-C

    @import FirebaseCore;
    @import FirebaseFirestore;
    @import FirebaseAuth;
    // ...
          
  4. กำหนดค่าอินสแตนซ์ที่ใช้ร่วมกันของ FirebaseApp ใน application(_:didFinishLaunchingWithOptions:) วิธีการ:

    SwiftUI

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

    สวิฟต์

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

    วัตถุประสงค์-C

    // Use Firebase library to configure APIs
    [FIRApp configure];
  5. หากคุณใช้ SwiftUI คุณต้องสร้างตัวแทนแอปพลิเคชันและแนบกับโครงสร้าง App ของคุณผ่าน UIApplicationDelegateAdaptor หรือ NSApplicationDelegateAdaptor คุณต้องปิดใช้งานการ swizzling ของผู้รับมอบสิทธิ์แอปด้วย สำหรับข้อมูลเพิ่มเติม โปรดดู คำแนะนำ SwiftUI

    SwiftUI

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

แอนดรอยด์

เพิ่มการพึ่งพาสำหรับการติดตั้ง Firebase Android SDK ให้กับโมดูลของคุณ (ระดับแอพ) ไฟล์ Gradle (โดยปกติคือ app/build.gradle ):

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

จาวาสคริปต์

ขึ้นอยู่กับวิธีการโฮสต์เว็บแอปพลิเคชันของคุณ การกำหนดค่าของคุณอาจได้รับการจัดการโดยอัตโนมัติ หรือคุณอาจต้องอัปเดตอ อบเจกต์การกำหนดค่า Firebase

ตัวอย่างเช่น ถ้าการพึ่งพาของคุณถูกเพิ่มใน index.html ให้เพิ่มการพึ่งพาในองค์ประกอบ <head>:

<script src="/__/firebase/9.22.2/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 นั้นแตกต่างกันไปสำหรับการติดตั้งทุกครั้งของทุกแอปพลิเคชัน แอปพลิเคชันต่างๆ บนอุปกรณ์เดียวกันมี ID การติดตั้ง Firebase ต่างกัน รหัสการติดตั้ง Firebase ระบุการติดตั้งแอปและข้อมูลที่เชื่อมโยงกับการติดตั้งแอปเหล่านั้น

เมื่อคุณลบ ID การติดตั้ง ข้อมูลที่เชื่อมโยงกับ ID การติดตั้งนั้นจะถูกลบออกจากระบบที่ใช้งานอยู่และระบบสำรองของบริการ Firebase ทั้งหมดที่ใช้ ID การติดตั้ง Firebase เพื่อระบุการติดตั้งภายใน 180 วัน กระบวนการนี้มีการอธิบายไว้ในระดับสูงใน คำชี้แจงของ Google เกี่ยวกับการลบและการเก็บรักษา

เว้นแต่คุณจะปิดใช้งานบริการที่สร้าง FID ทั้งหมดในแอปของคุณ FIS จะสร้าง ID ใหม่ภายในสองสามวัน Firebase ถือว่า ID ที่สร้างขึ้นใหม่เป็นการติดตั้ง Firebase ใหม่ และไม่เชื่อมโยงกับ ID หรือข้อมูลก่อนหน้าแต่อย่างใด

ลบ 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 เมธอดเหล่านี้แสดงถึงการตั้งชื่อ ID อินสแตนซ์ อย่างไรก็ตาม วิธีการทั้งหมดจะลบ FID เมื่อเรียกใช้ด้วย Firebase ปัจจุบัน เอสดีเค).

โหนด 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)
}

เมื่อคุณลบ ID การติดตั้ง Firebase ด้วยการเรียก API ของเซิร์ฟเวอร์ บริการ Firebase จะเริ่มกระบวนการลบข้อมูลที่เชื่อมโยงกับ ID การติดตั้งนั้น หยุดรับข้อมูลใหม่สำหรับ ID นั้นในช่วง 1-2 วัน จากนั้นจึงแจ้งแอปไคลเอ็นต์ ว่าไอดีถูกลบ จนกว่า Firebase จะแจ้งเตือนแอปไคลเอ็นต์ บริการบางอย่างของแอปอาจยังคงกำหนดเป้าหมายที่ ID เช่น การติดตั้ง Firebase อาจยังคงได้รับการแจ้งเตือน FCM เป็นเวลาสองสามชั่วโมง

หากคุณต้องการลบรหัสการติดตั้ง Firebase ปัจจุบันและใช้บริการ Firebase ด้วยรหัสใหม่ที่ไม่เกี่ยวข้องทันที ให้ใช้ API ของไคลเอนต์เพื่อจัดการการลบ

รับตัวระบุไคลเอนต์

หากคุณมีข้อกำหนดในการระบุการติดตั้งแอปของคุณโดยเฉพาะ คุณสามารถทำได้โดยเรียกรหัสการติดตั้ง Firebase ตัวอย่างเช่น หากต้องการทำการทดสอบระหว่างการพัฒนา Firebase In-App Messaging คุณสามารถระบุและกำหนดเป้าหมายอุปกรณ์ทดสอบที่ถูกต้องโดยใช้ ID การติดตั้ง Firebase

ในการรับ ID การติดตั้ง 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 สำหรับการกำหนดค่าระยะไกล คุณสามารถตรวจสอบอุปกรณ์ทดสอบที่เป็นเป้าหมายได้โดยใช้โทเค็นการตรวจสอบสิทธิ์การติดตั้ง

โทเค็นการตรวจสอบสิทธิ์การติดตั้งเป็นโทเค็นผู้ถือที่มีอายุสั้นในรูปแบบ JSON web token (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

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

ตรวจสอบวงจรชีวิต 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 hook ได้

เมื่อใดก็ตามที่มีการสร้าง 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 อาศัย SDK ID อินสแตนซ์สำหรับระบุการติดตั้งแอป การติดตั้ง Firebase ให้ข้อได้เปรียบที่สำคัญเหนือ Instance ID ในด้านความน่าเชื่อถือ ประสิทธิภาพ และความปลอดภัย แอป Firebase ที่ต้องใช้ Instance ID SDK ควรย้ายไปยังการติดตั้ง Firebase

กระบวนการย้ายข้อมูลจะแตกต่างกันไปตามแอปของคุณ:

  • แอปที่ไม่ได้เรียกใช้ Instance ID API โดยตรงสามารถย้ายข้อมูลได้โดย การอัปเดตเวอร์ชัน SDK แอป Firebase ส่วนใหญ่จัดอยู่ในหมวดหมู่นี้

  • แอปที่เรียก API ไปยัง Instance ID อย่างชัดเจนต้องอัปเดตเวอร์ชัน SDK และ ทำการเปลี่ยนแปลงโค้ด เพื่อแทนที่เมธอด Instance ID ด้วยการติดตั้ง Firebase หรือเทียบเท่ากับ FCM หากแอปของคุณใช้รหัสอินสแตนซ์เพื่อดึงโทเค็นการลงทะเบียน FCM หรือใช้รหัสอินสแตนซ์อย่างชัดแจ้งเพื่อกำหนดเป้าหมายอินสแตนซ์ของแอปหรือเพื่อวัตถุประสงค์อื่นใด คุณจะต้องอัปเดตรหัสแอปพลิเคชันของคุณ

ปัจจุบัน FIS เข้ากันได้กับรหัสอินสแตนซ์ Firebase ของตัวระบุเดิม การลบ IID เป็นอีกวิธีหนึ่งในการขอลบข้อมูลด้วย Firebase SDK เหล่านี้:

  • iOS 6.14.0 และต่ำกว่า
  • Android SDK ก่อนวันที่ 27 กุมภาพันธ์ 2020

ซึ่งหมายความว่าไม่ จำเป็น ต้องย้ายแอปไปยังการติดตั้ง Firebase อย่างไรก็ตามขอแนะนำให้ทำเช่นนั้น

การอัปเกรดเป็นเวอร์ชัน SDK ขั้นต่ำสำหรับการติดตั้ง Firebase

หากต้องการย้ายจากรหัสอินสแตนซ์ไปยังการติดตั้ง Firebase ตรวจสอบให้แน่ใจว่าแอปพลิเคชันของคุณใช้หมายเลขเวอร์ชันขั้นต่ำที่ระบุไว้ของ Firebase SDK ต่อไปนี้เป็นอย่างน้อย:

Firebase SDK เวอร์ชัน Android ขั้นต่ำ เวอร์ชัน iOS ขั้นต่ำ
การส่งข้อความบนคลาวด์ของ Firebase v20.3.0 v6.34.0
การกำหนดค่าระยะไกล v19.2.0 v6.24.0
Google Analytics สำหรับ Firebase \ (การวัด SDK) v17.4.4 v6.18.0
การส่งข้อความในแอป v19.0.7 v6.24.0
การตรวจสอบประสิทธิภาพ v19.0.8 v6.21.0
แครชไลติค v17.2.1 v6.23.0
ม.ล.คิท v22.1.2 v6.28.0

การอัปเดตโค้ดที่เรียก Instance ID API อย่างชัดเจน

หากแอป Android หรือ Apple ของคุณใช้วิธีการ SDK ของ ID อินสแตนซ์โดยตรง คุณสามารถแทนที่การใช้งานนั้นด้วยทางเลือกที่เหมือนกันใน 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 ไคลเอนต์ FCM จะดึงโทเค็นการลงทะเบียนจากรหัสอินสแตนซ์ ขณะนี้ 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;
  }
}];
,

บริการติดตั้ง Firebase (FIS) ให้รหัสการติดตั้ง Firebase (FID) สำหรับแต่ละอินสแตนซ์ที่ติดตั้งของแอป Firebase ID การติดตั้ง Firebase ถูกใช้เป็นการภายในโดยบริการ Firebase เหล่านี้:

บริการ Firebase ฟังก์ชันการติดตั้ง Firebase
การส่งข้อความบนคลาวด์ของ Firebase

Firebase Cloud Messaging ใช้รหัสการติดตั้ง Firebase เพื่อกำหนดเป้าหมายอุปกรณ์สำหรับการส่งข้อความ

Firebase Crashlytics

Firebase Crashlytics หมุนเวียน UUID การติดตั้ง Crashlytics ตามการเปลี่ยนแปลง ID การติดตั้ง Firebase ของอินสแตนซ์แอป ในอนาคต อาจใช้ ID การติดตั้งเพื่อเปิดใช้งานคุณสมบัติที่ปรับปรุงการรายงานข้อขัดข้องและบริการการจัดการข้อขัดข้อง

การส่งข้อความในแอปของ Firebase

Firebase In-App Messaging ใช้ ID การติดตั้ง Firebase เพื่อกำหนดเป้าหมายอุปกรณ์สำหรับการส่งข้อความ

การตรวจสอบประสิทธิภาพ Firebase

การตรวจสอบประสิทธิภาพใช้รหัสการติดตั้ง Firebase เพื่อคำนวณจำนวนการติดตั้ง Firebase ที่ไม่ซ้ำกันซึ่งเข้าถึงทรัพยากรเครือข่าย เพื่อให้แน่ใจว่ารูปแบบการเข้าถึงเป็นแบบนิรนามเพียงพอ นอกจากนี้ยังใช้ ID การติดตั้ง Firebase กับ Firebase Remote Config เพื่อจัดการอัตราการรายงานเหตุการณ์ประสิทธิภาพ

การกำหนดค่าระยะไกลของ Firebase

การกำหนดค่าระยะไกลใช้รหัสการติดตั้ง Firebase เพื่อเลือกค่าการกำหนดค่าเพื่อส่งกลับไปยังอุปกรณ์ของผู้ใช้ปลายทาง

Firebase ML

Firebase ML ใช้ข้อมูลรับรองที่เรียกว่า โทเค็นการตรวจสอบการติดตั้ง สำหรับการตรวจสอบสิทธิ์อุปกรณ์เมื่อโต้ตอบกับอินสแตนซ์ของแอป เช่น เพื่อแจกจ่ายโมเดลของนักพัฒนาซอฟต์แวร์ไปยังอินสแตนซ์ของแอป

พื้นที่เก็บข้อมูลแบ่งกลุ่มผู้ใช้ Firebase

Firebase User Segmentation Storage เก็บ ID การติดตั้ง Firebase และแอตทริบิวต์และเซกเมนต์ที่เกี่ยวข้องเพื่อให้ข้อมูลการกำหนดเป้าหมายแก่บริการ Firebase อื่นๆ ที่ใช้งาน

โดยทั่วไป บริการ Firebase จะใช้บริการติดตั้ง Firebase โดยไม่ต้องให้นักพัฒนาโต้ตอบโดยตรงกับ FIS API อย่างไรก็ตาม มีบางกรณีที่นักพัฒนาแอปอาจต้องการเรียก FIS API โดยตรง เช่น:

  • หากต้องการลบการติดตั้ง Firebase และข้อมูลที่เชื่อมโยงกับการติดตั้ง
  • เพื่อดึงตัวระบุ (ID การติดตั้ง Firebase) เพื่อกำหนดเป้าหมายการติดตั้งแอปเฉพาะ
  • เพื่อดึงโทเค็นการตรวจสอบสิทธิ์การติดตั้งเพื่อตรวจสอบความถูกต้องของการติดตั้ง Firebase

หากต้องการเริ่มต้นใช้งานการเรียก FIS API โดยตรง ให้เพิ่ม SDK ลงในแอปของคุณ

เพิ่ม SDK การติดตั้ง Firebase ลงในแอปของคุณ

iOS+

  1. เพิ่มการอ้างอิงสำหรับการติดตั้ง Firebase ใน Podfile ของคุณ:
    pod 'FirebaseInstallations'
  2. เรียกใช้ pod install และเปิดไฟล์ .xcworkspace ที่สร้างขึ้น
  3. นำเข้าโมดูล FirebaseCore ใน UIApplicationDelegate ของคุณ รวมถึง โมดูล Firebase อื่นๆ ที่ตัวแทนแอปของคุณใช้ ตัวอย่างเช่น หากต้องการใช้ Cloud Firestore และการรับรองความถูกต้อง:

    SwiftUI

    import SwiftUI
    import FirebaseCore
    import FirebaseFirestore
    import FirebaseAuth
    // ...
          

    สวิฟต์

    import FirebaseCore
    import FirebaseFirestore
    import FirebaseAuth
    // ...
          

    วัตถุประสงค์-C

    @import FirebaseCore;
    @import FirebaseFirestore;
    @import FirebaseAuth;
    // ...
          
  4. กำหนดค่าอินสแตนซ์ที่ใช้ร่วมกันของ FirebaseApp ใน application(_:didFinishLaunchingWithOptions:) วิธีการ:

    SwiftUI

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

    สวิฟต์

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

    วัตถุประสงค์-C

    // Use Firebase library to configure APIs
    [FIRApp configure];
  5. หากคุณใช้ SwiftUI คุณต้องสร้างตัวแทนแอปพลิเคชันและแนบกับโครงสร้าง App ของคุณผ่าน UIApplicationDelegateAdaptor หรือ NSApplicationDelegateAdaptor คุณต้องปิดใช้งานการ swizzling ของผู้รับมอบสิทธิ์แอปด้วย สำหรับข้อมูลเพิ่มเติม โปรดดู คำแนะนำ SwiftUI

    SwiftUI

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

แอนดรอยด์

เพิ่มการพึ่งพาสำหรับการติดตั้ง Firebase Android SDK ให้กับโมดูลของคุณ (ระดับแอพ) ไฟล์ Gradle (โดยปกติคือ app/build.gradle ):

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

จาวาสคริปต์

ขึ้นอยู่กับวิธีการโฮสต์เว็บแอปพลิเคชันของคุณ การกำหนดค่าของคุณอาจได้รับการจัดการโดยอัตโนมัติ หรือคุณอาจต้องอัปเดตอ อบเจกต์การกำหนดค่า Firebase

ตัวอย่างเช่น ถ้าการพึ่งพาของคุณถูกเพิ่มใน index.html ให้เพิ่มการพึ่งพาในองค์ประกอบ <head>:

<script src="/__/firebase/9.22.2/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 นั้นแตกต่างกันไปสำหรับการติดตั้งทุกครั้งของทุกแอปพลิเคชัน แอปพลิเคชันต่างๆ บนอุปกรณ์เดียวกันมี ID การติดตั้ง Firebase ต่างกัน รหัสการติดตั้ง Firebase ระบุการติดตั้งแอปและข้อมูลที่เชื่อมโยงกับการติดตั้งแอปเหล่านั้น

เมื่อคุณลบ ID การติดตั้ง ข้อมูลที่เชื่อมโยงกับ ID การติดตั้งนั้นจะถูกลบออกจากระบบที่ใช้งานอยู่และระบบสำรองของบริการ Firebase ทั้งหมดที่ใช้ ID การติดตั้ง Firebase เพื่อระบุการติดตั้งภายใน 180 วัน กระบวนการนี้มีการอธิบายไว้ในระดับสูงใน คำชี้แจงของ Google เกี่ยวกับการลบและการเก็บรักษา

เว้นแต่คุณจะปิดใช้งานบริการที่สร้าง FID ทั้งหมดในแอปของคุณ FIS จะสร้าง ID ใหม่ภายในสองสามวัน Firebase ถือว่า ID ที่สร้างขึ้นใหม่เป็นการติดตั้ง Firebase ใหม่ และไม่เชื่อมโยงกับ ID หรือข้อมูลก่อนหน้าแต่อย่างใด

ลบ 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 เมธอดเหล่านี้แสดงถึงการตั้งชื่อ ID อินสแตนซ์ อย่างไรก็ตาม วิธีการทั้งหมดจะลบ FID เมื่อเรียกใช้ด้วย Firebase ปัจจุบัน เอสดีเค).

โหนด 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)
}

เมื่อคุณลบ ID การติดตั้ง Firebase ด้วยการเรียก API ของเซิร์ฟเวอร์ บริการ Firebase จะเริ่มกระบวนการลบข้อมูลที่เชื่อมโยงกับ ID การติดตั้งนั้น หยุดรับข้อมูลใหม่สำหรับ ID นั้นในช่วง 1-2 วัน จากนั้นจึงแจ้งแอปไคลเอ็นต์ ว่าไอดีถูกลบ จนกว่า Firebase จะแจ้งเตือนแอปไคลเอ็นต์ บริการบางอย่างของแอปอาจยังคงกำหนดเป้าหมายที่ ID เช่น การติดตั้ง Firebase อาจยังคงได้รับการแจ้งเตือน FCM เป็นเวลาสองสามชั่วโมง

หากคุณต้องการลบรหัสการติดตั้ง Firebase ปัจจุบันและใช้บริการ Firebase ด้วยรหัสใหม่ที่ไม่เกี่ยวข้องทันที ให้ใช้ API ของไคลเอนต์เพื่อจัดการการลบ

รับตัวระบุไคลเอนต์

หากคุณมีข้อกำหนดในการระบุการติดตั้งแอปของคุณโดยเฉพาะ คุณสามารถทำได้โดยเรียกรหัสการติดตั้ง Firebase ตัวอย่างเช่น หากต้องการทำการทดสอบระหว่างการพัฒนา Firebase In-App Messaging คุณสามารถระบุและกำหนดเป้าหมายอุปกรณ์ทดสอบที่ถูกต้องโดยใช้ ID การติดตั้ง Firebase

ในการรับ ID การติดตั้ง 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 สำหรับการกำหนดค่าระยะไกล คุณสามารถตรวจสอบอุปกรณ์ทดสอบที่เป็นเป้าหมายได้โดยใช้โทเค็นการตรวจสอบสิทธิ์การติดตั้ง

An installation auth token is a short-lived bearer token in JSON web token (JWT) format containing the following information for an installation:

  • The Firebase installation ID
  • The associated project ( projectNumber )
  • The associated Firebase application ID ( appId )
  • The token's expiration date

An installation auth token cannot be revoked, and remains valid until its expiration date. The default token lifetime is one week.

To retrieve an installation auth token:

Swift

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

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

Monitor the Firebase installation ID lifecycle

During the normal operation of an app, Firebase installation IDs (FIDs) don't require special monitoring. However, apps that explicitly retrieve and use FIDs should add logic to monitor the potential deletion or rotation of the FID. Here are some cases where FIDs could be deleted or rotated:

  • Uninstallation or reinstallation of the app, for instance when an end user installs on a new device.
  • The end user clears the cache of the app or the device.
  • FID deletion is triggered in the backend due to app inactivity (currently the threshold for this is 270 days of inactivity).

When apps experience FID rotation or deletion in these kinds of cases, they are assigned a new FID. Also, the installation auth token associated with a deleted FID is deleted, regardless of its own maturity, and is replaced with a new installation auth token.

Apps can monitor these changes and respond accordingly.

To monitor FID rotation:

Swift

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

An NSNotification named NSNotificationName.InstallationIDDidChange is posted to the default NSNotificationCenter whenever a new FID is assigned.

Android

Kotlin and Java clients should add retry logic to respond on failed calls to retrieve the new FID.

JavaScript

Web apps can subscribe to the onIdChange hook.

Whenever a new FID is created, the subscribed callback is triggered:

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

Dart

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

Migrate from Instance ID to Firebase installations

Prior to the introduction of Firebase installations, Firebase relied on the Instance ID SDK for identifiers of app installs. Firebase installations provides significant advantages over Instance ID in reliability, performance, and security. Firebase apps that depend on the Instance ID SDK should migrate to Firebase installations.

The migration process is different based on your app:

  • Apps that don't directly call Instance ID APIs can migrate by updating their SDK versions . Most Firebase apps fall into this category.

  • Apps that explicitly make API calls to Instance ID must update SDK versions and make code changes to replace Instance ID methods with their Firebase installations or FCM equivalents. If your app uses Instance ID to retrieve FCM registration tokens or explicitly uses Instance ID to target app instances or for any other purpose, you'll need to update your application code.

Currently, FIS is backward-compatible with the legacy identifier Firebase Instance ID. Deleting an IID is an alternative method of requesting data deletion with these Firebase SDKs:

  • iOS 6.14.0 and lower
  • Android SDKs earlier than February 27, 2020

This means that apps are not required to migrate to Firebase installations; however, doing so is highly recommended.

Upgrading to minimum SDK versions for Firebase installations

To migrate from Instance ID to Firebase installations, make sure that your applications use at least the listed minimum version numbers of the following Firebase SDKs:

Firebase SDK Minimum Android version Minimum iOS version
Firebase Cloud Messaging v20.3.0 v6.34.0
การกำหนดค่าระยะไกล v19.2.0 v6.24.0
Google Analytics for Firebase \ (Measurement SDK) v17.4.4 v6.18.0
การส่งข้อความในแอป v19.0.7 v6.24.0
การตรวจสอบประสิทธิภาพ v19.0.8 v6.21.0
แครชไลติค v17.2.1 v6.23.0
ML Kit v22.1.2 v6.28.0

Updating code that explicitly calls Instance ID APIs

If your Android or Apple app directly uses Instance ID SDK methods, you can replace that usage with identical alternatives in the Firebase installations SDK or the FCM SDK.

Retrieving an identifier

Methods to get Instance IDs are replaced with methods to get an installations ID. For example:

Before

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

After

Swift

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

Deleting an identifier

Methods to delete Instance IDs are replaced with methods to delete Firebase installation IDs. For example:

Before

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

After

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

Retrieving an FCM registration token

Prior to the introduction of Firebase Installations, FCM clients retrieved registration tokens from Instance ID. Now, the FCM SDK provides methods to retrieve the registration token.

Before

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

After

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