আপনার ক্লাউড ফাংশন কোডকে ফায়ারবেস এক্সটেনশন হিসাবে পুনরায় ব্যবহার করুন

1. আপনি শুরু করার আগে

একটি ফায়ারবেস এক্সটেনশন HTTP অনুরোধের প্রতিক্রিয়া হিসাবে বা Firebase ক্লাউড মেসেজিং, ক্লাউড ফায়ারস্টোর বা Pub/Sub-এর মতো অন্যান্য Firebase এবং Google পণ্যগুলি থেকে ইভেন্টগুলিকে ট্রিগার করার প্রতিক্রিয়া হিসাবে একটি নির্দিষ্ট কাজ বা কাজের সেট সম্পাদন করে।

আপনি কি নির্মাণ করবেন

এই কোডল্যাবে, আপনি জিওহ্যাশিংয়ের জন্য একটি ফায়ারবেস এক্সটেনশন তৈরি করবেন। একবার মোতায়েন করা হলে, আপনার এক্সটেনশন X- এবং Y- স্থানাঙ্কগুলিকে ফায়ারস্টোর ইভেন্টের প্রতিক্রিয়া হিসাবে বা কলযোগ্য ফাংশন আহ্বানের মাধ্যমে জিওহ্যাশে রূপান্তর করে। এটি আপনার সময় বাঁচানোর জন্য ডেটা সংরক্ষণের জন্য আপনার সমস্ত লক্ষ্য প্ল্যাটফর্ম জুড়ে জিওফায়ার লাইব্রেরি বাস্তবায়নের বিকল্প হিসাবে ব্যবহার করা যেতে পারে।

ফায়ারবেস কনসোলে জিওহ্যাশ এক্সটেনশন দেখাচ্ছে

আপনি কি শিখবেন

  • কীভাবে বিদ্যমান ক্লাউড ফাংশন কোড নিতে হয় এবং এটিকে একটি বিতরণযোগ্য ফায়ারবেস এক্সটেনশনে পরিণত করতে হয়
  • কিভাবে একটি extension.yaml ফাইল সেট আপ করবেন
  • কিভাবে একটি এক্সটেনশনে সংবেদনশীল স্ট্রিং (API কী) সংরক্ষণ করবেন
  • কীভাবে এক্সটেনশনের বিকাশকারীদের তাদের প্রয়োজন অনুসারে এটি কনফিগার করার অনুমতি দেওয়া যায়
  • কিভাবে এক্সটেনশন পরীক্ষা এবং স্থাপন

আপনি কি প্রয়োজন হবে

  • Firebase CLI (ইনস্টল এবং লগইন)
  • একটি Google অ্যাকাউন্ট, যেমন একটি জিমেইল অ্যাকাউন্ট
  • Node.js এবং npm
  • আপনার প্রিয় উন্নয়ন পরিবেশ

2. সেট আপ করুন

কোড পান

এই এক্সটেনশনের জন্য আপনার যা কিছু দরকার তা একটি GitHub রেপোতে রয়েছে। শুরু করতে, কোডটি ধরুন এবং এটি আপনার প্রিয় উন্নয়ন পরিবেশে খুলুন।

  1. ডাউনলোড করা জিপ ফাইলটি আনপ্যাক করুন।
  2. প্রয়োজনীয় নির্ভরতা ইনস্টল করতে, functions ডিরেক্টরিতে টার্মিনাল খুলুন এবং npm install কমান্ডটি চালান।

Firebase সেট আপ করুন

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

এগিয়ে এড়িয়ে যেতে চান?

আপনি কোডল্যাবের একটি সম্পূর্ণ সংস্করণ ডাউনলোড করতে পারেন। আপনি যদি পথ ধরে আটকে যান বা আপনি যদি একটি সম্পূর্ণ এক্সটেনশন দেখতে চান তবে GitHub সংগ্রহস্থলের codelab-end শাখাটি দেখুন বা সম্পূর্ণ জিপটি ডাউনলোড করুন।

3. কোড পর্যালোচনা করুন

  • জিপ ফাইল থেকে index.ts ফাইলটি খুলুন। লক্ষ্য করুন যে এটির মধ্যে দুটি ক্লাউড ফাংশন ঘোষণা রয়েছে।

এই ফাংশনগুলি কী করে?

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

ফাংশন ধ্রুবক

index.ts ফাইলের শীর্ষে ধ্রুবকগুলিকে প্রথম দিকে ঘোষণা করা হয়। এই ধ্রুবকগুলির মধ্যে কয়েকটি এক্সটেনশনের সংজ্ঞায়িত ট্রিগারগুলিতে উল্লেখ করা হয়েছে।

index.ts

import {firestore} from "firebase-functions";
import {initializeApp} from "firebase-admin/app";
import {GeoHashService, ResultStatusCode} from "./fake-geohash-service";
import {onCall} from "firebase-functions/v1/https";
import {fieldValueExists} from "./utils";

const documentPath = "users/{uid}";
const xField = "xv";
const yField = "yv";
const apiKey = "1234567890";
const outputField = "hash";

initializeApp();

const service = new GeoHashService(apiKey);

ফায়ারস্টোর ট্রিগার

index.ts ফাইলের প্রথম ফাংশনটি এইরকম দেখায়:

index.ts

export const locationUpdate = firestore.document(documentPath)
  .onWrite((change) => {
    // item deleted
    if (change.after == null) {
      return 0;
    }
    // double check that both values exist for computation
    if (
      !fieldValueExists(change.after.data(), xField) ||
      !fieldValueExists(change.after.data(), yField)
    ) {
      return 0;
    }
    const x: number = change.after.data()![xField];
    const y: number = change.after.data()![yField];
    const hash = service.convertToHash(x, y);
    // This is to check whether the hash value has changed. If
    // it hasn't, you don't want to write to the document again as it
    // would create a recursive write loop.
    if (fieldValueExists(change.after.data(), outputField)
      && change.after.data()![outputField] == hash) {
      return 0;
    }
    return change.after.ref
      .update(
        {
          [outputField]: hash.hash,
        }
      );
  });

এই ফাংশনটি একটি ফায়ারস্টোর ট্রিগার । ডাটাবেসে যখন একটি লেখার ঘটনা ঘটে, তখন ফাংশনটি একটি xv ক্ষেত্র এবং একটি yv ক্ষেত্র অনুসন্ধান করে সেই ইভেন্টে প্রতিক্রিয়া জানায় এবং, যদি এই দুটি ক্ষেত্রই বিদ্যমান থাকে, তাহলে এটি জিওহ্যাশ গণনা করে এবং একটি নির্দিষ্ট নথির আউটপুট অবস্থানে আউটপুট লিখে। ইনপুট নথিটি users/{uid} ধ্রুবক দ্বারা সংজ্ঞায়িত করা হয়, যার অর্থ হল ফাংশন users/ সংগ্রহের কাছে লেখা প্রতিটি নথি পড়ে এবং তারপর সেই নথিগুলির জন্য একটি জিওহ্যাশ প্রক্রিয়া করে৷ এটি তারপর একই নথিতে একটি হ্যাশ ক্ষেত্রে হ্যাশ আউটপুট.

কলযোগ্য ফাংশন

index.ts ফাইলের পরবর্তী ফাংশনটি এইরকম দেখাচ্ছে:

index.ts

export const callableHash = onCall((data, context) => {
  if (context.auth == undefined) {
    return {error: "Only authorized users are allowed to call this endpoint"};
  }
  const x = data[xField];
  const y = data[yField];
  if (x == undefined || y == undefined) {
    return {error: "Either x or y parameter was not declared"};
  }
  const result = service.convertToHash(x, y);
  if (result.status != ResultStatusCode.ok) {
    return {error: `Something went wrong ${result.message}`};
  }
  return {result: result.hash};
});

onCall ফাংশন লক্ষ্য করুন। এটি নির্দেশ করে যে এই ফাংশনটি একটি কলযোগ্য ফাংশন , যা আপনার ক্লায়েন্ট অ্যাপ্লিকেশন কোডের মধ্যে থেকে কল করা যেতে পারে। এই কলযোগ্য ফাংশনটি x এবং y প্যারামিটার নেয় এবং একটি জিওহ্যাশ প্রদান করে। যদিও এই ফাংশনটি এই কোডল্যাবে সরাসরি কল করা হবে না, এটি Firebase এক্সটেনশনে কনফিগার করার কিছু উদাহরণ হিসাবে এখানে অন্তর্ভুক্ত করা হয়েছে।

4. একটি extension.yaml ফাইল সেট আপ করুন

এখন যেহেতু আপনি জানেন যে আপনার এক্সটেনশনের ক্লাউড ফাংশন কোডটি কী করে, আপনি এটি বিতরণের জন্য প্যাকেজ করতে প্রস্তুত৷ প্রতিটি ফায়ারবেস এক্সটেনশন একটি extension.yaml ফাইলের সাথে আসে যা এক্সটেনশনটি কী করে এবং এটি কীভাবে আচরণ করে তা বর্ণনা করে।

একটি extension.yaml ফাইলের জন্য আপনার এক্সটেনশন সম্পর্কে কিছু প্রাথমিক মেটাডেটা প্রয়োজন। নিচের প্রতিটি ধাপ আপনাকে বুঝতে সাহায্য করে যে সমস্ত ক্ষেত্রের অর্থ কী এবং কেন আপনার সেগুলি প্রয়োজন৷

  1. আপনি যে প্রকল্পটি আগে ডাউনলোড করেছেন তার রুট ডিরেক্টরিতে একটি extension.yaml ফাইল তৈরি করুন। নিম্নলিখিত যোগ করে শুরু করুন:
name: geohash-ext
version: 0.0.1
specVersion: v1beta  # Firebase Extensions specification version (do not edit)

এক্সটেনশনের নামটি এক্সটেনশনের ইনস্ট্যান্স আইডির ভিত্তি হিসাবে ব্যবহৃত হয় (ব্যবহারকারীরা একটি এক্সটেনশনের একাধিক দৃষ্টান্ত ইনস্টল করতে পারেন, প্রতিটির নিজস্ব আইডি সহ)। ফায়ারবেস তারপর সেই ইনস্ট্যান্স আইডি ব্যবহার করে এক্সটেনশনের পরিষেবা অ্যাকাউন্টের নাম এবং এক্সটেনশন-নির্দিষ্ট সংস্থান তৈরি করে। সংস্করণ নম্বর আপনার এক্সটেনশনের সংস্করণ নির্দেশ করে৷ এটি অবশ্যই শব্দার্থিক সংস্করণ অনুসরণ করবে এবং যখনই আপনি এক্সটেনশনের কার্যকারিতা পরিবর্তন করবেন তখনই আপনাকে এটি আপডেট করতে হবে৷ কোন Firebase এক্সটেনশন স্পেসিফিকেশন অনুসরণ করতে হবে তা নির্ধারণ করতে এক্সটেনশন স্পেসিফিকেশন সংস্করণ ব্যবহার করা হয়, এই ক্ষেত্রে, v1beta ব্যবহার করা হয়।

  1. YAML ফাইলে কিছু ব্যবহারকারী-বান্ধব বিবরণ যোগ করুন:
...

displayName: Latitude and longitude to GeoHash converter
description: A converter for changing your Latitude and longitude coordinates to geohashes.

যখন বিকাশকারীরা আপনার এক্সটেনশনের সাথে ইন্টারঅ্যাক্ট করে তখন প্রদর্শন নামটি আপনার এক্সটেনশনের নামের একটি বন্ধুত্বপূর্ণ উপস্থাপনা। বর্ণনাটি এক্সটেনশনটি কী করে তার একটি সংক্ষিপ্ত বিবরণ দেয়। যখন এক্সটেনশনটি extensions.dev এ স্থাপন করা হয়, তখন এটি দেখতে এরকম কিছু দেখায়:

জিওহ্যাশ কনভার্টার এক্সটেনশন যেমন extensions.dev-এ দেখা যায়

  1. আপনার এক্সটেনশনে কোডের লাইসেন্স নির্দিষ্ট করুন।
...

license: Apache-2.0  # The license you want for the extension
  1. কে এক্সটেনশন লিখেছেন এবং এটি ইনস্টল করার জন্য বিলিং প্রয়োজন কিনা তা নির্দেশ করুন:
...

author:
  authorName: AUTHOR_NAME
  url: https://github.com/Firebase

billingRequired: true

author বিভাগটি আপনার ব্যবহারকারীদের জানাতে ব্যবহার করা হয় যে তারা এক্সটেনশন নিয়ে সমস্যায় পড়লে বা এটি সম্পর্কে আরও তথ্য চাইলে কার কাছে পৌঁছাতে হবে। billingRequired একটি প্রয়োজনীয় প্যারামিটার এবং অবশ্যই true হিসাবে সেট করা উচিত কারণ সমস্ত এক্সটেনশন ক্লাউড ফাংশনের উপর নির্ভর করে, যার জন্য ব্লেজ পরিকল্পনা প্রয়োজন৷

এটি এই এক্সটেনশনটি সনাক্ত করতে extension.yaml ফাইলে প্রয়োজনীয় ন্যূনতম সংখ্যক ক্ষেত্র কভার করে৷ আপনি একটি এক্সটেনশনে নির্দিষ্ট করতে পারেন এমন অন্যান্য শনাক্তকরণ তথ্যের আরও বিশদ বিবরণের জন্য, ডকুমেন্টেশন দেখুন।

5. ক্লাউড ফাংশন কোডকে একটি এক্সটেনশন রিসোর্সে রূপান্তর করুন

একটি এক্সটেনশন রিসোর্স হল একটি আইটেম যা ফায়ারবেস একটি এক্সটেনশনের ইনস্টলেশনের সময় প্রকল্পে তৈরি করে। এক্সটেনশনটি তখন সেই সংস্থানগুলির মালিক এবং একটি নির্দিষ্ট পরিষেবা অ্যাকাউন্ট রয়েছে যা তাদের উপর কাজ করে। এই প্রকল্পে, সেই সংস্থানগুলি হল ক্লাউড ফাংশন, যেগুলি অবশ্যই extension.yaml ফাইলে সংজ্ঞায়িত করা উচিত কারণ এক্সটেনশনটি ফাংশন ফোল্ডারের কোড থেকে স্বয়ংক্রিয়ভাবে সংস্থান তৈরি করবে না৷ যদি আপনার ক্লাউড ফাংশনগুলি স্পষ্টভাবে একটি সংস্থান হিসাবে ঘোষণা না করা হয়, তবে এক্সটেনশনটি স্থাপন করা হলে সেগুলি স্থাপন করা যাবে না৷

ব্যবহারকারী-সংজ্ঞায়িত স্থাপনার অবস্থান

  1. ব্যবহারকারীকে সেই অবস্থানটি নির্দিষ্ট করার অনুমতি দিন যেখানে তারা এই এক্সটেনশনটি স্থাপন করতে চান এবং সিদ্ধান্ত নিন যে এক্সটেনশনটি তাদের শেষ ব্যবহারকারীদের কাছাকাছি বা তাদের ডাটাবেসের কাছাকাছি হোস্ট করা ভাল হবে কিনা৷ extension.yaml ফাইলে, একটি অবস্থান বেছে নেওয়ার বিকল্পটি অন্তর্ভুক্ত করুন।

extension.yaml

আপনি এখন ফাংশন রিসোর্সের জন্য কনফিগারেশন লিখতে প্রস্তুত।

  1. extension.yaml ফাইলে, locationUpdate ফাংশনের জন্য একটি রিসোর্স অবজেক্ট তৈরি করুন। extension.yaml ফাইলে নিম্নলিখিত যোগ করুন:
resources:
  - name: locationUpdate
    type: firebaseextensions.v1beta.function
    properties:
      eventTrigger:
        eventType: providers/cloud.firestore/eventTypes/document.write
        resource: projects/${PROJECT_ID}/databases/(default)/documents/users/{uid}

আপনি name প্রকল্পের index.ts ফাইলে সংজ্ঞায়িত ফাংশনের নাম হিসাবে সংজ্ঞায়িত করুন। আপনি যে type ফাংশন স্থাপন করা হচ্ছে তা নির্দিষ্ট করুন, যা সর্বদা firebaseextensions.v1beta.function হওয়া উচিত, আপাতত। তারপর, আপনি এই ফাংশন properties সংজ্ঞায়িত. আপনি সংজ্ঞায়িত প্রথম বৈশিষ্ট্য হল eventTrigger যা এই ফাংশনের সাথে যুক্ত। এক্সটেনশনটি বর্তমানে যা সমর্থন করে তা মিরর করার জন্য, আপনি প্রদানকারীর eventType providers/cloud.firestore/eventTypes/document.write ব্যবহার করেন, যা আপনার এক্সটেনশন ডকুমেন্টেশনের জন্য রাইট ক্লাউড ফাংশনে পাওয়া যায়। আপনি নথির অবস্থান হিসাবে resource সংজ্ঞায়িত করুন. যেহেতু আপনার বর্তমান লক্ষ্য হল কোডে যা আছে তা মিরর করা, তাই ডকুমেন্ট পাথ users/{uid} , এর আগে ডিফল্ট ডাটাবেস অবস্থান।

  1. ফায়ারস্টোর ডাটাবেসের জন্য এক্সটেনশনের পড়ার এবং লেখার অনুমতি প্রয়োজন। extension.yaml ফাইলের একেবারে শেষে, ডেভেলপারের ফায়ারবেস প্রকল্পে ডাটাবেসের সাথে কাজ করার জন্য এক্সটেনশনের অ্যাক্সেস থাকা উচিত এমন IAM ভূমিকাগুলি নির্দিষ্ট করুন৷
roles:
  - role: datastore.user
    reason: Allows the extension to read / write to your Firestore instance.

datastore.user ভূমিকাটি এক্সটেনশনের জন্য সমর্থিত IAM ভূমিকার তালিকা থেকে আসে। যেহেতু এক্সটেনশনটি পড়া এবং লেখার জন্য যাচ্ছে, তাই datastore.user ভূমিকা এখানে উপযুক্ত।

  1. কলযোগ্য ফাংশনটিও যোগ করতে হবে। extension.yaml ফাইলে, সম্পদ সম্পত্তির অধীনে একটি নতুন সংস্থান তৈরি করুন। এই বৈশিষ্ট্যগুলি একটি কলযোগ্য ফাংশনের জন্য নির্দিষ্ট:
  - name: callableHash
    type: firebaseextensions.v1beta.function
    properties:
      httpsTrigger: {}

যদিও পূর্ববর্তী সংস্থানটি একটি eventTrigger ব্যবহার করে, এখানে আপনি একটি httpsTrigger ব্যবহার করেন, যা কলযোগ্য ফাংশন এবং HTTPS ফাংশন উভয়ই কভার করে।

কোড চেক

আপনার extension.yaml আপনার index.ts ফাইলের কোড দ্বারা করা সমস্ত কিছুর সাথে মিলে যাওয়ার জন্য এটি অনেকগুলি কনফিগারেশন ছিল৷ সম্পূর্ণ extension.yaml ফাইলটি এই সময়ে দেখতে কেমন হওয়া উচিত:

extension.yaml

name: geohash-ext
version: 0.0.1
specVersion: v1beta  # Firebase Extensions specification version (do not edit)

displayName: Latitude and Longitude to GeoHash converter
description: A converter for changing your Latitude and Longitude coordinates to geohashes.

license: Apache-2.0  # The license you want for the extension

author:
  authorName: Sparky
  url: https://github.com/Firebase

billingRequired: true

resources:
  - name: locationUpdate
    type: firebaseextensions.v1beta.function
    properties:
      eventTrigger:
        eventType: providers/cloud.firestore/eventTypes/document.write
        resource: projects/${PROJECT_ID}/databases/(default)/documents/users/{uid}
  - name: callableHash
    type: firebaseextensions.v1beta.function
    properties:
      httpsTrigger: {}

roles:
  - role: datastore.user
    reason: Allows the extension to read / write to your Firestore instance.

স্ট্যাটাস চেক

এই মুহুর্তে, আপনার কাছে এক্সটেনশনের প্রাথমিক কার্যকরী অংশগুলি সেট আপ করা আছে, তাই আপনি আসলে Firebase এমুলেটর ব্যবহার করে এটি ব্যবহার করে দেখতে পারেন!

  1. আপনি যদি ইতিমধ্যে না করে থাকেন, ডাউনলোড করা এক্সটেনশন প্রকল্পের ফাংশন ফোল্ডারে npm run build কল করুন।
  2. আপনার হোস্ট সিস্টেমে একটি নতুন ডিরেক্টরি তৈরি করুন এবং firebase init ব্যবহার করে সেই ডিরেক্টরিটিকে আপনার Firebase প্রকল্পের সাথে সংযুক্ত করুন।
cd ..
mkdir sample-proj
cd sample-proj
firebase init --project=projectID-or-alias
    This command creates a `firebase.json` file in the directory. In the following steps, you push the configuration specified in this file to Firebase.
  1. একই ডিরেক্টরি থেকে, firebase ext:install চালান। যে ডিরেক্টরিতে আপনার extension.yaml ফাইল রয়েছে তার পরম পাথ দিয়ে /path/to/extension প্রতিস্থাপন করুন।
firebase ext:install /path/to/extension
    This command does two things:
  • এটি আপনাকে এক্সটেনশন উদাহরণের জন্য কনফিগারেশন নির্দিষ্ট করতে অনুরোধ করে এবং এটি একটি *.env ফাইল তৈরি করে যাতে উদাহরণের জন্য কনফিগারেশন তথ্য থাকে।
  • এটি আপনার firebase.json এর extensions বিভাগে এক্সটেনশন উদাহরণ যোগ করে। এটি এক্সটেনশন সংস্করণে ইনস্ট্যান্স আইডির মানচিত্র হিসাবে কাজ করে।
  • যেহেতু আপনি স্থানীয়ভাবে প্রকল্পটি স্থাপন করছেন, আপনি উল্লেখ করতে পারেন যে আপনি Google ক্লাউড সিক্রেট ম্যানেজারের পরিবর্তে একটি স্থানীয় ফাইল ব্যবহার করতে চান৷

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

  1. নতুন কনফিগারেশনের সাথে ফায়ারবেস এমুলেটরগুলি শুরু করুন:
firebase emulators:start
  1. emulators:start , এমুলেটরগুলির ওয়েবভিউতে ফায়ারস্টোর ট্যাবে নেভিগেট করুন।
  2. একটি xv নম্বর ক্ষেত্র এবং yv নম্বর ক্ষেত্র সহ users সংগ্রহে একটি নথি যোগ করুন।

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

  1. আপনি যদি এক্সটেনশন ইনস্টল করতে সফল হন তবে এক্সটেনশনটি নথিতে hash নামে একটি নতুন ক্ষেত্র তৈরি করে।

একটি xv, yv, এবং হ্যাশ ক্ষেত্রযুক্ত ব্যবহারকারীর নথি সহ ব্যবহারকারীদের সংগ্রহ।

দ্বন্দ্ব এড়াতে পরিষ্কার করুন

  • একবার আপনি পরীক্ষা করা হয়ে গেলে, এক্সটেনশনটি আনইনস্টল করুন—আপনি এক্সটেনশন কোড আপডেট করতে যাচ্ছেন এবং পরবর্তীতে বর্তমান এক্সটেনশনের সাথে বিরোধ করতে চান না।

এক্সটেনশনগুলি একই এক্সটেনশনের একাধিক সংস্করণ একবারে ইনস্টল করার অনুমতি দেয়, তাই আনইনস্টল করার মাধ্যমে, আপনি নিশ্চিত করুন যে পূর্বে ইনস্টল করা এক্সটেনশনের সাথে কোনও বিরোধ নেই৷

firebase ext:uninstall geohash-ext

বর্তমান সমাধান কাজ করে, কিন্তু প্রকল্পের শুরুতে উল্লিখিত হিসাবে, একটি পরিষেবার সাথে যোগাযোগের অনুকরণ করার জন্য একটি হার্ড-কোডেড API কী রয়েছে। মূল সরবরাহকৃত একটির পরিবর্তে আপনি কীভাবে শেষ-ব্যবহারকারীর API কী ব্যবহার করতে পারেন? খুঁজে বের করতে পড়ুন।

6. এক্সটেনশন ব্যবহারকারীকে কনফিগারযোগ্য করুন

কোডল্যাবের এই মুহুর্তে, আপনার কাছে একটি এক্সটেনশন রয়েছে যা আপনি ইতিমধ্যেই যে ফাংশনগুলি লিখেছেন তার মতামতযুক্ত সেটআপের সাথে ব্যবহারের জন্য কনফিগার করা হয়েছে, তবে আপনার ব্যবহারকারী যদি নির্দেশ করে এমন ক্ষেত্রগুলির জন্য y এবং x এর পরিবর্তে অক্ষাংশ এবং দ্রাঘিমাংশ ব্যবহার করতে চান তবে কী হবে? একটি কার্টেসিয়ান প্লেনে অবস্থান? এছাড়াও, আপনি কীভাবে শেষ ব্যবহারকারীকে তাদের নিজস্ব API কী সরবরাহ করতে পেতে পারেন, তাদের সরবরাহ করা API কী ব্যবহার করতে দেওয়ার পরিবর্তে? আপনি দ্রুত সেই API-এর জন্য কোটা অতিক্রম করতে পারেন। এই ক্ষেত্রে, আপনি সেট আপ করুন এবং পরামিতি ব্যবহার করুন।

extension.yaml ফাইলে মৌলিক পরামিতি সংজ্ঞায়িত করুন

ডেভেলপারদের সম্ভাব্য একটি কাস্টম কনফিগারেশন থাকতে পারে এমন আইটেমগুলিকে রূপান্তর করে শুরু করুন৷ প্রথমটি হবে XFIELD এবং YFIELD প্যারামিটার।

  1. extension.yaml ফাইলে, নিম্নলিখিত কোড যোগ করুন, যা XFIELD এবং YFIELD ফিল্ড প্যারামিটার ব্যবহার করে। এই পরামিতিগুলি পূর্বে সংজ্ঞায়িত params YAML সম্পত্তির ভিতরে থাকে:

extension.yaml

params:
  - param: XFIELD
    label: The X Field Name
    description: >-
      The X Field is also known as the **longitude** value. What does
      your Firestore instance refer to as the X value or the longitude
      value. If no value is specified, the extension searches for
      field 'xv'.
    type: string
    validationRegex: ^\D([0-9a-zA-Z_.]{0,375})$
    validationErrorMessage: >-
      The field can only contain uppercase or lowercase letter, numbers,
      _, and . characters and must be less than 1500 bytes long. The field
      must also not start with a number.
    default: xv
    required: false
    immutable: false
    example: xv
  - param: YFIELD
    label: The Y Field Name
    description: >-
      The Y Field is also known as the **latitude** value. What does
      your Firestore instance refer to as the Y value or the latitude
      value. If no value is specified, the extension searches for
      field 'yv'.
    type: string
    validationRegex: ^\D([0-9a-zA-Z_.]{0,375})$
    validationErrorMessage: >-
      The field can only contain uppercase or lowercase letter, numbers,
      _, and . characters and must be less than 1500 bytes long. The field
      must also not start with a number.
    default: yv
    required: false
    immutable: false
    example: yv
  • param এমনভাবে প্যারামিটারের নাম দেয় যা আপনার কাছে দৃশ্যমান, এক্সটেনশন প্রযোজক। পরামিতি মান নির্দিষ্ট করার সময় এই মানটি পরে ব্যবহার করুন।
  • লেবেল হল একটি মানব-পঠনযোগ্য শনাক্তকারী যা ডেভেলপারকে জানাতে পারে যে প্যারামিটারটি কী করে।
  • description মানটির বিস্তারিত বর্ণনা দেয়। যেহেতু এটি মার্কডাউন সমর্থন করে, তাই এটি অতিরিক্ত ডকুমেন্টেশনের সাথে লিঙ্ক করতে পারে, অথবা এটি এমন শব্দগুলিকে হাইলাইট করতে পারে যা বিকাশকারীর জন্য গুরুত্বপূর্ণ হতে পারে।
  • টাইপ একজন ব্যবহারকারী কিভাবে পরামিতি মান সেট করবে তার জন্য ইনপুট প্রক্রিয়া সংজ্ঞায়িত করে। string , select , multiSelect , selectResource , এবং secret সহ অনেক প্রকার বিদ্যমান। এই বিকল্পগুলির প্রতিটি সম্পর্কে আরও জানতে, ডকুমেন্টেশন দেখুন।
  • validationRegex একটি নির্দিষ্ট রেজেক্স মান ডেভেলপার এন্ট্রিকে সীমাবদ্ধ করে (উদাহরণে এটি এখানে পাওয়া সাধারণ ক্ষেত্রের নামের নির্দেশিকাগুলির উপর ভিত্তি করে); এবং যদি এটি ব্যর্থ হয় ...
  • validationErrorMessage ডেভেলপারকে ব্যর্থতার মান সম্পর্কে সতর্ক করে।
  • ডেভলপার কোন টেক্সট ইনপুট না করলে ডিফল্ট মান কি হবে।
  • প্রয়োজনীয় মানে ডেভেলপারকে কোন টেক্সট লিখতে হবে না।
  • অপরিবর্তনীয় বিকাশকারীকে এই এক্সটেনশনটি আপডেট করতে এবং এই মান পরিবর্তন করতে দেয়। এই ক্ষেত্রে, বিকাশকারীকে তাদের প্রয়োজনীয়তা পরিবর্তনের সাথে সাথে ক্ষেত্রের নাম পরিবর্তন করতে সক্ষম হওয়া উচিত।
  • উদাহরণ একটি বৈধ ইনপুট দেখতে কেমন হতে পারে তার একটি ধারণা প্রদান করে।

যে অনেক বোঝার ছিল!

  1. একটি বিশেষ প্যারামিটার যোগ করার আগে extension.yaml ফাইলে যোগ করার জন্য আপনার কাছে আরও তিনটি প্যারামিটার আছে।
  - param: INPUTPATH
    label: The input document to listen to for changes
    description: >-
      This is the document where you write an x and y value to. Once
      that document has received a value, it notifies the extension to
      calculate a geohash and store that in an output document in a certain
      field. This accepts function [wildcard parameters](https://firebase.google.com/docs/functions/firestore-events#wildcards-parameters)
    type: string
    validationRegex: ^[^/]+(/[^/]*/[^/]*)*/[^/]+$
    validationErrorMessage: >-
      This must point to a document path, not a collection path from the root
      of the database. It must also not start or end with a '/' character.
    required: true
    immutable: false
    example: users/{uid}
  - param: OUTPUTFIELD
    label: Geohash field
    description: >-
      This specifies the field in the output document to store the geohash in.
    type: string
    validationRegex: ^\D([0-9a-zA-Z_.]{0,375})$
    validationErrorMessage: >-
      The field can only contain uppercase or lowercase letter, numbers,
      _, and . characters and must be less than 1500 bytes long. The field
      must also not start with a number.
    required: false
    default: hash
    immutable: false
    example: hash

সংবেদনশীল পরামিতি সংজ্ঞায়িত করুন

এখন, আপনাকে API কী পরিচালনা করতে হবে যা ব্যবহারকারী নির্দিষ্ট করে। এটি একটি সংবেদনশীল স্ট্রিং যা ফাংশনে প্লেইন টেক্সটে সংরক্ষণ করা উচিত নয়। পরিবর্তে, ক্লাউড সিক্রেট ম্যানেজারে এই মানটি সংরক্ষণ করুন। এটি ক্লাউডের একটি বিশেষ অবস্থান যা এনক্রিপ্ট করা গোপনীয়তা সঞ্চয় করে এবং সেগুলি দুর্ঘটনাক্রমে ফাঁস হওয়া থেকে আটকায়৷ এর জন্য ডেভেলপারকে এই পরিষেবা ব্যবহারের জন্য অর্থ প্রদান করতে হবে, কিন্তু এটি তাদের API কীগুলির উপর নিরাপত্তার একটি অতিরিক্ত স্তর যুক্ত করে এবং সম্ভাব্য প্রতারণামূলক কার্যকলাপকে সীমিত করে৷ ব্যবহারকারীর ডকুমেন্টেশন ডেভেলপারকে সতর্ক করে যে এটি একটি অর্থপ্রদানের পরিষেবা, যাতে বিলিংয়ে কোনও আশ্চর্য না হয়৷ সামগ্রিকভাবে, ব্যবহার উপরে উল্লিখিত অন্যান্য স্ট্রিং সম্পদের অনুরূপ। পার্থক্য শুধুমাত্র টাইপ যা secret বলা হয়।

  • extension.yaml ফাইলে, নিম্নলিখিত কোড যোগ করুন:

extension.yaml

  - param: APIKEY
    label: GeohashService API Key
    description: >-
      Your geohash service API Key. Since this is a demo, and not a real
      service, you can use : 1234567890.
    type: secret
    required: true
    immutable: false

পরামিতি ব্যবহার করার জন্য resource বৈশিষ্ট্য আপডেট করুন

পূর্বে উল্লিখিত হিসাবে, সংস্থান (ফাংশন নয়) সংজ্ঞায়িত করে যে সংস্থানটি কীভাবে পর্যবেক্ষণ করা হয়, তাই নতুন প্যারামিটার ব্যবহার করার জন্য locationUpdate রিসোর্স আপডেট করা দরকার।

  • extension.yaml ফাইলে, নিম্নলিখিত কোড যোগ করুন:

extension.yaml

## Change from this
  - name: locationUpdate
    type: firebaseextensions.v1beta.function
    properties:
      eventTrigger:
        eventType: providers/cloud.firestore/eventTypes/document.write
        resource: projects/${PROJECT_ID}/databases/(default)/documents/users/{uid}]

## To this
  - name: locationUpdate
    type: firebaseextensions.v1beta.function
    properties:
      eventTrigger:
        eventType: providers/cloud.firestore/eventTypes/document.write
        resource: projects/${PROJECT_ID}/databases/(default)/documents/${INPUTPATH}

extension.yaml ফাইলটি চেক করুন

  • extension.yaml ফাইলটি পর্যালোচনা করুন। এটি এই মত কিছু দেখা উচিত:

extension.yaml

name: geohash-ext
version: 0.0.1
specVersion: v1beta  # Firebase Extensions specification version (do not edit)

displayName: Latitude and Longitude to GeoHash converter
description: A converter for changing your Latitude and Longitude coordinates to geohashes.

license: Apache-2.0  # The license you want to use for the extension

author:
  authorName: Sparky
  url: https://github.com/Firebase

billingRequired: true

params:
  - param: XFIELD
    label: The X Field Name
    description: >-
      The X Field is also known as the **longitude** value. What does
      your Firestore instance refer to as the X value or the longitude
      value. If you don't provide a value for this field, the extension will use 'xv' as the default value.
    type: string
    validationRegex: ^\D([0-9a-zA-Z_.]{0,375})$
    validationErrorMessage: >-
      The field can only contain uppercase or lowercase letter, numbers,
      _, and . characters and must be less than 1500 bytes long. The field
      must also not start with a number.
    default: xv
    required: false
    immutable: false
    example: xv
  - param: YFIELD
    label: The Y Field Name
    description: >-
      The Y Field is also known as the **latitude** value. What does
      your Firestore instance refer to as the Y value or the latitude
      Value. If you don't provide a value for this field, the extension will use 'yv' as the default value.
    type: string
    validationRegex: ^\D([0-9a-zA-Z_.]{0,375})$
    validationErrorMessage: >-
      The field can only contain uppercase or lowercase letter, numbers,
      _, and . characters and must be less than 1500 bytes long. The field
      must also not start with a number.
    default: yv
    required: false
    immutable: false
    example: yv
  - param: INPUTPATH
    label: The input document to listen to for changes
    description: >-
      This is the document where you write an x and y value to. Once
      that document has been modified, it notifies the extension to
      compute a geohash and store that in an output document in a certain
      field. This accepts function [wildcard parameters](https://firebase.google.com/docs/functions/firestore-events#wildcards-parameters)
    type: string
    validationRegex: ^[^/]+(/[^/]*/[^/]*)*/[^/]+$
    validationErrorMessage: >-
      This must point to a document path, not a collection path from the root
      of the database. It must also not start or end with a '/' character.
    required: true
    immutable: false
    example: users/{uid}
  - param: OUTPUTFIELD
    label: Geohash field
    description: >-
      This specifies the field in the output document to store the geohash in.
    type: string
    validationRegex: ^\D([0-9a-zA-Z_.]{0,375})$
    validationErrorMessage: >-
      The field can only contain uppercase or lowercase letter, numbers,
      _, and . characters and must be less than 1500 bytes long. The field
      must also not start with a number.
    required: false
    default: hash
    immutable: false
    example: hash
  - param: APIKEY
    label: GeohashService API Key
    description: >-
      Your geohash service API Key. Since this is a demo, and not a real
      service, you can use : 1234567890.
    type: secret
    required: true
    immutable: false

resources:
  - name: locationUpdate
    type: firebaseextensions.v1beta.function
    properties:
      eventTrigger:
        eventType: providers/cloud.firestore/eventTypes/document.write
        resource: projects/${PROJECT_ID}/databases/(default)/documents/${INPUTPATH}
  - name: callableHash
    type: firebaseextensions.v1beta.function
    properties:
      httpsTrigger: {}

roles:
  - role: datastore.user
    reason: Allows the extension to read / write to your Firestore instance.

কোডে প্যারামিটার অ্যাক্সেস করুন

এখন যেহেতু সমস্ত প্যারামিটার extension.yaml ফাইলে কনফিগার করা হয়েছে, সেগুলি index.ts ফাইলে যোগ করুন।

  • index.ts ফাইলে, ডিফল্ট মানগুলিকে process.env.PARAMETER_NAME দিয়ে প্রতিস্থাপন করুন, যা উপযুক্ত পরামিতি মানগুলি নিয়ে আসে এবং ডেভেলপারের ফায়ারবেস প্রকল্পে স্থাপন করা ফাংশন কোডে সেগুলি পূরণ করে৷

index.ts

// Replace this:
const documentPath = "users/{uid}";
const xField = "xv";
const yField = "yv";
const apiKey = "1234567890";
const outputField = "hash";

// with this:
const documentPath = process.env.INPUTPATH!; // this value is ignored since its read from the resource
const xField = process.env.XFIELD!;
const yField = process.env.YFIELD!;
const apiKey = process.env.APIKEY!;
const outputField = process.env.OUTPUTFIELD!;

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

7. ব্যবহারকারীর ডকুমেন্টেশন তৈরি করুন

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

  1. PREINSTALL.md ফাইল তৈরি করে শুরু করুন, যেটি কার্যকারিতা, ইনস্টলেশনের জন্য যেকোনো পূর্বশর্ত এবং সম্ভাব্য বিলিং প্রভাব বর্ণনা করতে ব্যবহৃত হয়।

PREINSTALL.md

Use this extension to automatically convert documents with a latitude and
longitude to a geohash in your database. Additionally, this extension includes a callable function that allows users to make one-time calls
to convert an x,y coordinate into a geohash.

Geohashing is supported for latitudes between 90 and -90 and longitudes
between 180 and -180.

#### Third Party API Key

This extension uses a fictitious third-party API for calculating the
geohash. You need to supply your own API keys. (Since it's fictitious,
you can use 1234567890 as an API key).

#### Additional setup

Before installing this extension, make sure that you've [set up a Cloud
Firestore database](https://firebase.google.com/docs/firestore/quickstart) in your Firebase project.

After installing this extension, you'll need to:

- Update your client code to point to the callable geohash function if you
want to perform arbitrary geohashes.

Detailed information for these post-installation tasks are provided after
you install this extension.

#### Billing
To install an extension, your project must be on the [Blaze (pay as you
go) plan](https://firebase.google.com/pricing)

- This extension uses other Firebase and Google Cloud Platform services,
which have associated charges if you exceed the service's no-cost tier:
 - Cloud Firestore
 - Cloud Functions (Node.js 16+ runtime. [See
FAQs](https://firebase.google.com/support/faq#extensions-pricing))
 - [Cloud Secret Manager](https://cloud.google.com/secret-manager/pricing)
  1. এই প্রকল্পের জন্য README.md লেখার সময় বাঁচাতে, সুবিধার পদ্ধতি ব্যবহার করুন:
firebase ext:info . --markdown > README.md

এটি আপনার PREINSTALL.md ফাইলের বিষয়বস্তু এবং আপনার extension.yaml ফাইল থেকে আপনার এক্সটেনশন সম্পর্কে অতিরিক্ত বিবরণ একত্রিত করে।

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

  1. একটি POSTINSTALL.md ফাইল তৈরি করুন এবং তারপরে নিম্নলিখিত পোস্ট ইনস্টলেশন তথ্য অন্তর্ভুক্ত করুন:

POSTINSTALL.md

Congratulations on installing the geohash extension!

#### Function information

* **Firestore Trigger** - ${function:locationUpdate.name} was installed
and is invoked when both an x field (${param:XFIELD}) and y field
(${param:YFIELD}) contain a value.

* **Callable Trigger** - ${function:callableHash.name} was installed and
can be invoked by writing the following client code:
 ```javascript
import { getFunctions, httpsCallable } from "firebase/functions";
const functions = getFunctions();
const geoHash = httpsCallable(functions, '${function:callableHash.name}');
geoHash({ ${param:XFIELD}: -122.0840, ${param:YFIELD}: 37.4221 })
  .then((result) => {
    // Read result of the Cloud Function.
    /** @type {any} */
    const data = result.data;
    const error = data.error;
    if (error != null) {
        console.error(`callable error : ${error}`);
    }
    const result = data.result;
    console.log(result);
  });

মনিটরিং

একটি সর্বোত্তম অনুশীলন হিসাবে, আপনি আপনার ইনস্টল করা এক্সটেনশনের ক্রিয়াকলাপ নিরীক্ষণ করতে পারেন, এর স্বাস্থ্য, ব্যবহার এবং লগগুলি পরীক্ষা করা সহ।

The output rendering looks something like this when it's deployed:

<img src="img/82b54a5c6ca34b3c.png" alt="A preview of the latitude and longitude geohash converter extension in the firebase console"  width="957.00" />


## Test the extension with the full configuration
Duration: 03:00


It's time to make sure that the user-configurable extension is working the way it is intended.

* Change into the functions folder and ensure that the latest compiled version of the extensions exists. In the extensions project functions directory, call:

```console
npm run build

এটি ফাংশনগুলিকে পুনরায় সংকলন করে যাতে সর্বশেষ সোর্স কোডটি এক্সটেনশনের পাশাপাশি স্থাপনের জন্য প্রস্তুত থাকে যখন এটি একটি এমুলেটরে বা সরাসরি ফায়ারবেসে স্থাপন করা হয়।

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

Firebase এমুলেটর ইনস্টল করুন এবং পরীক্ষা করুন

  1. আপনার হোস্ট সিস্টেমে একটি নতুন ডিরেক্টরি তৈরি করুন এবং firebase init ব্যবহার করে সেই ডিরেক্টরিটিকে আপনার Firebase প্রকল্পের সাথে সংযুক্ত করুন।
mkdir sample-proj
cd sample-proj
firebase init --project=projectID-or-alias
  1. সেই ডিরেক্টরি থেকে, এক্সটেনশন ইনস্টল করতে firebase ext:install চালান। যে ডিরেক্টরিতে আপনার extension.yaml ফাইল রয়েছে তার পরম পাথ দিয়ে /path/to/extension প্রতিস্থাপন করুন। এটি আপনার এক্সটেনশনের জন্য ইনস্টলেশন প্রক্রিয়া শুরু করে এবং একটি .env ফাইল তৈরি করে যাতে আপনার কনফিগারেশনগুলি Firebase বা এমুলেটরগুলিতে পুশ করার আগে আপনার কনফিগারেশনগুলি রয়েছে৷
firebase ext:install /path/to/extension
  • যেহেতু আপনি স্থানীয়ভাবে প্রকল্পটি স্থাপন করছেন, তাই উল্লেখ করুন যে আপনি Google ক্লাউড সিক্রেট ম্যানেজারের পরিবর্তে একটি স্থানীয় ফাইল ব্যবহার করতে চান৷

da928c65ffa8ce15.png

  1. স্থানীয় এমুলেটর স্যুট শুরু করুন:
firebase emulators:start

একটি বাস্তব ফায়ারবেস প্রকল্পের সাথে ইনস্টল করুন এবং পরীক্ষা করুন

আপনি একটি প্রকৃত ফায়ারবেস প্রকল্পে আপনার এক্সটেনশন ইনস্টল করতে পারেন। আপনার পরীক্ষার জন্য একটি পরীক্ষামূলক প্রকল্প ব্যবহার করার পরামর্শ দেওয়া হচ্ছে। আপনি যদি আপনার এক্সটেনশনের এন্ড-টু-এন্ড ফ্লো পরীক্ষা করতে চান বা যদি আপনার এক্সটেনশনের ট্রিগার এখনও Firebase এমুলেটর স্যুট দ্বারা সমর্থিত না হয় তবে এই টেস্টিং ওয়ার্কফ্লোটি ব্যবহার করুন ( এক্সটেনশন এমুলেটর বিকল্পটি দেখুন)। এমুলেটরগুলি বর্তমানে ক্লাউড ফায়ারস্টোর, রিয়েলটাইম ডেটাবেস এবং পাব/সাবের জন্য HTTP অনুরোধ-ট্রিগার করা ফাংশন এবং ব্যাকগ্রাউন্ড ইভেন্ট-ট্রিগার ফাংশন সমর্থন করে।

  1. আপনার হোস্ট সিস্টেমে একটি নতুন ডিরেক্টরি তৈরি করুন এবং firebase init ব্যবহার করে সেই ডিরেক্টরিটিকে আপনার Firebase প্রকল্পের সাথে সংযুক্ত করুন।
cd ..
mkdir sample-proj
cd sample-proj
firebase init --project=projectID-or-alias
  1. তারপর, সেই ডিরেক্টরি থেকে, এক্সটেনশন ইনস্টল করতে firebase ext:install চালান। যে ডিরেক্টরিতে আপনার extension.yaml ফাইল রয়েছে তার পরম পাথ দিয়ে /path/to/extension প্রতিস্থাপন করুন। এটি আপনার এক্সটেনশনের জন্য ইনস্টলেশন প্রক্রিয়া শুরু করে এবং একটি .env ফাইল তৈরি করে যাতে আপনার কনফিগারেশনগুলি Firebase বা এমুলেটরগুলিতে পুশ করার আগে আপনার কনফিগারেশনগুলি রয়েছে৷
firebase ext:install /path/to/extension
  • যেহেতু আপনি সরাসরি Firebase-এ স্থাপন করতে চান এবং Google ক্লাউড সিক্রেট ম্যানেজার ব্যবহার করতে চান, তাই এক্সটেনশনটি ইনস্টল করার আগে আপনাকে সিক্রেট ম্যানেজার API সক্রিয় করতে হবে।
  1. আপনার ফায়ারবেস প্রকল্পে স্থাপন করুন।
firebase deploy

এক্সটেনশন পরীক্ষা করুন

  1. firebase deploy বা firebase emulators:start , উপযুক্ত হলে Firebase কনসোলের Firestore ট্যাবে বা এমুলেটরদের ওয়েবভিউতে নেভিগেট করুন।
  2. x ক্ষেত্র এবং y ক্ষেত্র দ্বারা নির্দিষ্ট সংগ্রহে একটি নথি যোগ করুন। এই ক্ষেত্রে, আপডেট হওয়া নথিগুলি u/{uid}xv এর একটি x ক্ষেত্র এবং yv এর একটি y ক্ষেত্র সহ অবস্থিত।

একটি Firestore রেকর্ড যোগ করতে Firebase এমুলেটর স্ক্রীন

  1. আপনি যদি এক্সটেনশন ইনস্টল করতে সফল হন, তবে আপনি দুটি ক্ষেত্র সংরক্ষণ করার পরে এক্সটেনশনটি নথিতে hash নামে একটি নতুন ক্ষেত্র তৈরি করে।

একটি এমুলেটর থেকে ফায়ারস্টোর ডাটাবেস স্ক্রীন হ্যাশ যুক্ত দেখাচ্ছে

8. অভিনন্দন!

আপনি সফলভাবে আপনার প্রথম ক্লাউড ফাংশনটিকে ফায়ারবেস এক্সটেনশনে রূপান্তর করেছেন!

আপনি একটি extension.yaml ফাইল যোগ করেছেন এবং এটি কনফিগার করেছেন যাতে বিকাশকারীরা আপনার এক্সটেনশনটি কীভাবে স্থাপন করতে চান তা নির্বাচন করতে পারেন৷ তারপরে আপনি ব্যবহারকারীর ডকুমেন্টেশন তৈরি করেছেন যা এক্সটেনশনের বিকাশকারীদের এক্সটেনশন সেট আপ করার আগে কী করা উচিত এবং এক্সটেনশনটি সফলভাবে ইনস্টল করার পরে তাদের কী পদক্ষেপ নিতে হবে তার নির্দেশিকা প্রদান করে৷

আপনি এখন একটি Firebase ফাংশনকে একটি বিতরণযোগ্য Firebase এক্সটেনশনে রূপান্তর করার জন্য প্রয়োজনীয় মূল পদক্ষেপগুলি জানেন৷

এরপর কি?