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

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

บริการ Firebase ฟังก์ชันการติดตั้ง Firebase
Firebase Cloud Messaging

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 ลงในแอป

iOS ขึ้นไป

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

    SwiftUI

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

    Swift

    import FirebaseCore
    import FirebaseFirestore
    import FirebaseAuth
    // ...
          

    Objective-C

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

    SwiftUI

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

    Swift

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

    Objective-C

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

    SwiftUI

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

Android

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

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

JavaScript

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

เช่น หากเพิ่มทรัพยากร Dependency ในindex.html ให้เพิ่มทรัพยากร Dependency ในองค์ประกอบ <head> ดังนี้

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

Flutter

  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 จะสร้างรหัสใหม่ภายใน 2-3 วัน เว้นแต่คุณจะปิดใช้บริการสร้าง FID ทั้งหมดในแอปของคุณ Firebase จะพิจารณารหัสที่สร้างใหม่เป็นการติดตั้ง Firebase ใหม่ และจะไม่เชื่อมโยงรหัสนั้นกับรหัสหรือข้อมูลก่อนหน้าแต่อย่างใด

ลบ FID ที่มีการเรียก API ของไคลเอ็นต์

หากต้องการลบ FID ที่บริการ Firebase สร้างขึ้น ให้เรียกใช้เมธอดที่เหมาะสมจาก SDK การติดตั้ง Firebase ต่อไปนี้

Swift

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

Objective-C

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

Java

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

Kotlin+KTX

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

JavaScript

await firebase.installations().delete();

Dart

await FirebaseInstallations.instance.delete();

ลบ FID ที่มีการเรียก API ของเซิร์ฟเวอร์

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

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

Node.js

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

admin.installations().deleteInstallation(idToDelete);

Java

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

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

Python

  from firebase_admin import instance_id

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

  instance_id.delete_instance_id(id_to_delete)

Go

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 ต่อไปเป็นเวลา 2-3 ชั่วโมง

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

ดึงข้อมูลตัวระบุลูกค้า

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

วิธีเรียกข้อมูลรหัสการติดตั้ง Firebase

Swift

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

Objective-C

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

Java

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

Kotlin+KTX

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

JavaScript

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

Dart

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

เรียกโทเค็นการตรวจสอบสิทธิ์การติดตั้ง

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

โทเค็นการตรวจสอบสิทธิ์การติดตั้งเป็นโทเค็นสำหรับผู้ถือที่มีอายุสั้นในรูปแบบโทเค็นเว็บ JSON (JWT) ซึ่งมีข้อมูลต่อไปนี้สำหรับการติดตั้ง

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

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

ในการเรียกโทเค็นการตรวจสอบสิทธิ์การติดตั้ง:

Swift

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

Objective-C

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

Java

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

Kotlin+KTX

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

JavaScript

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

Dart

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

ตรวจสอบวงจรการใช้งานรหัสการติดตั้ง Firebase

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

  • การถอนการติดตั้งหรือการติดตั้งแอปอีกครั้ง เช่น เมื่อผู้ใช้ปลายทางติดตั้งในอุปกรณ์เครื่องใหม่
  • ผู้ใช้ปลายทางจะล้างแคชของแอปหรืออุปกรณ์
  • การลบ FID จะมีการเรียกใช้ในแบ็กเอนด์เนื่องจากไม่มีการใช้งานแอป (ปัจจุบันเกณฑ์สําหรับกรณีนี้คือ 270 วันของการไม่ใช้งาน)

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

แอปต่างๆ จะสามารถตรวจสอบการเปลี่ยนแปลงเหล่านี้และตอบสนองตามนั้นได้

วิธีตรวจสอบการหมุนเวียน FID

Swift

installationIDObserver = NotificationCenter.default.addObserver(
        forName: .InstallationIDDidChange,
        object: nil,
        queue: nil
) { (notification) in
  // Fetch new Installation ID
  Task {
    await self.fetchInstallationToken()
  }
}

Objective-C

__weak __auto_type weakSelf = self;
self.installationIDObserver = [[NSNotificationCenter defaultCenter]
        addObserverForName: FIRInstallationIDDidChangeNotification
                    object:nil
                     queue:nil
                usingBlock:^(NSNotification * _Nonnull notification) {
    // Fetch new Installation ID
    [weakSelf fetchInstallationsID];
}];

NSNotification ชื่อ NSNotificationName.InstallationIDDidChange จะโพสต์ไปยัง NSNotificationCenter เริ่มต้นเมื่อใดก็ตามที่มีการกำหนด FID ใหม่

Android

ไคลเอ็นต์ Kotlin และ Java ควรเพิ่มตรรกะการลองใหม่เพื่อตอบสนองการเรียกที่ล้มเหลวเพื่อดึงข้อมูล FID ใหม่

JavaScript

เว็บแอปติดตามฮุก onIdChange ได้

เมื่อใดก็ตามที่มีการสร้าง FID ใหม่ ระบบจะทริกเกอร์ Callback ที่สมัครใช้บริการด้วยดังนี้

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

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

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

  • แอปที่เรียก API ไปยังรหัสอินสแตนซ์อย่างชัดเจนต้องอัปเดตเวอร์ชันของ SDK และ เปลี่ยนแปลงโค้ดเพื่อแทนที่เมธอดรหัสอินสแตนซ์ด้วยการติดตั้ง 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 Cloud Messaging เวอร์ชัน 20.3.0 v6.34.0
การกำหนดค่าระยะไกล เวอร์ชัน 19.2.0 v6.24.0
Google Analytics สำหรับ Firebase \ (Measurement SDK) v17.4.4 เวอร์ชัน 6.18.0
การรับส่งข้อความในแอป v19.0.7 v6.24.0
Performance Monitoring v19.0.8 v6.21.0
Crashlytics v17.2.1 เวอร์ชัน 6.23.0
ML Kit v22.1.2 เวอร์ชัน 6.28.0

การอัปเดตโค้ดที่เรียกใช้ API ของรหัสอินสแตนซ์อย่างชัดเจน

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

การดึงข้อมูลตัวระบุ

ระบบจะใช้เมธอดในการรับรหัสการติดตั้งแทนเมธอดรับรหัสอินสแตนซ์ เช่น

ก่อน

Swift

Messaging.messaging().token { token, error in
  if let error = error {
    print("Error fetching remote FCM registration token: \(error)")
  } else if let token = token {
    print("Remote instance ID token: \(token)")
    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)
        }

หลัง

Swift

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

Objective-C

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

Java

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

Kotlin+KTX

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

การลบตัวระบุ

ระบบจะใช้เมธอดในการลบรหัสการติดตั้ง Firebase แทนเมธอดการลบรหัสอินสแตนซ์ เช่น

ก่อน

Swift

InstanceID.instanceID().deleteID { error in
  if let error = error {
    print("Error deleting instance ID: \(error)")
  }
}

Objective-C

[FIRInstanceID instanceID] deleteIDWithHandler:^(NSError *error) {
  if error != nil {
    NSLog(@"Error deleting instance ID: %@", error);
  }
}];

Android

FirebaseInstanceId.deleteInstanceId();

หลัง

Swift

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

Objective-C

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

Java

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

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

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

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