Google is committed to advancing racial equity for Black communities. See how.
This page was translated by the Cloud Translation API.
Switch to English

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

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

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

  • কলযোগ্যগুলির সাথে, ফায়ারবেস প্রমাণীকরণ এবং এফসিএম টোকেনগুলি উপলভ্য হলে স্বয়ংক্রিয়ভাবে অনুরোধগুলিতে অন্তর্ভুক্ত হয়।
  • functions.https.onCall Https.onCall ট্রিগারটি স্বয়ংক্রিয়ভাবে অনুরোধের বডিটি ডিসস্রায়ালাইজ করে এবং লেখক টোকেনকে বৈধতা দেয়।

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

  • আইওএস 6.32.2 এর জন্য ফায়ারবেস এসডিকে
  • অ্যান্ড্রয়েড 19.1.0 এর জন্য ফায়ারবেস এসডিকে
  • ফায়ারবেস জাভাস্ক্রিপ্ট এসডিকে 7.21.0

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

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

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

4 বি 76 এফবি 7293

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

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

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

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

ত্রুটিগুলি হ্যান্ডেল করুন

ক্লায়েন্টটি দরকারী ত্রুটির বিশদটি পেয়েছে তা নিশ্চিত করার জন্য, functions.https.HttpsError একটি উদাহরণ নিক্ষেপ করে (বা প্রত্যাখ্যানিত প্রতিশ্রুতি প্রত্যাবর্তন করে) কলযোগ্য থেকে ত্রুটিগুলি ফিরে আসুন tt HTTP.HttpsError। ত্রুটি টি code গুণ যা এ তালিকাভুক্ত মান এক হতে পারে functions.https.HttpsError । ত্রুটিগুলির একটি স্ট্রিং message , যা খালি স্ট্রিংয়ে ডিফল্ট হয়। তারা একটি স্বেচ্ছাচারিত মান সহ একটি alচ্ছিক 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 মধ্যে একটি সম্পূর্ণ কলযোগ্য ফাংশন সংরক্ষণ করার পরে, আপনি যখন index.js মোতায়েন করেন তখন এটি অন্যান্য সমস্ত ফাংশন সহ firebase deploy । শুধুমাত্র callable স্থাপন করতে, --only যুক্তি হিসাবে পারফর্ম দেখানো আংশিক স্থাপন :

$ firebase deploy --only functions:addMessage

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

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

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

আইওএস

  1. আপনার আইওএস অ্যাপে ফায়ারবেস যুক্ত করার জন্য নির্দেশাবলী অনুসরণ করুন
  2. আপনার Podfile ক্লাউড ফাংশনস পড যুক্ত করুন:
    pod 'Firebase/Functions'
  3. ফাইলটি সংরক্ষণ করুন, তারপরে চালান:
    pod install

ওয়েব

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

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

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

জাভা

  1. আপনার অ্যান্ড্রয়েড অ্যাপে ফায়ারবেস যুক্ত করার জন্য নির্দেশাবলী অনুসরণ করুন
  2. আপনার প্রকল্প-স্তরের build.gradle ফাইলটিতে আপনার buildscript এবং allprojects উভয় বিভাগে allprojects buildscript সংগ্রহস্থল অন্তর্ভুক্ত করার বিষয়টি নিশ্চিত করুন।
  3. আপনার মডিউল (অ্যাপ-স্তর) গ্রেড ফাইল (সাধারণত app/build.gradle ) - এ ক্লাউড ফাংশন অ্যান্ড্রয়েড লাইব্রেরির জন্য নির্ভরতা যুক্ত করুন:
    implementation 'com.google.firebase:firebase-functions:19.1.0'
    

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

  1. আপনার অ্যান্ড্রয়েড অ্যাপে ফায়ারবেস যুক্ত করার জন্য নির্দেশাবলী অনুসরণ করুন
  2. আপনার প্রকল্প-স্তরের build.gradle ফাইলটিতে আপনার buildscript এবং allprojects উভয় বিভাগে allprojects buildscript সংগ্রহস্থল অন্তর্ভুক্ত করার বিষয়টি নিশ্চিত করুন।
  3. আপনার মডিউল (অ্যাপ্লিকেশন-স্তর) গ্রেড ফাইল (সাধারণত app/build.gradle ) - এ ক্লাউড ফাংশন অ্যান্ড্রয়েড লাইব্রেরির জন্য নির্ভরতা যুক্ত করুন:
    implementation 'com.google.firebase:firebase-functions:19.1.0'
    

সি ++

অ্যান্ড্রয়েড সহ সি ++ এর জন্য:

  1. আপনার সি ++ প্রকল্পে ফায়ারবেস যুক্ত করার জন্য নির্দেশাবলী অনুসরণ করুন।
  2. আপনার প্রকল্প-স্তরের build.gradle ফাইলটিতে আপনার buildscript এবং allprojects উভয় বিভাগে allprojects buildscript সংগ্রহস্থল অন্তর্ভুক্ত করার বিষয়টি নিশ্চিত করুন।
  3. যোগ firebase_functions আপনার টু গ্রন্থাগার CMakeLists.txt ফাইল।

আইওএস সহ সি ++ এর জন্য:

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

.ক্য

  1. আপনার ইউনিটি প্রকল্পে ফায়ারবেস যুক্ত করার জন্য নির্দেশাবলী অনুসরণ করুন
  2. আপনার ইউনিটি প্রকল্পে ফায়ারবেস ইউনিটি এসডিকে থেকে FirebaseFunctions.unitypackage করুন।

ক্লায়েন্ট এসডিকে শুরু করুন

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

সুইফট

lazy var functions = Functions.functions()

উদ্দেশ্য গ

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

ওয়েব

0e9ebddad

জাভা

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

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

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

সি ++

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 text = (result?.data as? [String: Any])?["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"];
}];

ওয়েব

var addMessage = firebase.functions().httpsCallable('addMessage');
addMessage({text: messageText}).then(function(result) {
  // Read result of the Cloud Function.
  var sanitizedMessage = result.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
            }
}

সি ++

5f73a6913 ডি

.ক্য

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

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

সার্ভার কোনও ত্রুটি ছুঁড়ে ফেলেছে বা ফলস্বরূপ প্রতিশ্রুতি প্রত্যাখ্যান করা থাকলে ক্লায়েন্ট একটি ত্রুটি পেয়েছে।

যদি ফাংশনটিতে ফিরে আসা ত্রুটিটি ফাংশন https.HttpsError টাইপের 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]
  }
  // ...
}

উদ্দেশ্য গ

if (error) {
  if (error.domain == FIRFunctionsErrorDomain) {
    FIRFunctionsErrorCode code = error.code;
    NSString *message = error.localizedDescription;
    NSObject *details = error.userInfo[FIRFunctionsErrorDetailsKey];
  }
  // ...
}

ওয়েব

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

.ক্য

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