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

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

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

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

Firebase Crashlytics

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

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

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

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

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

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

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

Firebase ML

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

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

พื้นที่เก็บข้อมูลการแบ่งกลุ่มผู้ใช้ Firebase จะจัดเก็บรหัสการติดตั้ง Firebase รวมถึงแอตทริบิวต์และเซ็กเมนต์ที่เกี่ยวข้องเพื่อมอบข้อมูลการกำหนดเป้าหมายให้กับบริการ Firebase อื่นๆ ที่ใช้งาน

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

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

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

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

ไอโอเอส+

  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 คุณต้องปิดใช้งานการสลับตัวแทนของแอปด้วย สำหรับข้อมูลเพิ่มเติม โปรดดู คำแนะนำ 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.2.0'

จาวาสคริปต์

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

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

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

กระพือปีก

  1. จากไดเร็กทอรีรากของโปรเจ็กต์ Flutter ของคุณ ให้รันคำสั่งต่อไปนี้เพื่อติดตั้งปลั๊กอินการติดตั้ง Firebase:

    flutter pub add firebase_app_installations
    
  2. สร้างโครงการของคุณใหม่:

    flutter run
    
  3. นำเข้าปลั๊กอินการติดตั้ง Firebase:

    import 'package:firebase_app_installations/firebase_app_installations.dart';
    

ลบการติดตั้ง Firebase

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

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

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

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

ลบ FID ด้วยการเรียก API ของไคลเอ็นต์

หากต้องการลบ FID ที่สร้างโดยบริการ Firebase ให้เรียกใช้วิธีการที่เหมาะสมจาก SDK การติดตั้ง Firebase:

สวิฟท์

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

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

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

Java

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

Kotlin+KTX

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

จาวาสคริปต์

await firebase.installations().delete();

Dart

await FirebaseInstallations.instance.delete();

ลบ FID ด้วยการเรียก API ของเซิร์ฟเวอร์

หากต้องการลบ FID ด้วยการเรียก API ของเซิร์ฟเวอร์ ให้เพิ่ม Firebase Admin SDK ลงในเซิร์ฟเวอร์ของคุณ หากคุณยังไม่ได้ดำเนินการ

เมื่อเพิ่ม SDK แล้ว ให้ลบ FID ผ่านการเรียกไปยังฟังก์ชันการลบในภาษาที่คุณเลือก (หมายเหตุ: ยกเว้น Node.js เมธอดเหล่านี้สะท้อนถึงการตั้งชื่อ Instance ID อย่างไรก็ตาม วิธีการเหล่านี้ทั้งหมดจะลบ FID เมื่อเรียกใช้ด้วย Firebase ปัจจุบันใดๆ SDK)

โหนด js

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

admin.installations().deleteInstallation(idToDelete);

Java

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

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

หลาม

  from firebase_admin import instance_id

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

  instance_id.delete_instance_id(id_to_delete)

ไป

client, err := app.InstanceId(ctx)
if err != nil {
  log.Fatalln("error initializing client", err)
}

iidToDelete := "eyJhbGciOiJFUzI1N_iIs5"
if err := client.DeleteInstanceId(ctx, iidToDelete); err != nil {
  log.Fatalln("error deleting FID", err)
}

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

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

ดึงข้อมูลตัวระบุไคลเอ็นต์

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

หากต้องการดึงรหัสการติดตั้ง Firebase:

สวิฟท์

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

วัตถุประสงค์-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 )
  • วันหมดอายุของโทเค็น

โทเค็นการตรวจสอบสิทธิ์การติดตั้งไม่สามารถเพิกถอนได้ และยังคงใช้ได้จนถึงวันหมดอายุ อายุการใช้งานโทเค็นเริ่มต้นคือหนึ่งสัปดาห์

หากต้องการดึงข้อมูลโทเค็นการตรวจสอบสิทธิ์การติดตั้ง:

สวิฟท์

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

วัตถุประสงค์-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();

ตรวจสอบวงจรการใช้งานรหัสการติดตั้ง 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
  Task {
    await 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');
});

ย้ายจากรหัสอินสแตนซ์ไปยังการติดตั้ง Firebase

ก่อนที่จะมีการเปิดตัวการติดตั้ง Firebase นั้น Firebase อาศัย Instance ID SDK สำหรับตัวระบุการติดตั้งแอป การติดตั้ง Firebase ให้ข้อได้เปรียบที่เหนือกว่า Instance ID ในด้านความน่าเชื่อถือ ประสิทธิภาพ และความปลอดภัย แอป Firebase ที่ต้องใช้ Instance ID SDK ควรย้ายไปยังการติดตั้ง Firebase

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

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

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

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

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

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

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

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

Firebase SDK เวอร์ชัน Android ขั้นต่ำ เวอร์ชัน iOS ขั้นต่ำ
การส่งข้อความบนคลาวด์ของ Firebase เวอร์ชัน 20.3.0 เวอร์ชัน 6.34.0
การกำหนดค่าระยะไกล เวอร์ชัน 19.2.0 เวอร์ชัน 6.24.0
Google Analytics สำหรับ Firebase \ (SDK การวัด) เวอร์ชัน 17.4.4 เวอร์ชัน 6.18.0
การส่งข้อความในแอป เวอร์ชัน 19.0.7 เวอร์ชัน 6.24.0
การตรวจสอบประสิทธิภาพ เวอร์ชัน 19.0.8 เวอร์ชัน 6.21.0
Crashlytics เวอร์ชัน 17.2.1 เวอร์ชัน 6.23.0
เอ็มแอล คิท เวอร์ชัน 22.1.2 เวอร์ชัน 6.28.0

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

หากแอป Android หรือ Apple ของคุณใช้วิธี Instance ID SDK โดยตรง คุณสามารถแทนที่การใช้งานนั้นด้วยวิธีอื่นที่เหมือนกันใน SDK การติดตั้ง Firebase หรือ FCM SDK

กำลังเรียกข้อมูลตัวระบุ

วิธีการรับ ID อินสแตนซ์จะถูกแทนที่ด้วยวิธีการรับ ID การติดตั้ง ตัวอย่างเช่น:

ก่อน

สวิฟท์

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

หลังจาก

สวิฟท์

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

วัตถุประสงค์-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;
  }
}];