Firebase Cloud Functions — یہ کیا ہے، ٹرگرز اور فنکشن کیسے لکھیں

مصنف: IT Sectr اشاعت: 2026-04-28 مطالعے کا وقت: 15 منٹ

Firebase Cloud Functions ایک منظم Node.js ماحول میں کوڈ چلانے کے لیے ایک سرور سائڈ پلیٹ فارم ہے، جو Firebase ایونٹس، HTTPS درخواستوں اور Google Cloud خدمات میں تبدیلیوں کا جواب دیتا ہے۔ روایتی بیک اینڈ کے برعکس، ڈیویلپر کو سرور کنفیگر کرنے، ویب سرور انسٹال کرنے یا اسکیلنگ کے بارے میں فکر کرنے کی ضرورت نہیں ہے — ہر فنکشن ایک الگ تھلگ کنٹینر میں چلتا ہے اور خود بخود ضروری وسائل حاصل کرتا ہے۔ Google Firebase (2026) کے مطابق، پلیٹ فارم روزانہ 2 بلین سے زیادہ فنکشن کالز پر کارروائی کرتا ہے، لاکھوں موبائل ایپلیکیشنز کے لیے سرور لیس آرکیٹیکچر فراہم کرتا ہے۔

اہم نکات

  • Cloud Functions سرور سائڈ کوڈ ہے جو Firebase ایونٹس اور HTTPS درخواستوں کے جواب میں عمل میں آتا ہے۔
  • سرور لیس ماڈل بنیادی ڈھانچے کے انتظام کو ختم کرتا ہے: اسکیلنگ خود بخود ہوتی ہے۔
  • ٹرگرز میں Firestore، Realtime Database، Storage، Authentication اور Pub/Sub میں تبدیلیاں شامل ہیں۔
  • ڈیویلپمنٹ زبان — JavaScript، TypeScript یا Python (Google Cloud Functions کے ذریعے)۔
  • کولڈ سٹارٹ — غیرفعالیت کے بعد پہلی کال میں 2 سیکنڈ تک لگ سکتے ہیں۔

Firebase Cloud Functions کیا ہیں اور وہ کیسے کام کرتی ہیں

Firebase Cloud Functions ایک کمپیوٹنگ پلیٹ فارم ہے جو Google Cloud Functions (GCF) پر بنایا گیا ہے، Firebase ماحولیاتی نظام کے لیے ڈھالا گیا ہے۔ فنکشنز عام JavaScript یا TypeScript کوڈ ہوتے ہیں جو ایک ماڈیول سے برآمد کیے جاتے ہیں اور ایک مخصوص ایونٹ کی قسم کے لیے رجسٹرڈ ہوتے ہیں۔ جب کوئی ایونٹ ہوتا ہے (مثال کے طور پر، کوئی صارف رجسٹر ہوتا ہے یا فائل اپ لوڈ کرتا ہے)، Firebase Cloud Functions متعلقہ کوڈ چلاتا ہے، اسے ایونٹ کا سیاق و سباق فراہم کرتا ہے۔

Cloud Functions کا آرکیٹیکچر واحد ذمہ داری کے اصول پر عمل کرتا ہے: ایک فنکشن ایک ایونٹ کی قسم کو ہینڈل کرتا ہے اور ایک ایٹمی آپریشن انجام دیتا ہے۔ مثال کے طور پر، sendWelcomeEmail فنکشن Firebase Authentication میں نیا صارف بننے پر ٹرگر ہوتا ہے اور خوش آمدید ای میل بھیجتا ہے۔ اس طرح کی علیحدگی ڈیبگنگ، ٹیسٹنگ اور مختلف پروجیکٹس میں فنکشنز کے دوبارہ استعمال کو آسان بناتی ہے۔

ہر فنکشن ایک عارضی لائف سائیکل کے ساتھ الگ تھلگ کنٹینر میں چلتا ہے۔ زیادہ سے زیادہ عملدرآمد کا وقت ڈیفالٹ طور پر 60 سیکنڈ ہے (HTTPS فنکشنز — 9 منٹ)۔ اگر کوئی فنکشن ٹائم آؤٹ کے اندر مکمل نہیں ہوتا ہے، تو درخواست 500 ایرر کے ساتھ ناکام ہو جاتی ہے۔ طویل مدتی آپریشنز کے لیے، دوبارہ کوشش کے ساتھ Cloud Tasks یا Pub/Sub استعمال کریں۔ کنٹینرز بعد کی کالوں کے لیے دوبارہ استعمال کیے جا سکتے ہیں (keep-alive)، جو پہلی کال کے بعد کولڈ سٹارٹ میں تاخیر کو کم کرتا ہے۔

رن ٹائم ماحول اور Node.js ورژن

Firebase Cloud Functions متعدد Node.js ورژنز کو سپورٹ کرتا ہے: 18، 20 اور 22 (نئے پروجیکٹس کے لیے تجویز کردہ)۔ ورژن package.json فائل کے engines فیلڈ میں متعین کیا جاتا ہے۔ Firebase CLI متعین کردہ ورژن کی بنیاد پر خود بخود رن ٹائم ماحول کو کنفیگر کرتا ہے۔ اہم: Firebase Cloud Functions صوابدیدی Docker کنٹینرز چلانے کی حمایت نہیں کرتا — ماحول Google Cloud Functions کے ذریعے سختی سے طے شدہ ہے۔

نئے پروجیکٹس کے لیے، Node.js 22 تجویز کیا جاتا ہے کیونکہ اس میں تازہ ترین V8 اصلاحات، بہتر ESM ماڈیول سپورٹ اور پلیٹ فارم سطح پر WebSocket سپورٹ شامل ہے۔ اگر کوئی پروجیکٹ کسی مخصوص Node ورژن کے لیے بنائے گئے انحصار استعمال کرتا ہے (مثال کے طور پر، مقامی C++ ماڈیولز)، تو مطابقت کو انفرادی طور پر جانچنا چاہیے — تمام مقامی ماڈیولز GCF ماحول میں مرتب نہیں ہوتے ہیں۔

Firebase Cloud Functions اور Google Cloud Functions کے درمیان فرق

Firebase Cloud Functions Google Cloud Functions کے گرد ایک لفافہ ہے جس میں پیشگی انسٹال شدہ Firebase SDK اور Firebase خدمات کے ساتھ انضمام ہے۔ ڈیویلپر firebase-functions SDK استعمال کرکے کوڈ لکھتا ہے، جو تمام Firebase خدمات کے لیے ٹائپ شدہ ٹرگرز فراہم کرتا ہے۔ Google Cloud Functions ایک نچلی سطح کا پلیٹ فارم ہے جہاں ٹرگرز Eventarc یا Pub/Sub کے ذریعے واضح طور پر کنفیگر کیے جاتے ہیں۔

اہم فرق: Firebase Cloud Functions میں، ایک ٹرگر functions.firestore.document('path').onWrite() کے ذریعے اعلانیہ طور پر رجسٹرڈ ہوتا ہے، جبکہ Google Cloud Functions میں یہ ایونٹ وصف فلٹرنگ کے ساتھ Eventarc کے ذریعے کنفیگر کیا جاتا ہے۔ Firebase Cloud Functions پروجیکٹ کے سروس اکاؤنٹ کی اسناد کے ساتھ خود بخود شروع کردہ Admin SDK کے ساتھ بھی آتا ہے، جو اضافی سیٹ اپ کے بغیر تمام Firebase خدمات تک مکمل رسائی فراہم کرتا ہے۔

ٹرگرز کی اقسام: کون سے ایونٹس تعاون یافتہ ہیں

Firebase Cloud Functions 8 اقسام کے ٹرگرز کو سپورٹ کرتا ہے، ہر ایک کسی مخصوص Firebase یا Google Cloud سروس سے مطابقت رکھتا ہے۔ ٹرگر ایک شرط ہے جس کے پورا ہونے پر خود بخود ایک فنکشن طلب کیا جاتا ہے۔ ڈیویلپر براہ راست فنکشن کے لائف سائیکل کا انتظام نہیں کرتا: Firebase CLI Google Cloud Eventarc میں ٹرگر رجسٹر کرتا ہے، اور ایونٹ ہونے پر کلاؤڈ پلیٹ فارم فنکشن چلاتا ہے۔

سب سے مشہور ٹرگرز Firestore ٹرگرز ہیں: onWrite، onCreate، onUpdate، onDelete۔ یہ Firestore کلیکشنز میں دستاویزات تبدیل ہونے پر فعال ہوتے ہیں۔ فنکشن تبدیلی سے پہلے اور بعد میں دستاویز کے سنیپ شاٹس وصول کرتا ہے، جس سے قدروں کا موازنہ کرنے اور صرف مخصوص تبدیلیوں کا جواب دینے کی اجازت ملتی ہے۔ مثال کے طور پر، جب آرڈر کی حیثیت “زیر التوا” سے “بھیج دیا گیا” میں تبدیل ہوتی ہے، تو صارف کو پش نوٹیفکیشن بھیجا جا سکتا ہے۔

Authentication ٹرگرز (onCreate، onDelete) صارف اکاؤنٹ بننے یا حذف ہونے پر فعال ہوتے ہیں۔ یہ صارف ڈیٹا شروع کرنے کے لیے استعمال ہوتے ہیں: Firestore میں صارف دستاویز بنانا، خوش آمدید ای میل بھیجنا، تجزیات میں لکھنا۔ نوٹ: فنکشن صارف کی تخلیق کو منسوخ نہیں کر سکتا — یہ اکاؤنٹ پہلے ہی بننے کے بعد عمل میں آتا ہے۔ پہلے سے توثیق کے لیے، Identity Platform پر دستیاب Blocking Functions استعمال کریں۔

ٹرگر کی قسمایونٹاستعمال کی مثال
FirestoreonWrite, onCreate, onUpdate, onDeleteلائک شامل کرنے پر لائک کاؤنٹر اپ ڈیٹ کرنا
AuthenticationonCreate, onDeleteرجسٹریشن پر صارف پروفائل بنانا
Realtime DBonWrite, onCreate, onUpdate, onDeleteچیٹ پیغام کی نگرانی
StorageonFinalize, onArchive, onDeleteتصویر اپ لوڈ کرنے کے بعد تھمب نیل بنانا
Pub/SubonPublishCloud Scheduler کے ذریعے طے شدہ عملدرآمد (cron)
HTTPSonRequestبیرونی خدمات کے لیے REST API اینڈ پوائنٹ

HTTPS ٹرگرز اور CORS

HTTPS فنکشنز (onRequest) HTTP کے ذریعے قابل رسائی مکمل REST API اینڈ پوائنٹس بنانے کی اجازت دیتے ہیں۔ ایونٹ پر مبنی ٹرگرز کے برعکس، HTTPS فنکشنز https://{region}-{project}.cloudfunctions.net/{functionName} فارم کے URL کے ذریعے طلب کیے جاتے ہیں۔ اگر اینڈ پوائنٹ کو براؤزر یا موبائل ایپلیکیشن سے بلایا جاتا ہے تو CORS کو صحیح طریقے سے کنفیگر کرنا ضروری ہے۔ Firebase SDK خود بخود CORS ہیڈرز شامل نہیں کرتا — انہیں مڈل ویئر کے ذریعے دستی طور پر شامل کرنا ضروری ہے۔

موبائل کلائنٹس (Android، iOS) کے لیے، CORS ضروری نہیں ہے کیونکہ مقامی HTTP کلائنٹس کراس-اوریجن پالیسی سے محدود نہیں ہیں۔ CORS صرف ویب درخواستوں کے لیے متعلقہ ہے۔ اگر آپ کا HTTPS فنکشن ایپ اور ویب دونوں سے بلایا جاتا ہے، تو یونیورسل CORS ہینڈلنگ شامل کریں: ڈیویلپمنٹ کے لیے res.set('Access-Control-Allow-Origin', '*') یا پروڈکشن کے لیے اجازت شدہ ڈومینز کی فہرست۔

Pub/Sub اور Cloud Scheduler کے ساتھ شیڈولنگ

متواتر عملدرآمد (cron کاموں) کے لیے، Cloud Scheduler اور Pub/Sub کا مجموعہ استعمال کریں۔ Cloud Scheduler ایک شیڈول کے مطابق Pub/Sub ٹاپک کو پیغام بھیجتا ہے، اور Cloud Functions کا onPublish ٹرگر اس پیغام پر کارروائی کرتا ہے۔ Firebase CLI براہ راست cron نحو کی حمایت نہیں کرتا — شیڈول Google Cloud کنسول یا Terraform کے ذریعے unix-cron فارمیٹ میں کنفیگر کیا جاتا ہے: 0 3 * * * (ہر روز 3:00 بجے)۔

مثال کے کام: یومیہ نیوز لیٹر، پرانے ڈیٹا کی صفائی، رپورٹس بنانا، بیرونی APIs کے ساتھ ہم آہنگی۔ اہم: Cloud Scheduler ایک ادائیگی والی Google Cloud سروس ہے (تقریباً $2 فی مہینہ فی کام)۔ ہر ایکٹیویشن کو ایک علیحدہ فنکشن کال شمار کیا جاتا ہے اور معیاری Cloud Functions کی شرحوں پر بل کیا جاتا ہے۔

فنکشن کیسے لکھیں اور ڈیپلائے کریں

Cloud Functions ڈیویلپمنٹ Firebase CLI کے ذریعے پروجیکٹ شروع کرنے سے شروع ہوتی ہے: firebase init functions۔ یہ کمانڈ index.js (یا index.ts) ٹیمپلیٹ، package.json فائل اور TypeScript کنفیگریشن (اگر منتخب کیا گیا ہو) کے ساتھ ایک functions/ ڈائریکٹری بناتا ہے۔ ابتدا کے بعد، بس ایک فنکشن لکھیں، اسے ماڈیول سے برآمد کریں، اور ڈیپلائے کرنے کے لیے firebase deploy --only functions چلائیں۔

ہر فنکشن مناسب ٹرگر طریقہ کو کال کرکے رجسٹرڈ ہوتا ہے۔ HTTPS فنکشن کی مثال: exports.helloWorld = functions.https.onRequest((req, res) => { res.send(“Hello!”); })۔ Firebase Functions ایک غیر مطابقت پذیر ماڈل استعمال کرتا ہے: ایونٹ پر مبنی ٹرگرز (غیر HTTPS) کے لیے، فنکشن کو Promise واپس کرنا چاہیے۔ Firebase کنٹینر ختم کرنے سے پہلے Promise کے مکمل ہونے کا انتظار کرتا ہے۔ اگر Promise واپس نہیں کیا جاتا ہے، تو فنکشن غیر مطابقت پذیر کارروائیوں کے مکمل ہونے سے پہلے ختم ہو سکتا ہے۔

مقامی ڈیویلپمنٹ Firebase Emulator Suite کے ذریعے کی جاتی ہے، جس میں Cloud Functions ایمولیٹر شامل ہے۔ کمانڈ firebase emulators:start http://localhost:5001 پر قابل رسائی فنکشنز کے ساتھ ایک مقامی سرور شروع کرتا ہے۔ ایمولیٹر کوڈ تبدیل ہونے پر ہاٹ ریلوڈ کو سپورٹ کرتا ہے اور پروڈکشن ماحول سے مکمل طور پر الگ تھلگ ہے، جو حقیقی ڈیٹا کو خطرے میں ڈالے بغیر ٹیسٹنگ کی اجازت دیتا ہے۔

انحصار اور کنفیگریشن کا انتظام

Cloud Functions کے انحصار کا انتظام package.json کے ذریعے کیا جاتا ہے۔ Firebase صرف پروڈکشن انحصار (dependencies، devDependencies نہیں) انسٹال کرتا ہے۔ فنکشن پیکیج کا سائز کولڈ سٹارٹ کے وقت کو متاثر کرتا ہے: انحصار کی تعداد کو کم سے کم کرنے کی سفارش کی جاتی ہے۔ Firebase Admin SDK کے لیے firebase-admin انحصار پہلے سے انسٹال ہے — اسے دستی طور پر شامل کرنے کی ضرورت نہیں ہے۔

خفیہ ڈیٹا (API چابیاں، ٹوکن) فنکشن کوڈ میں محفوظ نہیں کیا جانا چاہیے۔ کنفیگریشن محفوظ کرنے کے لیے functions.config() استعمال کریں: firebase functions:config:set stripe.key=“sk_...”۔ اقدار کو خفیہ کیا جاتا ہے اور functions.config().stripe.key کے ذریعے رن ٹائم پر دستیاب ہوتی ہیں۔ بڑی سیریلائزڈ کنفیگریشنز کے لیے، Google Cloud Secret Manager استعمال کریں۔

ایرر ہینڈلنگ اور لاگنگ

Cloud Functions میں لاگنگ console.log، console.warn اور console.error کے ذریعے کی جاتی ہے۔ تمام لاگز خود بخود Google Cloud Logging میں جمع ہوتے ہیں اور Firebase کنسول (Functions > Logs) میں دستیاب ہوتے ہیں۔ سٹرکچرڈ لاگنگ کے لیے، winston یا pino لائبریریاں استعمال کریں، جو JSON فارمیٹنگ اور لاگ لیولز کو سپورٹ کرتی ہیں۔

ایرر ہینڈلنگ قابل اعتماد ہونے کے لیے بہت اہم ہے: Promise میں ایک غیر ہینڈلڈ استثنا فنکشن کو ایرر کے ساتھ ختم کرتا ہے، جس کے بعد Firebase خود بخود ایکسپونینشل بیک آف کے ساتھ دوبارہ کوشش کرتا ہے۔ دوبارہ کوششوں کی تعداد کنفیگر کی جا سکتی ہے: 0 سے لامحدود تک۔ ایونٹ پر مبنی ٹرگرز کے لیے، بیرونی خدمات میں عارضی ناکامیوں کے دوران بھی ہر ایونٹ کی پروسیسنگ کو یقینی بنانے کے لیے دوبارہ کوشش کو فعال کرنے کی سفارش کی جاتی ہے۔

کولڈ سٹارٹ اور اسکیلنگ

کولڈ سٹارٹ (cold start) غیرفعالیت کی مدت کے بعد فنکشن کی پہلی طلبی میں تاخیر ہے، جب کوڈ والا کنٹینر دوبارہ لوڈ اور شروع کیا جاتا ہے۔ Firebase دستاویزات (2026) کے مطابق، کولڈ سٹارٹ پیکیج کے سائز، انحصار کی تعداد اور علاقے کے لحاظ سے 200 ms سے 2 سیکنڈ تک لیتا ہے۔ صارف انٹرفیس کے لیے، 1 سیکنڈ سے زیادہ کی تاخیر نمایاں ہے اور صارف کے تجربے کو متاثر کر سکتی ہے۔

کولڈ سٹارٹ کو کم سے کم کرنے کے طریقے: انحصار کم سے کم کریں، CommonJS میں مرتب کردہ TypeScript استعمال کریں، فنکشن پیکیج کا سائز کم کریں، فعال مثالوں کی کم از کم تعداد مقرر کریں۔ Firebase Cloud Functions v2 (دوسری نسل) minInstances — درخواستوں پر کارروائی کرنے کے لیے ہمیشہ تیار گرم کنٹینرز کی کم از کم تعداد مقرر کرنے کی اجازت دیتا ہے۔ کنٹینرز کو گرم رکھنے پر بیکار وقت کے لیے چارج لگتا ہے۔

Cloud Functions کی اسکیلنگ خود بخود ہوتی ہے: درخواستوں کے حجم میں اضافے پر، Firebase نئے کنٹینرز بناتا ہے۔ ڈیفالٹ طور پر، متوازی مثالوں کی زیادہ سے زیادہ تعداد 3000 ہے (Google Cloud پروجیکٹ کوٹہ)۔ ہر مثال ایک وقت میں ایک درخواست پر کارروائی کرتی ہے۔ اگر کوئی فنکشن تیز ہے (100 ms سے کم)، تو ایک مثال فی سیکنڈ 10 درخواستوں تک پر کارروائی کر سکتی ہے، جو فی پروجیکٹ فی سیکنڈ 30,000 درخواستوں تک کی چوٹی تھروپٹ فراہم کرتی ہے۔

minInstances اور maxInstances کنفیگر کرنا

minInstances ایک پیرامیٹر ہے جو کنٹینرز کی ایک مخصوص تعداد محفوظ رکھتا ہے اور انہیں گرم رکھتا ہے۔ یہ اہم HTTPS فنکشنز کے لیے تجویز کیا جاتا ہے جہاں کولڈ سٹارٹ لیٹنسی ناقابل قبول ہے۔ مثال کے طور پر، تصدیقی اینڈ پوائنٹ کے لیے، minInstances: 1 سیٹ کریں۔ maxInstances متوازی مثالوں کی زیادہ سے زیادہ تعداد کو محدود کرتا ہے، جو اچانک ٹریفک اسپائکس کے دوران بے قابو لاگت میں اضافے کو روکنے کے لیے مفید ہے۔

کنفیگریشن کوڈ میں کی جاتی ہے: functions.runWith({ minInstances: 1, maxInstances: 10 })۔ اہم: minInstances لاگت بڑھاتا ہے کیونکہ کنٹینرز مسلسل چلتے رہتے ہیں۔ ٹیسٹ پروجیکٹس کے لیے، minInstances غیر فعال کرنا چاہیے۔ پروڈکشن کے لیے، تمام عوامی HTTPS فنکشنز کے لیے minInstances اور ایونٹ پر مبنی ٹرگرز کے لیے 0 تجویز کیا جاتا ہے جہاں 1 سیکنڈ کی تاخیر اہم نہیں ہے۔

ڈیپلائیمنٹ کے علاقے

ڈیپلائیمنٹ کا علاقہ آخری صارفین کے لیے تاخیر اور باہر جانے والے ٹریفک کی لاگت کو متاثر کرتا ہے۔ Firebase Cloud Functions 30+ Google Cloud علاقوں میں دستیاب ہے۔ موبائل ایپلیکیشنز کے لیے، اپنے ہدف والے سامعین کے قریب ترین علاقہ منتخب کریں: امریکہ کے لیے us-central1، یورپ کے لیے europe-west1، ایشیا کے لیے asia-east2۔ فنکشن کو دوبارہ ڈیپلائے کیے بغیر علاقہ تبدیل نہیں کیا جا سکتا۔

علاقہ تبدیل کرنا کوڈ میں region پیرامیٹر کے ذریعے کیا جاتا ہے: functions.region('europe-west1')۔ ایک فائل میں تمام فنکشنز کے مختلف علاقے ہو سکتے ہیں۔ عالمی پروجیکٹس کے لیے، متعدد علاقوں میں فنکشنز ڈیپلائے کرنے اور ٹریفک کی تقسیم کے لیے Cloud Load Balancing استعمال کرنے کی سفارش کی جاتی ہے، حالانکہ زیادہ تر موبائل ایپلیکیشنز کے لیے صحیح انتخاب کرنے پر ایک ہی علاقہ کافی ہے۔

Firebase Cloud Functions کے لیے کوڈ مثالیں

آئیے TypeScript میں Cloud Functions کی عملی مثالیں دیکھتے ہیں۔ کوڈ ES ماڈیول نحو کے ساتھ Firebase Functions SDK v2 (دوسری نسل) استعمال کرتا ہے۔ مثالوں میں صارف تخلیق کے ایونٹ کو ہینڈل کرنا، تصویر اپ لوڈ کرنے پر تھمب نیل بنانا، اور REST API کے لیے ایک سادہ HTTPS اینڈ پوائنٹ شامل ہے۔ تمام فنکشنز غیر مطابقت پذیر ہیں اور کنٹینر کے مناسب خاتمے کے لیے Promise واپس کرتے ہیں۔

چلانے سے پہلے، یقینی بنائیں کہ Firebase CLI ورژن 13+ میں اپ ڈیٹ ہے: npm install -g firebase-tools۔ v2 فنکشنز کے لیے Blaze قیمت کا منصوبہ درکار ہے۔ ابتدا: TypeScript منتخب کے ساتھ firebase init functions۔

صارف رجسٹریشن کو ہینڈل کرنا

پہلی مثال — جب نیا صارف رجسٹر ہوتا ہے تو Firestore میں ایک دستاویز بنانا۔ فنکشن auth.user().onCreate ایونٹ سے ٹرگر ہوتا ہے اور users/{uid} کلیکشن میں ایک بنیادی پروفائل لکھتا ہے۔ یہ یقینی بناتا ہے کہ ہر رجسٹرڈ صارف کے پاس ضروری فیلڈز کے ساتھ ایک دستاویز موجود ہے۔

typescript
import * as functions from "firebase-functions"
import * as admin from "firebase-admin"

admin.initializeApp()

export const createUserProfile = functions.auth
    .user()
    .onCreate(async (user) => {
        const profile = {
            email: user.email,
            displayName: user.displayName ?? "User",
            createdAt: admin.firestore.Timestamp.now(),
            role: "free",
            avatarUrl: null,
        }

        await admin.firestore()
            .collection("users")
            .doc(user.uid)
            .set(profile)

        console.log(`Profile created for ${user.uid}`)
    })

createUserProfile فنکشن غیر مطابقت پذیر ہے — یہ ایک Promise واپس کرتا ہے جسے Firebase ختم ہونے سے پہلے منتظر رہتا ہے۔ اگر Firestore میں لکھنا ناکام ہو جاتا ہے (مثال کے طور پر، ناکافی اجازتوں کی وجہ سے)، تو فنکشن خود بخود دوبارہ کوشش کرے گا (اگر دوبارہ کوشش فعال ہے)۔ “free” قدر کے ساتھ role فیلڈ resource.data.role کا مطلوبہ رسائی کی سطح سے موازنہ کرکے براہ راست Firestore Security Rules میں مفت منصوبہ کی پابندیاں نافذ کرنے کی اجازت دیتا ہے۔

تصویر اپ لوڈ کرنے پر تھمب نیل بنانا

دوسری مثال — تصویر اپ لوڈ ہونے کے بعد خود بخود تھمب نیل بنانے کے لیے ایک Storage ٹرگر۔ فنکشن 200×200 پکسلز کی ایک چھوٹی کاپی بناتا ہے اور اسے thumb_ سابقے کے ساتھ اصل فائل کے راستے پر محفوظ کرتا ہے۔ تصویر کی پروسیسنگ sharp لائبریری استعمال کرتی ہے، جو تمام عام فارمیٹس کو سپورٹ کرتی ہے اور سسٹم کے انحصار کے بغیر Node.js ماحول میں کام کرتی ہے۔

typescript
import * as path from "path"
import * as os from "os"
import * as sharp from "sharp"

export const generateThumbnail = functions.storage
    .object()
    .onFinalize(async (object) => {
        if (!object.contentType?.startsWith("image/")) return

        const filePath = object.name!
        const thumbPath = filePath.replace(
            /(\.\w+)$/, "_thumb$1"
        )

        const bucket = admin.storage().bucket()
        const tempDir = os.tmpdir()
        const tempFile = path.join(tempDir, path.basename(filePath))

        await bucket.file(filePath).download({ destination: tempFile })
        await sharp(tempFile)
            .resize(200, 200, { fit: "cover" })
            .toFile(tempFile.replace(/(\.\w+)$/, "_thumb$1"))

        await bucket.upload(tempFile.replace(
            /(\.\w+)$/, "_thumb$1"
        ), { destination: thumbPath })
    })

generateThumbnail فنکشن آبجیکٹ کے Content-Type کو چیک کرتا ہے اور غیر تصاویر کو نظر انداز کرتا ہے، وسائل بچاتا ہے۔ sharp استعمال کرنے کے لیے، انحصار کو package.json میں شامل کرنا ضروری ہے۔ تھمب نیل fit: “cover” پیرامیٹر کے ساتھ بنایا جاتا ہے، جو تصویر کو مرکز سے 200×200 پکسل مربع میں کراپ کرتا ہے۔ تخلیق کے بعد، تھمب نیل تبدیل شدہ نام کے ساتھ اسی بکیٹ میں واپس اپ لوڈ کیا جاتا ہے۔

عوامی API کے لیے HTTPS اینڈ پوائنٹ

تیسری مثال — ایک HTTPS فنکشن جو سرور کی حیثیت چیک کرنے کے لیے REST API اینڈ پوائنٹ لاگو کرتا ہے۔ فنکشن GET درخواست قبول کرتا ہے اور پروجیکٹ سے منسلک Firebase خدمات کی حالت کے بارے میں JSON واپس کرتا ہے۔ یہ اینڈ پوائنٹ مانیٹرنگ اور بیرونی سسٹمز کے لیے مفید ہے جنہیں ڈیٹا بھیجنے سے پہلے بیک اینڈ کی دستیابی کی تصدیق کرنی ہوتی ہے۔

typescript
import * as express from "express"

const app = express.Router()

app.get("/status", async (req, res) => {
    try {
        const db = admin.firestore()
        await db.collection("_health").doc("check").get()
        res.json({ status: "ok", timestamp: Date.now() })
    } catch (error) {
        res.status(503).json({ status: "error", message: error })
    }
})

export const api = functions.https.onRequest(app)

api فنکشن روٹنگ کے لیے express Router استعمال کرتا ہے، جو ایک فنکشن میں متعدد اینڈ پوائنٹس بناتے وقت آسان ہے۔ ہیلتھ چیک _health کلیکشن میں Firestore میں لکھتا ہے، جس سے ایک ساتھ Firestore کی دستیابی کی تصدیق ہو سکتی ہے۔ پروڈکشن کے لیے، عوامی اینڈ پوائنٹ کے غلط استعمال کو روکنے کے لیے API کلید یا Firebase Auth ٹوکن کے ذریعے درخواست کی تصدیق شامل کرنے کی سفارش کی جاتی ہے۔

موبائل ایپلیکیشنز میں عام استعمال کے معاملات

Cloud Functions عام طور پر ان کاموں کے لیے استعمال ہوتے ہیں جو کلائنٹ پر نہیں کیے جا سکتے یا نہیں کیے جانے چاہئیں: پش نوٹیفکیشن بھیجنا، اپ لوڈ کردہ تصاویر کے پیش نظارہ بنانا، بیرونی ادائیگی کے نظاموں کے ساتھ انضمام، مواد کی نگرانی، Firebase اور تیسرے فریق کی خدمات کے درمیان ڈیٹا کی ہم آہنگی۔ سرور لیس ماڈل ان کاموں کو لاگت میں موثر بناتا ہے: آپ صرف کوڈ کے اصل عملدرآمد کے وقت کی ادائیگی کرتے ہیں۔

ادائیگی کے نظام کا انضمام ایپ میں خریداریوں والی ایپس کے لیے ایک عام منظرنامہ ہے۔ Cloud Functions ادائیگی فراہم کنندہ (Stripe، PayPal) سے ویب ہک وصول کرتا ہے، درخواست کے دستخط کی تصدیق کرتا ہے، Firestore میں سبسکرپشن کی حیثیت کو اپ ڈیٹ کرتا ہے، اور صارف کو تصدیق بھیجتا ہے۔ تمام کوڈ سرور پر چلتا ہے جس میں کلائنٹ پر ڈیٹا میں چھیڑ چھاڑ کا کوئی خطرہ نہیں ہے۔ Stripe دستاویزات (2026) کے مطابق، ویب ہک پروسیسنگ میں 500 ms سے کم وقت لگتا ہے۔

ذہین مواد کی نگرانی Google Cloud Vision API کے ذریعے اپ لوڈ کردہ تصاویر کو خود بخود چیک کرنے کے لیے Cloud Function Storage ٹرگر استعمال کرتی ہے۔ فنکشن غیر محفوظ مواد (تشدد، بالغ مواد) کا پتہ لگانے کے لیے تصویر Vision API کو بھیجتا ہے اور، اگر حد سے تجاوز ہو جائے تو، فائل کو حذف کرتا ہے اور منتظم کو مطلع کرتا ہے۔ یہ منظرنامہ صارف گیلریوں والی UGC ایپلیکیشنز کے لیے اہم ہے۔

ڈیٹا ایگریگیشن — Firebase Realtime Database کاؤنٹرز کے متبادل کے طور پر Cloud Functions۔ کلائنٹ پر کاؤنٹر پڑھنے اور لکھنے (جو ریس کنڈیشن کا باعث بنتا ہے) کے بجائے، جمع شدہ فیلڈز کی ایٹمی اپ ڈیٹس کے لیے Firestore onWrite ٹرگر استعمال کریں۔ مثال کے طور پر، ایک فنکشن /posts/{postId}/likes/{userId} ذیلی کلیکشن میں دستاویز شامل یا حذف ہونے پر پوسٹ لائکس کی تعداد شمار کرتا ہے اور پیرنٹ دستاویز میں likesCount فیلڈ کو اپ ڈیٹ کرتا ہے۔

اکثر پوچھے گئے سوالات

ایک فنکشن کتنی دیر تک چل سکتا ہے؟

زیادہ سے زیادہ عملدرآمد کا وقت قسم پر منحصر ہے: HTTPS فنکشنز — 9 منٹ، ایونٹ پر مبنی ٹرگرز — 60 سیکنڈ (v2: 60 منٹ تک)۔ طویل مدتی کارروائیوں کے لیے، غیر مطابقت پذیر پروسیسنگ کے ساتھ Cloud Tasks یا Pub/Sub استعمال کریں۔ ٹائم آؤٹ کوڈ میں runWith({ timeoutSeconds: 120 }) کے ذریعے کنفیگر کیا جاتا ہے۔

Cloud Functions کو مقامی طور پر کیسے ڈیبگ کریں؟

Firebase Emulator Suite استعمال کریں: firebase emulators:start --only functions۔ ایمولیٹر ہاٹ ریلوڈ سپورٹ کے ساتھ پورٹ 5001 پر مقامی طور پر فنکشنز چلاتا ہے۔ Firestore اور Auth ٹرگرز کے لیے، ایمولیٹر حقیقی خدمات کو تبدیل کرتا ہے، پروڈکشن ڈیٹا کو خطرے میں ڈالے بغیر منظرناموں کی جانچ کی اجازت دیتا ہے۔

پہلی نسل اور دوسری نسل کے فنکشنز میں کیا فرق ہے؟

دوسری نسل Google Cloud Run اور Eventarc استعمال کرتی ہے، جو طویل ٹائم آؤٹ (60 منٹ تک)، ایک مثال کے ذریعے بیک وقت درخواستوں کی پروسیسنگ اور Google Cloud خدمات کے ساتھ بہتر انضمام فراہم کرتی ہے۔ پہلی نسل Google Cloud Functions استعمال کرتی ہے اور ایونٹ پر مبنی فنکشنز کے لیے 60 سیکنڈ تک محدود ہے۔ Firebase نئے پروجیکٹس دوسری نسل کے ساتھ شروع کرنے کی سفارش کرتا ہے۔

کیا میں JavaScript کی بجائے Python استعمال کر سکتا ہوں؟

Firebase Cloud Functions سرکاری طور پر صرف Node.js (JavaScript اور TypeScript) کو سپورٹ کرتا ہے۔ Python کے لیے، Python کے لیے Firebase Admin SDK کے ساتھ براہ راست Google Cloud Functions استعمال کریں۔ Firebase Admin SDK Python صرف Node.js کے ذریعے دستیاب کچھ Firebase مخصوص ٹرگرز کے علاوہ تمام کارروائیوں کو سپورٹ کرتا ہے۔

HTTPS فنکشن کو غیر مجاز رسائی سے کیسے بچایا جائے؟

تصدیق شدہ رسائی کے لیے، Authorization ہیڈر میں Firebase ID ٹوکن کی تصدیق کریں: admin.auth().verifyIdToken(token)۔ سرور ٹو سرور انضمام کے لیے، سروس اکاؤنٹ یا API چابیاں کے ساتھ Firebase Admin SDK استعمال کریں۔ شرح کی حد بندی والے عوامی اینڈ پوائنٹس کے لیے، Cloud Armor یا مڈل ویئر کے ذریعے شرح کی حد بندی استعمال کریں۔

خلاصہ

  • Firebase Cloud Functions — Firebase ایونٹس اور HTTPS درخواستوں کے جواب میں کوڈ چلانے کے لیے ایک سرور لیس پلیٹ فارم۔
  • ٹرگرز Firestore، Authentication، Storage، Realtime Database، Pub/Sub اور HTTPS کے لیے تعاون یافتہ ہیں۔
  • کولڈ سٹارٹ — بنیادی خرابی: غیرفعالیت کے بعد پہلی کال پر 2 سیکنڈ تک تاخیر، minInstances سے کم۔
  • اسکیلنگ 3000 متوازی مثالوں تک خود بخود ہوتی ہے، فی عملدرآمد ادائیگی۔
  • ڈیویلپمنٹ Firebase Emulator Suite کے ذریعے مقامی جانچ کے ساتھ JavaScript/TypeScript میں۔
  • فنکشن کوڈ واحد ذمہ داری کے نمونے پر عمل کرتا ہے: ایک فنکشن — ایک ایونٹ کی قسم۔
  • کنفیگریشن ڈیٹا کی حفاظت functions.config() یا Google Cloud Secret Manager کے ذریعے یقینی بنائی جاتی ہے۔

ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے

IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔

پروجیکٹ پر بحث کریں

مزید پڑھیں