Catch up on everything announced at Firebase Summit, and learn how Firebase can help you accelerate app development and run your app with confidence. Learn More

ฟังก์ชั่นการโทรจากแอพของคุณ

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

Cloud Functions สำหรับไคลเอ็นต์ SDK ของ Firebase ให้คุณเรียกใช้ฟังก์ชันต่างๆ ได้โดยตรงจากแอป Firebase หากต้องการเรียกฟังก์ชันจากแอปของคุณด้วยวิธีนี้ ให้เขียนและปรับใช้ฟังก์ชัน HTTPS Callable ใน Cloud Functions แล้วเพิ่มไคลเอนต์ลอจิกเพื่อเรียกฟังก์ชันจากแอปของคุณ

โปรดทราบว่าฟังก์ชันที่เรียกใช้ HTTPS นั้นคล้ายกันแต่ ไม่เหมือนกันกับ ฟังก์ชัน HTTP หากต้องการใช้ฟังก์ชัน HTTPS ที่เรียกได้ คุณต้องใช้ไคลเอ็นต์ SDK สำหรับแพลตฟอร์มของคุณร่วมกับ functions.https backend API (หรือใช้โปรโตคอล) Callables มีความแตกต่างที่สำคัญเหล่านี้จากฟังก์ชัน HTTP:

  • เมื่อเรียกใช้ได้ โทเค็น Firebase Authentication, โทเค็น FCM และโทเค็น App Check จะรวมอยู่ในคำขอโดยอัตโนมัติ (ถ้ามี)
  • ทริกเกอร์ functions.https.onCall จะยกเลิกการซีเรียลไลซ์เนื้อหาคำขอโดยอัตโนมัติและตรวจสอบโทเค็นการรับรองความถูกต้อง

Firebase SDK สำหรับ Cloud Functions v0.9.1 และสูงกว่าทำงานร่วมกับเวอร์ชันขั้นต่ำของไคลเอ็นต์ Firebase SDK เหล่านี้เพื่อรองรับฟังก์ชัน HTTPS Callable:

  • Firebase SDK สำหรับแพลตฟอร์ม Apple 10.2.0
  • Firebase SDK สำหรับ Android 20.2.1
  • Firebase JavaScript SDK 8.10.1
  • Firebase Modular Web SDK v. 9.0

หากคุณต้องการเพิ่มฟังก์ชันที่คล้ายคลึงกันให้กับแอปที่สร้างขึ้นบนแพลตฟอร์มที่ไม่รองรับ โปรดดู ข้อมูลจำเพาะของโปรโตคอลสำหรับ https.onCall ส่วนที่เหลือของคู่มือนี้จะให้คำแนะนำเกี่ยวกับวิธีเขียน ปรับใช้ และเรียกฟังก์ชัน HTTPS ที่เรียกได้สำหรับแพลตฟอร์ม Apple, Android, เว็บ, C++ และ Unity

เขียนและปรับใช้ฟังก์ชันที่เรียกได้

ใช้ functions.https.onCall เพื่อสร้าง HTTPS callable function วิธีนี้ใช้สองพารามิเตอร์: data และ context ทางเลือก :

// Saves a message to the Firebase Realtime Database but sanitizes the text by removing swearwords.
exports.addMessage = functions.https.onCall((data, context) => {
  // ...
});

สำหรับฟังก์ชันที่เรียกใช้ได้ซึ่งบันทึกข้อความไปยังฐานข้อมูลเรียลไทม์ ตัวอย่างเช่น data อาจมีข้อความ ในขณะที่พารามิเตอร์ context แสดงถึงข้อมูลการตรวจสอบสิทธิ์ของผู้ใช้:

// Message text passed from the client.
const text = data.text;
// Authentication / user information is automatically added to the request.
const uid = context.auth.uid;
const name = context.auth.token.name || null;
const picture = context.auth.token.picture || null;
const email = context.auth.token.email || null;

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

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

ส่งผลกลับมา

หากต้องการส่งข้อมูลกลับไปยังไคลเอ็นต์ ให้ส่งคืนข้อมูลที่สามารถเข้ารหัส JSON ได้ ตัวอย่างเช่น หากต้องการส่งคืนผลลัพธ์ของการดำเนินการเพิ่มเติม:

// returning result.
return {
  firstNumber: firstNumber,
  secondNumber: secondNumber,
  operator: '+',
  operationResult: firstNumber + secondNumber,
};

หากต้องการส่งคืนข้อมูลหลังจากการดำเนินการแบบอะซิงโครนัส ให้ส่งคืนสัญญา ข้อมูลที่ส่งคืนโดยสัญญาจะถูกส่งกลับไปยังลูกค้า ตัวอย่างเช่น คุณสามารถส่งคืนข้อความที่ผ่านการฆ่าเชื้อแล้วที่ฟังก์ชันที่เรียกได้เขียนไปยังฐานข้อมูลเรียลไทม์:

// Saving the new message to the Realtime Database.
const sanitizedMessage = sanitizer.sanitizeText(text); // Sanitize the message.
return admin.database().ref('/messages').push({
  text: sanitizedMessage,
  author: { uid, name, picture, email },
}).then(() => {
  console.log('New Message written');
  // Returning the sanitized message to the client.
  return { text: sanitizedMessage };
})

จัดการกับข้อผิดพลาด

เพื่อให้แน่ใจว่าไคลเอนต์ได้รับรายละเอียดข้อผิดพลาดที่เป็นประโยชน์ ให้ส่งคืนข้อผิดพลาดจากการโทรได้โดยการโยน (หรือส่งคืน Promise ที่ถูกปฏิเสธด้วย) อินสแตนซ์ของ functions.https.HttpsError ข้อผิดพลาดมีแอตทริบิวต์ code ที่สามารถเป็นหนึ่งในค่าที่แสดงรายการที่ functions.https.HttpsError ข้อผิดพลาดยังมี message สตริง ซึ่งเริ่มต้นเป็นสตริงว่าง นอกจากนี้ยังสามารถมีฟิลด์ details ที่ไม่บังคับซึ่งมีค่าตามอำเภอใจ หากมีข้อผิดพลาดอื่นที่ไม่ใช่ HttpsError เกิดขึ้นจากฟังก์ชันของคุณ ไคลเอนต์ของคุณจะได้รับข้อผิดพลาดที่มีข้อความ INTERNAL และรหัส internal แทน

ตัวอย่างเช่น ฟังก์ชันอาจส่งข้อผิดพลาดการตรวจสอบข้อมูลและการตรวจสอบสิทธิ์พร้อมข้อความแสดงข้อผิดพลาดเพื่อส่งกลับไปยังไคลเอ็นต์ที่เรียก:

// Checking attribute.
if (!(typeof text === 'string') || text.length === 0) {
  // Throwing an HttpsError so that the client gets the error details.
  throw new functions.https.HttpsError('invalid-argument', 'The function must be called with ' +
      'one arguments "text" containing the message text to add.');
}
// Checking that the user is authenticated.
if (!context.auth) {
  // Throwing an HttpsError so that the client gets the error details.
  throw new functions.https.HttpsError('failed-precondition', 'The function must be called ' +
      'while authenticated.');
}

ปรับใช้ฟังก์ชันที่เรียกได้

หลังจากที่คุณบันทึกฟังก์ชันที่เรียกใช้ได้เสร็จสมบูรณ์แล้วภายใน index.js ฟังก์ชันนั้นจะถูกปรับใช้พร้อมกับฟังก์ชันอื่นๆ ทั้งหมดเมื่อคุณเรียกใช้การ firebase deploy หากต้องการปรับใช้เฉพาะที่เรียกได้ ให้ใช้อาร์กิวเมนต์ --only ดังที่แสดงเพื่อดำเนินการ ปรับใช้บางส่วน :

firebase deploy --only functions:addMessage

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

ตั้งค่าสภาพแวดล้อมการพัฒนาลูกค้าของคุณ

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

iOS+

ทำตามคำแนะนำเพื่อ เพิ่ม Firebase ในแอป Apple

ใช้ Swift Package Manager เพื่อติดตั้งและจัดการการอ้างอิง Firebase

  1. ใน Xcode เมื่อโปรเจ็กต์แอปของคุณเปิดอยู่ ให้ไปที่ File > Add Packages
  2. เมื่อได้รับแจ้ง ให้เพิ่มที่เก็บ Firebase Apple platforms SDK:
  3.   https://github.com/firebase/firebase-ios-sdk
  4. เลือกไลบรารี Cloud Functions
  5. เมื่อเสร็จแล้ว Xcode จะเริ่มแก้ไขและดาวน์โหลดการอ้างอิงของคุณโดยอัตโนมัติในเบื้องหลัง

Web version 9

  1. ทำตามคำแนะนำเพื่อ เพิ่ม Firebase ในเว็บแอป ของคุณ ตรวจสอบให้แน่ใจว่าได้รันคำสั่งต่อไปนี้จากเทอร์มินัลของคุณ:
    npm install firebase@9.14.0 --save
    
  2. ต้องการทั้ง Firebase core และ Cloud Functions ด้วยตนเอง:

     import { initializeApp } from 'firebase/app';
     import { getFunctions } from 'firebase/functions';
    
     const app = initializeApp({
         projectId: '### CLOUD FUNCTIONS PROJECT ID ###',
         apiKey: '### FIREBASE API KEY ###',
         authDomain: '### FIREBASE AUTH DOMAIN ###',
       });
     const functions = getFunctions(app);
    

Web version 8

  1. ทำตามคำแนะนำเพื่อ เพิ่ม Firebase ในเว็บแอป ของคุณ
  2. เพิ่มไลบรารีไคลเอนต์แกน Firebase และ Cloud Functions ลงในแอปของคุณ:
    <script src="https://www.gstatic.com/firebasejs/8.10.1/firebase.js"></script>
    <script src="https://www.gstatic.com/firebasejs/8.10.1/firebase-functions.js"></script>
    

Cloud Functions SDK มีให้บริการในรูปแบบแพ็คเกจ npm

  1. เรียกใช้คำสั่งต่อไปนี้จากเทอร์มินัลของคุณ:
    npm install firebase@8.10.1 --save
    
  2. ต้องการทั้งแกน Firebase และ Cloud Functions ด้วยตนเอง:
    const firebase = require("firebase");
    // Required for side-effects
    require("firebase/functions");
    

Java

  1. ทำตามคำแนะนำเพื่อ เพิ่ม Firebase ในแอป Android

  2. ใน ไฟล์ Gradle ของโมดูล (ระดับแอป) (โดยปกติคือ <project>/<app-module>/build.gradle ) ให้เพิ่มการพึ่งพาสำหรับไลบรารี Cloud Functions Android ขอแนะนำให้ใช้ Firebase Android BoM เพื่อควบคุมการกำหนดเวอร์ชันของไลบรารี

    dependencies {
        // Import the BoM for the Firebase platform
        implementation platform('com.google.firebase:firebase-bom:31.1.0')
    
        // Add the dependency for the Cloud Functions library
        // When using the BoM, you don't specify versions in Firebase library dependencies
        implementation 'com.google.firebase:firebase-functions'
    }
    

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

    (ทางเลือก) เพิ่มการอ้างอิงไลบรารี Firebase โดยไม่ ใช้ BoM

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

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

    dependencies {
        // Add the dependency for the Cloud Functions library
        // When NOT using the BoM, you must specify versions in Firebase library dependencies
        implementation 'com.google.firebase:firebase-functions:20.2.1'
    }
    

Kotlin+KTX

  1. ทำตามคำแนะนำเพื่อ เพิ่ม Firebase ในแอป Android

  2. ใน ไฟล์ Gradle ของโมดูล (ระดับแอป) (โดยปกติคือ <project>/<app-module>/build.gradle ) ให้เพิ่มการพึ่งพาสำหรับไลบรารี Cloud Functions Android ขอแนะนำให้ใช้ Firebase Android BoM เพื่อควบคุมการกำหนดเวอร์ชันของไลบรารี

    dependencies {
        // Import the BoM for the Firebase platform
        implementation platform('com.google.firebase:firebase-bom:31.1.0')
    
        // Add the dependency for the Cloud Functions library
        // When using the BoM, you don't specify versions in Firebase library dependencies
        implementation 'com.google.firebase:firebase-functions-ktx'
    }
    

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

    (ทางเลือก) เพิ่มการอ้างอิงไลบรารี Firebase โดยไม่ ใช้ BoM

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

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

    dependencies {
        // Add the dependency for the Cloud Functions library
        // When NOT using the BoM, you must specify versions in Firebase library dependencies
        implementation 'com.google.firebase:firebase-functions-ktx:20.2.1'
    }
    

Dart

  1. ทำตามคำแนะนำเพื่อ เพิ่ม Firebase ในแอพ Flutter ของคุณ

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

    flutter pub add cloud_functions
    
  3. เมื่อเสร็จแล้ว ให้สร้างแอปพลิเคชัน Flutter ของคุณใหม่:

    flutter run
    
  4. เมื่อติดตั้งแล้ว คุณสามารถเข้าถึงปลั๊กอิน cloud_functions ได้โดยการนำเข้าในรหัส Dart ของคุณ:

    import 'package:cloud_functions/cloud_functions.dart';
    

ภาษาซี++

สำหรับ C++ กับ Android :

  1. ทำตามคำแนะนำเพื่อ เพิ่ม Firebase ในโครงการ C++ ของ คุณ
  2. เพิ่มไลบรารี firebase_functions ลงในไฟล์ CMakeLists.txt ของคุณ

สำหรับ C++ กับแพลตฟอร์ม Apple :

  1. ทำตามคำแนะนำเพื่อ เพิ่ม Firebase ในโครงการ C++ ของ คุณ
  2. เพิ่มพ็อด Cloud Functions ไปยัง Podfile ของคุณ :
    pod 'Firebase/Functions'
  3. บันทึกไฟล์ จากนั้นเรียกใช้:
    pod install
  4. เพิ่มเฟรมเวิร์กหลัก Firebase และ Cloud Function จาก Firebase C++ SDK ไปยังโปรเจ็กต์ Xcode ของคุณ
    • firebase.framework
    • firebase_functions.framework

ความสามัคคี

  1. ทำตามคำแนะนำเพื่อ เพิ่ม Firebase ในโครงการ Unity ของคุณ
  2. เพิ่ม FirebaseFunctions.unitypackage จาก Firebase Unity SDK ไปยังโปรเจ็กต์ Unity ของคุณ

เริ่มต้นไคลเอนต์ SDK

เริ่มต้นอินสแตนซ์ของ Cloud Functions:

สวิฟต์

lazy var functions = Functions.functions()

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

@property(strong, nonatomic) FIRFunctions *functions;
// ...
self.functions = [FIRFunctions functions];

Web version 8

firebase.initializeApp({
  apiKey: '### FIREBASE API KEY ###',
  authDomain: '### FIREBASE AUTH DOMAIN ###',
  projectId: '### CLOUD FUNCTIONS PROJECT ID ###'
  databaseURL: 'https://### YOUR DATABASE NAME ###.firebaseio.com',
});

// Initialize Cloud Functions through Firebase
var functions = firebase.functions();

Web version 9

const app = initializeApp({
  projectId: '### CLOUD FUNCTIONS PROJECT ID ###',
  apiKey: '### FIREBASE API KEY ###',
  authDomain: '### FIREBASE AUTH DOMAIN ###',
});
const functions = getFunctions(app);

Java

private FirebaseFunctions mFunctions;
// ...
mFunctions = FirebaseFunctions.getInstance();

Kotlin+KTX

private lateinit var functions: FirebaseFunctions
// ...
functions = Firebase.functions

Dart

final functions = FirebaseFunctions.instance;

ภาษาซี++

firebase::functions::Functions* functions;
// ...
functions = firebase::functions::Functions::GetInstance(app);

ความสามัคคี

functions = Firebase.Functions.DefaultInstance;

เรียกใช้ฟังก์ชัน

สวิฟต์

functions.httpsCallable("addMessage").call(["text": inputField.text]) { result, error in
  if let error = error as NSError? {
    if error.domain == FunctionsErrorDomain {
      let code = FunctionsErrorCode(rawValue: error.code)
      let message = error.localizedDescription
      let details = error.userInfo[FunctionsErrorDetailsKey]
    }
    // ...
  }
  if let data = result?.data as? [String: Any], let text = data["text"] as? String {
    self.resultField.text = text
  }
}

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

[[_functions HTTPSCallableWithName:@"addMessage"] callWithObject:@{@"text": _inputField.text}
                                                      completion:^(FIRHTTPSCallableResult * _Nullable result, NSError * _Nullable error) {
  if (error) {
    if ([error.domain isEqual:@"com.firebase.functions"]) {
      FIRFunctionsErrorCode code = error.code;
      NSString *message = error.localizedDescription;
      NSObject *details = error.userInfo[@"details"];
    }
    // ...
  }
  self->_resultField.text = result.data[@"text"];
}];

Web version 8

var addMessage = firebase.functions().httpsCallable('addMessage');
addMessage({ text: messageText })
  .then((result) => {
    // Read result of the Cloud Function.
    var sanitizedMessage = result.data.text;
  });

Web version 9

import { getFunctions, httpsCallable } from "firebase/functions";

const functions = getFunctions();
const addMessage = httpsCallable(functions, 'addMessage');
addMessage({ text: messageText })
  .then((result) => {
    // Read result of the Cloud Function.
    /** @type {any} */
    const data = result.data;
    const sanitizedMessage = data.text;
  });

Java

private Task<String> addMessage(String text) {
    // Create the arguments to the callable function.
    Map<String, Object> data = new HashMap<>();
    data.put("text", text);
    data.put("push", true);

    return mFunctions
            .getHttpsCallable("addMessage")
            .call(data)
            .continueWith(new Continuation<HttpsCallableResult, String>() {
                @Override
                public String then(@NonNull Task<HttpsCallableResult> task) throws Exception {
                    // This continuation runs on either success or failure, but if the task
                    // has failed then getResult() will throw an Exception which will be
                    // propagated down.
                    String result = (String) task.getResult().getData();
                    return result;
                }
            });
}

Kotlin+KTX

private fun addMessage(text: String): Task<String> {
    // Create the arguments to the callable function.
    val data = hashMapOf(
        "text" to text,
        "push" to true
    )

    return functions
        .getHttpsCallable("addMessage")
        .call(data)
        .continueWith { task ->
            // This continuation runs on either success or failure, but if the task
            // has failed then result will throw an Exception which will be
            // propagated down.
            val result = task.result?.data as String
            result
        }
}

Dart

final result =
    await FirebaseFunctions.instance.httpsCallable('addMessage').call();

ภาษาซี++

firebase::Future<firebase::functions::HttpsCallableResult> AddMessage(
    const std::string& text) {
  // Create the arguments to the callable function.
  firebase::Variant data = firebase::Variant::EmptyMap();
  data.map()["text"] = firebase::Variant(text);
  data.map()["push"] = true;

  // Call the function and add a callback for the result.
  firebase::functions::HttpsCallableReference doSomething =
      functions->GetHttpsCallable("addMessage");
  return doSomething.Call(data);
}

ความสามัคคี

private Task<string> addMessage(string text) {
  // Create the arguments to the callable function.
  var data = new Dictionary<string, object>();
  data["text"] = text;
  data["push"] = true;

  // Call the function and extract the operation from the result.
  var function = functions.GetHttpsCallable("addMessage");
  return function.CallAsync(data).ContinueWith((task) => {
    return (string) task.Result.Data;
  });
}

จัดการกับข้อผิดพลาดในไคลเอนต์

ไคลเอนต์ได้รับข้อผิดพลาดหากเซิร์ฟเวอร์แสดงข้อผิดพลาดหรือหากคำสัญญาที่เป็นผลลัพธ์ถูกปฏิเสธ

หากข้อผิดพลาดที่ส่งคืนโดยฟังก์ชันเป็นประเภท function.https.HttpsError ไคลเอ็นต์จะได้รับ code ข้อผิดพลาด message และ details จากข้อผิดพลาดของเซิร์ฟเวอร์ มิฉะนั้น ข้อผิดพลาดจะมีข้อความ INTERNAL และรหัส INTERNAL ดูคำแนะนำสำหรับวิธี จัดการกับข้อผิดพลาด ในฟังก์ชันที่เรียกได้

สวิฟต์

if let error = error as NSError? {
  if error.domain == FunctionsErrorDomain {
    let code = FunctionsErrorCode(rawValue: error.code)
    let message = error.localizedDescription
    let details = error.userInfo[FunctionsErrorDetailsKey]
  }
  // ...
}

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

if (error) {
  if ([error.domain isEqual:@"com.firebase.functions"]) {
    FIRFunctionsErrorCode code = error.code;
    NSString *message = error.localizedDescription;
    NSObject *details = error.userInfo[@"details"];
  }
  // ...
}

Web version 8

var addMessage = firebase.functions().httpsCallable('addMessage');
addMessage({ text: messageText })
  .then((result) => {
    // Read result of the Cloud Function.
    var sanitizedMessage = result.data.text;
  })
  .catch((error) => {
    // Getting the Error details.
    var code = error.code;
    var message = error.message;
    var details = error.details;
    // ...
  });

Web version 9

import { getFunctions, httpsCallable } from "firebase/functions";

const functions = getFunctions();
const addMessage = httpsCallable(functions, 'addMessage');
addMessage({ text: messageText })
  .then((result) => {
    // Read result of the Cloud Function.
    /** @type {any} */
    const data = result.data;
    const sanitizedMessage = data.text;
  })
  .catch((error) => {
    // Getting the Error details.
    const code = error.code;
    const message = error.message;
    const details = error.details;
    // ...
  });

Java

addMessage(inputMessage)
        .addOnCompleteListener(new OnCompleteListener<String>() {
            @Override
            public void onComplete(@NonNull Task<String> task) {
                if (!task.isSuccessful()) {
                    Exception e = task.getException();
                    if (e instanceof FirebaseFunctionsException) {
                        FirebaseFunctionsException ffe = (FirebaseFunctionsException) e;
                        FirebaseFunctionsException.Code code = ffe.getCode();
                        Object details = ffe.getDetails();
                    }
                }
            }
        });

Kotlin+KTX

addMessage(inputMessage)
    .addOnCompleteListener { task ->
        if (!task.isSuccessful) {
            val e = task.exception
            if (e is FirebaseFunctionsException) {
                val code = e.code
                val details = e.details
            }
        }
    }

Dart

try {
  final result =
      await FirebaseFunctions.instance.httpsCallable('addMessage').call();
} on FirebaseFunctionsException catch (error) {
  print(error.code);
  print(error.details);
  print(error.message);
}

ภาษาซี++

void OnAddMessageCallback(
    const firebase::Future<firebase::functions::HttpsCallableResult>& future) {
  if (future.error() != firebase::functions::kErrorNone) {
    // Function error code, will be kErrorInternal if the failure was not
    // handled properly in the function call.
    auto code = static_cast<firebase::functions::Error>(future.error());

    // Display the error in the UI.
    DisplayError(code, future.error_message());
    return;
  }

  const firebase::functions::HttpsCallableResult* result = future.result();
  firebase::Variant data = result->data();
  // This will assert if the result returned from the function wasn't a string.
  std::string message = data.string_value();
  // Display the result in the UI.
  DisplayResult(message);
}

// ...

// ...
  auto future = AddMessage(message);
  future.OnCompletion(OnAddMessageCallback);
  // ...

ความสามัคคี

 addMessage(text).ContinueWith((task) => {
  if (task.IsFaulted) {
    foreach (var inner in task.Exception.InnerExceptions) {
      if (inner is FunctionsException) {
        var e = (FunctionsException) inner;
        // Function error code, will be INTERNAL if the failure
        // was not handled properly in the function call.
        var code = e.ErrorCode;
        var message = e.ErrorMessage;
      }
    }
  } else {
    string result = task.Result;
  }
});

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