আপনার অ্যাপ্লিকেশন থেকে কল ফাংশন

ফায়ারবেস ক্লায়েন্ট এসডিকে -র জন্য ক্লাউড ফাংশনগুলি আপনাকে সরাসরি ফায়ারবেস অ্যাপ থেকে ফাংশন কল করতে দেয়। এইভাবে আপনার অ্যাপ থেকে একটি ফাংশন কল করতে, ক্লাউড ফাংশনে একটি HTTPS কলযোগ্য ফাংশন লিখুন এবং স্থাপন করুন, এবং তারপর আপনার অ্যাপ থেকে ফাংশনটি কল করার জন্য ক্লায়েন্ট লজিক যুক্ত করুন।

এটা তোলে মনে রাখা যে HTTPS দ্বারা callable ফাংশন অনুরূপ কিন্তু HTTP- র অভিন্ন না ফাংশন হয় গুরুত্বপূর্ণ। HTTPS দ্বারা callable ফাংশন ব্যবহার করার জন্য আপনাকে ক্লায়েন্ট SDK এর আপনার প্ল্যাটফর্মে জন্য একসাথে সঙ্গে ব্যবহার করা আবশ্যক functions.https ব্যাকএন্ড API (বা প্রটোকল বাস্তবায়ন)। Callables HTTP ফাংশন থেকে এই মূল পার্থক্য আছে:

  • কলযোগ্য, Firebase প্রমাণীকরণ টোকেন, FCM টোকেন, এবং অ্যাপ চেক টোকেন, যখন উপলব্ধ, স্বয়ংক্রিয়ভাবে অনুরোধ অন্তর্ভুক্ত করা হয়।
  • functions.https.onCall ট্রিগার স্বয়ংক্রিয়ভাবে অনুরোধের মূল deserializes এবং প্রমাণীকরণ টোকেন যাচাই করা হয়েছে।

ক্লাউড ফাংশনগুলির জন্য ফায়ারবেস এসডিকে v0.9.1 এবং উচ্চতর এই ফায়ারবেস ক্লায়েন্ট এসডিকে ন্যূনতম সংস্করণগুলির সাথে HTTPS কলযোগ্য ফাংশন সমর্থন করে:

  • IOS 8.7.0 এর জন্য Firebase SDK
  • Android 20.0.1 এর জন্য Firebase SDK
  • ফায়ারবেস জাভাস্ক্রিপ্ট SDK 8.10.0
  • ফায়ারবেস মডুলার ওয়েব এসডিকে বনাম 9.0

আপনি একটি অসমর্থিত প্ল্যাটফর্মের উপর নির্মিত একটি অ্যাপ্লিকেশন অনুরূপ কার্যকারিতা যোগ করতে চান তাহলে, দেখতে জন্য প্রোটোকল স্পেসিফিকেশন https.onCall । আইওএস, অ্যান্ড্রয়েড, ওয়েব, সি ++ এবং ইউনিটির জন্য একটি HTTPS কলযোগ্য ফাংশন কীভাবে লিখতে, স্থাপন করতে এবং কল করতে হয় সে সম্পর্কে এই নির্দেশিকাটির বাকি নির্দেশাবলী প্রদান করে।

কলযোগ্য ফাংশন লিখুন এবং স্থাপন করুন

ব্যবহারের functions.https.onCall একটি HTTPS দ্বারা callable ফাংশন তৈরি করুন। এই পদ্ধতি দুটি প্যারামিটার নেয় data , এবং ঐচ্ছিক context :

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

একটি callable ফাংশন যা রিয়েলটাইম ডাটাবেস এ একটি পাঠ্য বার্তা সংরক্ষণ জন্য, উদাহরণস্বরূপ, 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;

কলযোগ্য ফাংশনের অবস্থান এবং কলিং ক্লায়েন্টের অবস্থানের মধ্যে দূরত্ব নেটওয়ার্ক বিলম্ব তৈরি করতে পারে। অপ্টিমাইজ কর্মক্ষমতা করার জন্য, নির্দিষ্ট বিবেচনা ফাংশন অবস্থান যেখানে প্রযোজ্য, এবং যখন আপনি অবস্থান সেট দিয়ে callable এর অবস্থান সারিবদ্ধ নিশ্চিত SDK এর আরম্ভ ক্লায়েন্ট সাইড উপর।

Allyচ্ছিকভাবে, আপনি আপনার ব্যাকএন্ড রিসোর্সগুলিকে অপব্যবহার থেকে রক্ষা করতে সাহায্য করার জন্য একটি অ্যাপ চেক সত্যায়ন সংযুক্ত করতে পারেন, যেমন বিলিং জালিয়াতি বা ফিশিং। দেখুন অ্যাপ মেঘ কার্যাবলী বলবৎকরণের চেক সক্ষম করুন

ফলাফল ফেরত পাঠানো হচ্ছে

ক্লায়েন্টের কাছে ডেটা ফেরত পাঠাতে, 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 };
})

ত্রুটিগুলি পরিচালনা করুন

ক্লায়েন্ট নিক্ষেপ (অথবা ফেরার প্রতিশ্রুতি দিয়ে বাতিল) র একটি দৃষ্টান্ত দরকারী ত্রুটির বিশদ বিবরণ, একটি callable থেকে ফেরত ত্রুটি পায় তা নিশ্চিত করার জন্য 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.');
}

কলযোগ্য ফাংশন স্থাপন করুন

আপনি মধ্যে একটি সম্পূর্ণ callable ফাংশন সংরক্ষণ করার পরে index.js , এটি অন্যান্য সব ফাংশন যখন আপনি চালাতে সহ মোতায়েন করা হয় firebase deploy । শুধুমাত্র callable স্থাপন করতে, --only যুক্তি হিসাবে পারফর্ম দেখানো আংশিক স্থাপন :

$ firebase deploy --only functions:addMessage

যখন আপনি ফাংশন মোতায়েন অনুমতি ত্রুটি সম্মুখীন হলে, নিশ্চিত করুন যে উপযুক্ত করতে IAM ভূমিকা স্থাপনার কমান্ড চলমান ব্যবহারকারী হস্তান্তর করা হয়েছে।

আপনার ক্লায়েন্ট বিকাশের পরিবেশ সেট আপ করুন

নিশ্চিত করুন যে আপনি কোনও পূর্বশর্ত পূরণ করেছেন, তারপরে আপনার অ্যাপে প্রয়োজনীয় নির্ভরতা এবং ক্লায়েন্ট লাইব্রেরি যুক্ত করুন।

আইওএস

  1. নির্দেশাবলী অনুসরণ করুন আপনার iOS অ্যাপ্লিকেশন Firebase যোগ
  2. আপনার মেঘ কার্যাবলী শুঁটি যোগ Podfile :
    pod 'Firebase/Functions'
  3. ফাইলটি সংরক্ষণ করুন, তারপর সঞ্চালন করুন:
    pod install

ওয়েব সংস্করণ 9

  1. নির্দেশাবলী অনুসরণ করুন আপনার ওয়েব অ্যাপ্লিকেশনে Firebase যোগ । : আপনার টার্মিনাল থেকে নিম্নোক্ত কমান্ডটি প্রয়োগ নিশ্চিত করুন
    npm install firebase@9.1.0 --save
    
  2. ম্যানুয়ালি উভয় Firebase কোর এবং ক্লাউড ফাংশন প্রয়োজন:

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

ওয়েব সংস্করণ 8

  1. নির্দেশাবলী অনুসরণ করুন আপনার ওয়েব অ্যাপ্লিকেশনে Firebase যোগ
  2. Firebase কোর এবং ক্লাউড কার্যাবলী ক্লায়েন্ট লাইব্রেরী আপনার অ্যাপ্লিকেশানে যোগ করুন
    <script src="https://www.gstatic.com/firebasejs/8.10.0/firebase.js"></script>
    <script src="https://www.gstatic.com/firebasejs/8.10.0/firebase-functions.js"></script>
    

ক্লাউড ফাংশন এসডিকে একটি এনপিএম প্যাকেজ হিসাবেও উপলব্ধ।

  1. : আপনার টার্মিনাল থেকে নিম্নোক্ত কমান্ড সঞ্চালন করুন
    npm install firebase@8.10.0 --save
    
  2. ম্যানুয়ালি উভয় Firebase কোর এবং ক্লাউড কার্যাবলী প্রয়োজন:
    const firebase = require("firebase");
    // Required for side-effects
    require("firebase/functions");
    

জাভা

  1. নির্দেশাবলী অনুসরণ করুন আপনার অ্যান্ড্রয়েড অ্যাপে Firebase যোগ

  2. ব্যবহার Firebase অ্যান্ড্রয়েড Bom , আপনার মডিউল (অ্যাপ্লিকেশান-স্তর) Gradle ফাইল (সাধারণত ক্লাউড কার্যাবলী অ্যান্ড্রয়েড লাইব্রেরির জন্য নির্ভরতা ঘোষণা app/build.gradle )।

    dependencies {
        // Import the BoM for the Firebase platform
        implementation platform('com.google.firebase:firebase-bom:28.4.1')
    
        // Declare 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 অ্যান্ড্রয়েড Bom , আপনার অ্যাপ্লিকেশন সবসময় Firebase অ্যান্ড্রয়েড লাইব্রেরি সামঞ্জস্যপূর্ণ সংস্করণ ব্যবহার করবে।

    (বিকল্প) Bom ব্যবহার না করেই Firebase গ্রন্থাগার নির্ভরতা ঘোষণা

    আপনি যদি Firebase BoM ব্যবহার না করার সিদ্ধান্ত নেন, তাহলে আপনাকে অবশ্যই প্রতিটি Firebase লাইব্রেরির সংস্করণ তার নির্ভরতা লাইনে নির্দিষ্ট করতে হবে।

    মনে রাখবেন যদি আপনি আপনার অ্যাপ্লিকেশন একাধিক Firebase লাইব্রেরি ব্যবহার করেন তখন আমরা অত্যন্ত গ্রন্থাগার সংস্করণ, যা নিশ্চিত করে যে সমস্ত সংস্করণের সামঞ্জস্যপূর্ণ পরিচালনা করতে Bom ব্যবহার সুপারিশ।

    dependencies {
        // Declare 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.0.1'
    }
    

কোটলিন+কেটিএক্স

  1. নির্দেশাবলী অনুসরণ করুন আপনার অ্যান্ড্রয়েড অ্যাপে Firebase যোগ

  2. ব্যবহার Firebase অ্যান্ড্রয়েড Bom , আপনার মডিউল (অ্যাপ্লিকেশান-স্তর) Gradle ফাইল (সাধারণত ক্লাউড কার্যাবলী অ্যান্ড্রয়েড লাইব্রেরির জন্য নির্ভরতা ঘোষণা app/build.gradle )।

    dependencies {
        // Import the BoM for the Firebase platform
        implementation platform('com.google.firebase:firebase-bom:28.4.1')
    
        // Declare 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 অ্যান্ড্রয়েড Bom , আপনার অ্যাপ্লিকেশন সবসময় Firebase অ্যান্ড্রয়েড লাইব্রেরি সামঞ্জস্যপূর্ণ সংস্করণ ব্যবহার করবে।

    (বিকল্প) Bom ব্যবহার না করেই Firebase গ্রন্থাগার নির্ভরতা ঘোষণা

    আপনি যদি Firebase BoM ব্যবহার না করার সিদ্ধান্ত নেন, তাহলে আপনাকে অবশ্যই প্রতিটি Firebase লাইব্রেরির সংস্করণ তার নির্ভরতা লাইনে নির্দিষ্ট করতে হবে।

    মনে রাখবেন যদি আপনি আপনার অ্যাপ্লিকেশন একাধিক Firebase লাইব্রেরি ব্যবহার করেন তখন আমরা অত্যন্ত গ্রন্থাগার সংস্করণ, যা নিশ্চিত করে যে সমস্ত সংস্করণের সামঞ্জস্যপূর্ণ পরিচালনা করতে Bom ব্যবহার সুপারিশ।

    dependencies {
        // Declare 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.0.1'
    }
    

সি ++

সি ++ Android এর সঙ্গে জন্য:

  1. নির্দেশাবলী অনুসরণ করুন আপনার সি ++ প্রকল্পে Firebase যোগ
  2. যোগ firebase_functions আপনার টু গ্রন্থাগার CMakeLists.txt ফাইল।

সি ++ iOS সঙ্গে জন্য:

  1. নির্দেশাবলী অনুসরণ করুন আপনার সি ++ প্রকল্পে Firebase যোগ
  2. আপনার মেঘ কার্যাবলী শুঁটি যোগ Podfile :
    pod 'Firebase/Functions'
  3. ফাইলটি সংরক্ষণ করুন, তারপর সঞ্চালন করুন:
    pod install
  4. থেকে Firebase কোর এবং ক্লাউড কার্যাবলী অবকাঠামো যোগ Firebase সি ++ SDK এর আপনার Xcode প্রকল্প।
    • firebase.framework
    • firebase_functions.framework

Unক্য

  1. নির্দেশাবলী অনুসরণ করুন আপনার ইউনিটি প্রকল্পে Firebase যোগ
  2. যোগ FirebaseFunctions.unitypackage থেকে Firebase ইউনিটি SDK এর আপনার ইউনিটি প্রকল্পে।

ক্লায়েন্ট SDK আরম্ভ করুন

ক্লাউড ফাংশনের একটি উদাহরণ শুরু করুন:

সুইফট

lazy var functions = Functions.functions()

উদ্দেশ্য গ

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

ওয়েব সংস্করণ 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();

ওয়েব সংস্করণ 9

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

জাভা

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

কোটলিন+কেটিএক্স

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

সি ++

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

Unক্য

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

উদ্দেশ্য গ

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

ওয়েব সংস্করণ 8

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

ওয়েব সংস্করণ 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;
  });

জাভা

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

কোটলিন+কেটিএক্স

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

সি ++

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

Unক্য

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 । কিভাবে জন্য পথনির্দেশ দেখুন ত্রুটি হ্যান্ডেল আপনার callable ফাংশনে।

সুইফট

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 (error) {
  if (error.domain == FIRFunctionsErrorDomain) {
    FIRFunctionsErrorCode code = error.code;
    NSString *message = error.localizedDescription;
    NSObject *details = error.userInfo[FIRFunctionsErrorDetailsKey];
  }
  // ...
}

ওয়েব সংস্করণ 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;
    // ...
  });

ওয়েব সংস্করণ 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;
    // ...
  });

জাভা

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

                    // ...
                }

                // ...
            }
        });

কোটলিন+কেটিএক্স

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

                // ...
            }

            // ...
        })

সি ++

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);
// ...

Unক্য

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

আগে আপনি আপনার অ্যাপ্লিকেশান লঞ্চ, আপনি সক্ষম উচিত অ্যাপ চেক সাহায্যের জন্য নিশ্চিত করুন যে শুধুমাত্র আপনার অ্যাপ্লিকেশানগুলি আপনার callable ফাংশন এন্ড পয়েন্ট অ্যাক্সেস করতে পারেন।