جنریٹو AI کا دھماکہ ہزاروں ویب ڈویلپرز کو اپنی ایپس میں ذہین خصوصیات شامل کرنے پر مجبور کر رہا ہے۔
پہلی جبلت عام طور پر جیمنی API کے SDK کو براہ راست براؤزر سے کال کرنا ہے۔ یہ جبلت آپ کی API کیز کو دنیا کے سامنے ظاہر کرنے کے سنگین سیکیورٹی رسک کے ساتھ آتی ہے۔
اس آرٹیکل میں، آپ سیکھیں گے کہ خام Gemini API کیز کو کلائنٹس کو دینا کیوں خطرناک ہے، Firebase AI Logic کا پراکسی فن تعمیر کیسے اسے حل کرتا ہے، اور Firebase App Check اس مسئلے کے آخری حصے کو کیسے حل کرتا ہے جو اکیلے پراکسی نہیں کر سکتے۔
آخر میں، آپ کے پاس ورکنگ پروڈکشن طرز کا سیٹ اپ ہوگا، جس میں ایک محفوظ AI منطق کلائنٹ، مناسب طریقے سے ترتیب شدہ ایپ چیک فلو (بشمول ڈیبگ ٹوکنز)، حقیقی دنیا کے استعمال کے نمونے، اسٹریمنگ، ملٹی ٹرن چیٹ، اور ساختی JSON آؤٹ پٹ شامل ہیں۔ console.log.
انڈیکس
شرائط
شروع کرنے سے پہلے، یقینی بنائیں کہ آپ کے پاس درج ذیل ہیں:
-
Node.js v18 یا اس سے زیادہ (
node --version) -
کوئی راستہ نہیں گوگل اکاؤنٹ ایک فائربیس پروجیکٹ بنائیں (مفت اسپارک پلان جیمنی ڈیولپر API کے ساتھ کام کرتا ہے)
-
جاوا اسکرپٹ کا بنیادی علم،
async/awaitاور ES ماڈیول -
کوڈ ایڈیٹر اور ٹرمینل
یہ گائیڈ آپ کو زمین سے اوپر لے جاتی ہے، لہذا آپ کو Firebase، AppCheck، یا Gemini API کے ساتھ کسی پیشگی تجربے کی ضرورت نہیں ہے۔
کلائنٹ سائیڈ API کلیدی مسئلہ
جاوا اسکرپٹ بنڈل کے اندر یا .env فائل کو براؤزر پر منتقل کرنا ایک سنگین سیکیورٹی خامی ہے اور اس کا فائدہ اٹھانا بہت آسان ہے۔ عملی طور پر یہ کیسا لگتا ہے یہاں ہے:
آئیے فرض کریں کہ آپ جیمنی API کو اپنے کلائنٹ کوڈ سے اس طرح کال کرتے ہیں:
// DON'T do this in a browser-shipped app
const genAI = new GoogleGenerativeAI("AIzaSyD4-your-real-key-here");
اسے تعمیراتی ٹول کے ساتھ بنڈل کرنے سے آؤٹ پٹ JS میں کلیدیں سادہ متن میں ظاہر ہوں گی۔ کوئی بھی خصوصی ٹولز کی ضرورت کے بغیر اسے ایک منٹ سے بھی کم وقت میں تلاش کر سکتا ہے۔
# Anyone can run this against your deployed bundle
curl -s https://your-app.com/assets/main.js | grep -oE "AIzaSy[A-Za-z0-9_-]{33}"
یہ کمانڈ miniified پروڈکشن بنڈل سے Gemini API کلید نکالتی ہے، اگر یہ موجود ہے۔ آپ کے براؤزر کے ڈویلپمنٹ ٹولز میں موجود نیٹ ورک ٹیب آپ کو باہر جانے والی تمام درخواستوں کا بہت بہتر نظارہ فراہم کرتا ہے: generativelanguage.googleapis.com کلید کو براہ راست استفسار کے سٹرنگ یا ہیڈر میں ڈسپلے کریں۔
اگر Gemini API کلید اس طرح لیک ہو جاتی ہے تو حملہ آور یہ کر سکتا ہے:
-
اپنا پورا استعمال کا کوٹہ استعمال کریں۔
-
کلاؤڈ بل غیر متوقع طور پر بڑھتے ہیں (جیمنی کالز کا بل فی ٹوکن، فلیٹ ریٹ ڈیٹا بیس کے پڑھنے کے برعکس ہوتا ہے)۔
-
اگر آپ اپنی درخواستوں پر عمل درآمد کرنے کے لیے وسائل کا استعمال کرتے ہیں، تو آپ کا گوگل کلاؤڈ پروجیکٹ کسی استحصال کی وجہ سے منجمد ہو سکتا ہے۔
تاریخی طور پر، واحد حل یہ تھا کہ ایک کسٹم بیک اینڈ سرور (Node.js, Python, Go…) کو بنایا جائے، تعینات کیا جائے اور اسے برقرار رکھا جائے جو آپ کی ایپ اور Gemini API کے درمیان ایک پراکسی کے طور پر کام کرتا ہے تاکہ اس سنگل سٹرنگ کو خفیہ رکھا جا سکے۔ یہ چلانے کے لیے اصل بنیادی ڈھانچہ ہے جو ایک سادہ فنکشن ہونا چاہیے۔
مرحلہ 1 – Firebase AI Logic کا پراکسی فن تعمیر کیسے کام کرتا ہے۔
Firebase AI منطق ہم پراکسی گیٹ وے کی تعمیر یا میزبانی کی ضرورت کے بغیر ایک پراکسی گیٹ وے فراہم کرتے ہیں۔ آپ اب بھی کلائنٹ سائیڈ کوڈ لکھتے ہیں، لیکن آپ کی چابیاں کبھی بھی گوگل کے بنیادی ڈھانچے کو نہیں چھوڑتی ہیں۔
[Web Browser] ──(Authenticated Request)──> [Firebase AI Logic Proxy] ──(Key Injected Server-Side)──> [Gemini API]
آپ کی Gemini API کلید آپ کے Firebase پروجیکٹ سے منسلک ہے اور محفوظ طریقے سے اسٹور کی گئی ہے۔ کلائنٹ SDK پراکسی گیٹ وے کو ایک درخواست بھیجتا ہے، جو کلید داخل کرتا ہے اور کال کو آپ کی پسند کے "Gemini API” فراہم کنندہ کو بھیج دیتا ہے۔ کلید جے ایس بنڈل، نیٹ ورک کی درخواست، یا کسی اور چیز میں موجود نہیں ہے جس کا براؤزر معائنہ کر سکتا ہے۔
Firebase AI Logic دو فراہم کنندگان کو سپورٹ کرتی ہے، جن کا انتخاب کنسول میں سروس سیٹ اپ کرتے وقت کیا جاتا ہے۔
| Gemini Developer API | Agent Platform Gemini API (سابقہ Vertex AI) | |
|---|---|---|
| ادائیگی کی منصوبہ بندی | مفت اسپارک پلان پر کام کرتا ہے۔ | بلیز (جیسی ادائیگی کریں) پلان درکار ہے۔ |
| کے لیے بہترین موزوں ہے۔ | فوری آغاز، پروٹو ٹائپنگ، زیادہ تر ویب/موبائل ایپس | ڈیٹا کی رہائش کے تقاضے، ٹیمیں پہلے سے ہی Google Cloud/Vertex AI استعمال کر رہی ہیں۔ |
| مقامی کنٹرول | محدود | براہ کرم ایک مخصوص علاقہ منتخب کریں (us، eu) ماڈل تک رسائی کے لیے ماڈل پر منحصر ہے۔ |
| رگڑ کی ترتیبات | کم سے کم، بلنگ کی ضرورت نہیں ہے۔ | کلاؤڈ بلنگ اکاؤنٹ کنکشن درکار ہے۔ |
زیادہ تر ایپس کے لیے، Gemini Developer API سے شروع کریں، جسے ہم اس ٹیوٹوریل میں استعمال کرتے ہیں۔ فراہم کنندگان کو بعد میں تبدیل کرنا کنفیگریشن میں تبدیلی ہے، کوڈ کو دوبارہ لکھنا نہیں۔ کیونکہ دونوں ایک ہی عمل سے گزرتے ہیں۔ getGenerativeModel() انٹرفیس
مرحلہ 2 – Firebase ایپ اصل میں کیا چیک کرتی ہے۔
پراکسی آپ کی چابیاں چھپاتے ہیں۔ یہ خود سے نہیں رکتا۔ جو بھی فائر بیس کنفیگریشن آبجیکٹ بنانے کے لیے اس پراکسی کو کال کریں (apiKey، projectIdوغیرہ) خفیہ نہیں ہیں، انہیں عوامی ہونے کے لیے ڈیزائن کیا گیا ہے، اور وہ تمام تقسیم شدہ ایپس کے بنڈل میں ظاہر ہونے کے لیے ڈیزائن کیے گئے ہیں۔ کسی دوسری پرت کے بغیر، آپ کا بوٹ اس کنفیگریشن کو کاپی کر سکتا ہے، آپ کے پروجیکٹ کی طرف اشارہ کرنے والی اپنی Firebase ایپ کو شروع کر سکتا ہے، اور کسی حقیقی صارف کی شمولیت کے بغیر Gemini انوائسز چلانے کے لیے AI Logic پراکسی کو براہ راست کال کر سکتا ہے۔
یہ ہے فائر بیس ایپ چیک کریں۔ تصدیق کے ساتھ الجھن میں پڑنا آسان ہے، لہذا یہ سمجھنا اچھا خیال ہے کہ یہ کیا کرتا ہے۔
ایپ چیک ثبوت ہے، تصدیق نہیں۔ Firebase توثیق کا جواب "یہ صارف کون ہے؟” ایپ چیک دیگر سوالات کے جوابات دیتا ہے، جیسے: ‘کیا یہ درخواست کسی حقیقی، غیر چھیڑ چھاڑ سے آرہی ہے؟ میری ایپکیا یہ اسکرپٹ، بوٹ، یا کسی اور کی ایپ نہیں ہے جو میری کنفیگریشن کا استعمال کر رہی ہے؟’ دونوں کو ایک ساتھ استعمال کیا جا سکتا ہے اور کیا جانا چاہیے، لیکن ایپ چیک بدسلوکی سے تحفظ فراہم کرتی ہے یہاں تک کہ جب درخواست کا کوئی صارف سیاق و سباق نہ ہو۔
آئیے ایک قدم بہ قدم دیکھتے ہیں کہ بہاؤ دراصل کیسے کام کرتا ہے۔
-
جب آپ کی ایپ ایپ چیک کو شروع کرتی ہے، SDK ثبوت چیلنج تشکیل شدہ فراہم کنندگان کے ساتھ۔ ویب پر، reCAPTCHA Enterprise ایک غیر مرئی خطرے کی تشخیص (ماؤس کی نقل و حرکت، براؤزر کے فنگر پرنٹس، نیٹ ورک سگنلز) انجام دیتا ہے اور یہ دعویٰ کرتے ہوئے ایک ٹوکن واپس کرتا ہے، "یہ براؤزر کا ایک جائز سیشن معلوم ہوتا ہے۔”
-
آپ کی ایپ کا SDK متعلقہ reCAPTCHA ٹوکن کو Firebase کے App Check بیک اینڈ پر بھیجتا ہے، جو Firebase کے App Check بیک اینڈ کے ساتھ اس کا تبادلہ کرتا ہے۔ فائر بیس ایپ چیک ٹوکنیہ ایک مختصر مدت کے لیے دستخط شدہ JWT ہے۔
-
وہ ایپ چیک ٹوکن مقامی طور پر کیش کیا جاتا ہے اور خود بخود آپ کی ایپ Firebase AI Logic (اور دیگر ایپ چیک انٹیگریشن سروسز، جیسے کہ Firestore یا Cloud Functions) کے بعد کی جانے والی تمام درخواستوں سے منسلک ہوتا ہے۔
-
AI Logic پراکسی جیمنی کو درخواست بھیجنے سے پہلے ایپ چیک ٹوکن کے دستخط اور درستگی کی تصدیق کرتی ہے۔ کوئی درست ٹوکن نہیں ہے اور درخواست ماڈل تک نہیں پہنچتی ہے۔
یہ کیوں اہمیت رکھتا ہے۔ خاص طور پر عام CRUD بیک اینڈز کے مقابلے جنریٹیو AI کے لیے لاگت کی شکل زیادہ اہم ہے۔ بلاک شدہ فائر اسٹور ریڈز کے لیے کوئی قیمت نہیں ہے۔ اگر مسدود نہیں کیا گیا ہے تو، بلاک شدہ جیمنی کالز آپ کو فی درخواست حقیقی رقم خرچ کر سکتی ہیں، اور پیمانے پر، اسکرپٹڈ ابیوز لوپس آپ کے ماہانہ بجٹ کو چند گھنٹوں میں کھا سکتے ہیں۔ ایپ چیک اس بات کو یقینی بنانے کا گیٹ وے ہے کہ آپ کا خرچ صرف حقیقی ایپس پر چلتا ہے۔
احتیاط: گوگل نے ایپ چیک کے نفاذ کا اعلان کر دیا۔ 2 نومبر 2026 سے Firebase AI Logic کے لیے درکار ہے۔. جولائی 2026 سے، نئے AI منطق کے انضمام کے لیے ایپ کی جانچ پہلے ہی Firebase کنسول میں گائیڈڈ سیٹ اپ ورک فلو کے ذریعے خود بخود فعال ہو چکی ہے۔ مؤثر تاریخ کے بعد کسی بھی غیر مصدقہ درخواستوں کو مسترد کر دیا جائے گا، لہذا ہم بعد میں گھبرانے کی بجائے ابھی رابطہ کرنے کی تجویز کرتے ہیں۔
مرحلہ 3 – اپنا Firebase پروجیکٹ ترتیب دیں۔
-
Firebase کنسول پر جائیں اور ایک نیا پروجیکٹ بنائیں یا ایک موجودہ پروجیکٹ کھولیں۔
-
بائیں سائڈبار میں، کھولیں: تحریر پھر اے آئی منطق، پھر کلک کریں۔ شروع کرنا. منتخب کریں Gemini Developer API آپ بلنگ سیٹ اپ کیے بغیر بطور فراہم کنندہ حصہ لے سکتے ہیں۔
-
دوبارہ پروجیکٹ کی ترتیباتپر جائیں۔ جنرل پھر آپ کی ایپ. اگر آپ نے پہلے سے اپنی ویب ایپ کو رجسٹر نہیں کرایا ہے تو اسے رجسٹر کریں اور Firebase کنفیگریشن آبجیکٹ کو کاپی کریں۔ اگلے مرحلے میں آپ کو اس کی ضرورت ہوگی۔
ایپ چیک کی ترتیبات کو خود ہی دریافت کرنے کی ضرورت ہے، لہذا ہم انہیں اگلے مرحلے کے لیے اکیلا چھوڑ دیں گے۔
مرحلہ 4 – فائر بیس ایپ چیک انٹیگریشن
اپنی ایپ کو reCAPTCHA انٹرپرائز کے ساتھ رجسٹر کریں۔
Firebase کنسول میں، اس پر جائیں: تحریر پھر ایپ چیک کریں۔ایک ویب ایپ منتخب کریں۔ reCAPTCHA انٹرپرائز بطور سپلائر۔ فائر بیس سائٹ کی کلید ایپ ڈومین سے منسلک ہے۔ اسے کاپی کریں جیسا کہ ہم اسے نیچے کوڈ میں منتقل کریں گے۔
SDK انسٹال کریں۔
npm install firebase
یہ واحد پیکیج ہے جس کی آپ کو ضرورت ہے۔ ReCaptchaEnterpriseProvider اندرونی شپنگ firebase/app-checkایک ہی حصہ firebase پیکج علیحدہ reCAPTCHA SDK انسٹال کرنے کی ضرورت نہیں ہے۔ براہ کرم دستی طور پر ٹیگز شامل کریں۔ Firebase reCAPTCHA انٹرپرائز اسکرپٹ کو فوری طور پر لوڈ کرتا ہے جب: initializeAppCheck() دوڑو۔
مقامی ترقی کے لیے ڈیبگ ٹوکن کا استعمال کرتے ہوئے ایپ چیک کو شروع کریں۔
reCAPTCHA Enterprise قابل اعتماد طریقے سے کام نہیں کرتا ہے۔ localhostلہذا، پروڈکشن کوڈ لکھنے سے پہلے ایپ چیک ترتیب دیں۔ ڈیبگ فراہم کنندہ. یہ آپ کو جھوٹے مستردوں کے خلاف لڑے بغیر مقامی طور پر ترقی کرنے کی اجازت دیتا ہے۔
// app-check-setup.js
import { initializeApp } from "firebase/app";
import { initializeAppCheck, ReCaptchaEnterpriseProvider } from "firebase/app-check";
const firebaseConfig = {
apiKey: "AIzaSy...",
authDomain: "your-project.firebaseapp.com",
projectId: "your-project",
storageBucket: "your-project.firebasestorage.app",
messagingSenderId: "123456789",
appId: "1:1234:web:abcd",
};
const app = initializeApp(firebaseConfig);
// Enable the debug provider ONLY in local/dev environments.
// This prints a debug token to the console the first time it runs.
if (location.hostname === "localhost") {
self.FIREBASE_APPCHECK_DEBUG_TOKEN = true;
}
export const appCheck = initializeAppCheck(app, {
provider: new ReCaptchaEnterpriseProvider("YOUR_RECAPTCHA_ENTERPRISE_SITE_KEY"),
isTokenAutoRefreshEnabled: true,
});
export { app };
اگر آپ اسے پہلی بار مقامی طور پر چلا رہے ہیں، تو اپنے براؤزر کنسول کو اس طرح کی لائن کے لیے چیک کریں:
App Check debug token: 5f2b1a3c-....-....-.... You will need to add it to your app's App Check settings in the Firebase console before the token can be used.
ٹوکن ایپ → ایپ → چیک کریں۔ [your app] → ڈیبگ ٹوکن مینجمنٹ کنسول سے۔ اس کے بعد سے، مقامی نظام کی درخواستوں کو بغیر کسی حقیقی reCAPTCHA چیلنج کے تصدیق شدہ سمجھا جاتا ہے۔ اس ڈیبگ ٹوکن بلاک کو پروڈکشن میں فراہم نہ کریں۔ جیسا کہ اوپر بتایا گیا ہے ماحولیاتی چیک کے پیچھے ایک گیٹ لگانا ضروری ہے۔
چیک کریں کہ آیا یہ کام کرتا ہے۔
ایک بار جب آپ کی ایپ اپنی پہلی ایپ چیک کی حفاظت کی درخواست کرتی ہے (مرحلہ 5 میں منسلک ہے)، اگلے پر جائیں۔ ایپ چیک کریں۔ پھر apis کنسول سے۔ آپ Firebase AI Logic تک پہنچنے والی تصدیق شدہ اور غیر تصدیق شدہ درخواستوں کے حقیقی وقت کے تجزیات دیکھ سکتے ہیں۔ اگر سب کچھ صحیح طریقے سے جڑا ہوا ہے، تو آپ کا ٹریفک ‘تصدیق شدہ’ کے طور پر ظاہر ہوگا۔
مرحلہ 5 – Firebase AI منطق کو نافذ کریں۔
ایپ چیکس کے ساتھ ایک درخواست/جواب راؤنڈ ٹرپ سے آگے ماڈل کو اصل میں استعمال کرنے کا طریقہ یہاں ہے:
پہلے سے طے شدہ ترتیبات:
// ai-client.js
import { getAI, GoogleAIBackend, getGenerativeModel } from "firebase/ai";
import { app } from "./app-check-setup.js";
// useLimitedUseAppCheckTokens issues short-lived tokens for extra protection
// against replay attacks on top of standard App Check verification.
const ai = getAI(app, {
backend: new GoogleAIBackend(),
useLimitedUseAppCheckTokens: true,
});
export const model = getGenerativeModel(ai, { model: "gemini-3.8-flash" });
میمو: جیمنی ماڈل کے نام اور دستیابی اکثر تبدیل ہوتی رہتی ہے۔ gemini-2.0-flash Lite ویریئنٹ 1 جون 2026 کو ریٹائر ہو گیا تھا اور Gemini 2.5 لائن کو اب Gemini 3.x سیریز کے حق میں فرسودہ کر دیا گیا ہے۔
ماڈل کے ناموں کو پروڈکشن میں ہارڈ کوڈنگ کرنے سے پہلے ہمیشہ معاون ماڈلز کا صفحہ چیک کریں۔ یا اس سے بھی بہتر، آپ اسے Firebase Remote Config سے لوڈ کر سکتے ہیں تاکہ آپ اپنا ماڈل تبدیل کر سکیں بغیر کوئی نئی تعمیر جاری کیے جائیں۔
مثال 1 – ایک درخواست
import { model } from "./ai-client.js";
async function generateAIText(prompt) {
try {
const result = await model.generateContent(prompt);
const response = result.response;
return response.text();
} catch (error) {
console.error("Firebase AI Logic request failed:", error);
}
}
generateAIText("Explain the purpose of an API proxy in two sentences.");
مثال 2 – UI میں سلسلہ بندی
اگر یہ جملے سے زیادہ لمبا ہے، تو سٹریمنگ صارف کو ایک جواب دیتی ہے جو چند سیکنڈ کے لیے خاموشی سے انتظار کرنے کے بجائے فوراً ظاہر ہونا شروع ہو جاتی ہے۔ یہاں ایک حقیقی DOM لنک کرنے کی مثال ہے، نہ صرف ایک کنسول لاگ:
import { model } from "./ai-client.js";
async function streamIntoElement(prompt, targetElement) {
targetElement.textContent = "";
const result = await model.generateContentStream(prompt);
for await (const chunk of result.stream) {
targetElement.textContent += chunk.text();
}
// The aggregated final response is also available once streaming finishes
const finalResponse = await result.response;
console.log("Total tokens used:", finalResponse.usageMetadata?.totalTokenCount);
}
const output = document.querySelector("#ai-output");
streamIntoElement("Write a 3-sentence product description for a smart water bottle.", output);
مثال 3 – ملٹی ٹرن چیٹ
چیٹ بوٹ طرز کی فعالیت کے لیے، آپ ہر کال پر پوری گفتگو کو دستی طور پر ٹریک کرنا اور دوبارہ بھیجنا نہیں چاہتے۔ startChat() ہم اسے آپ کے لیے سنبھالتے ہیں:
import { model } from "./ai-client.js";
const chat = model.startChat({
history: [
{ role: "user", parts: [{ text: "I'm building a task management app." }] },
{ role: "model", parts: [{ text: "Got it, what would you like help with?" }] },
],
});
async function sendChatMessage(message) {
const result = await chat.sendMessage(message);
return result.response.text();
}
sendChatMessage("Suggest 3 status labels for a Kanban board.");
// A follow-up call automatically has the prior turns as context:
sendChatMessage("Now suggest color codes for each of those.");
مثال 4 — سٹرکچرڈ JSON آؤٹ پٹ
اگر آپ ماڈل کے آؤٹ پٹ کو اپنی ایپ کی منطق (کارڈ رینڈرنگ، فارم فلنگ) کے مطابق فیڈ کرتے ہیں، تو مفت ٹیکسٹ آؤٹ پٹ پارس ہونے کا خطرہ ہے۔ گزرنا responseSchema درست JSON دوبارہ درج کرنے کے لیے:
import { getGenerativeModel, Schema } from "firebase/ai";
import { ai } from "./ai-client.js"; // assuming `ai` is also exported from ai-client.js
const taskSchema = Schema.object({
properties: {
title: Schema.string(),
priority: Schema.enumString({ enum: ["low", "medium", "high"] }),
tags: Schema.array({ items: Schema.string() }),
},
});
const structuredModel = getGenerativeModel(ai, {
model: "gemini-3.8-flash",
generationConfig: {
responseMimeType: "application/json",
responseSchema: taskSchema,
},
});
async function extractTaskFromText(text) {
const result = await structuredModel.generateContent(
`Extract a task from this note: "${text}"`
);
return JSON.parse(result.response.text());
}
extractTaskFromText("Need to review the PR from Sarah by Friday, this is urgent");
// → { title: "Review PR from Sarah", priority: "high", tags: ["review"] }
مثال 5 — شرح کو محدود کرنا اور عارضی غلطی سے نمٹنے
جیمنی کالز شرح کی حد یا عارضی غلطیوں تک پہنچ سکتی ہیں، خاص طور پر بوجھ کے نیچے۔ آسان ایکسپونینشل بیک آف API کو توڑے بغیر آپ کی ایپ کو لچکدار رکھتا ہے۔
import { model } from "./ai-client.js";
async function generateWithRetry(prompt, maxRetries = 3) {
for (let attempt = 0; attempt <= maxRetries; attempt++) {
try {
const result = await model.generateContent(prompt);
return result.response.text();
} catch (error) {
const isRetryable = error.message?.includes("429") || error.message?.includes("503");
if (!isRetryable || attempt === maxRetries) throw error;
const delayMs = 2 ** attempt * 1000; // 1s, 2s, 4s...
await new Promise((resolve) => setTimeout(resolve, delayMs));
}
}
}
عام مسائل کو ڈیبگ کرنا
مسئلہ 1: API key not valid. Please pass a valid API key.
اس کا عام مطلب ہے: apiKey آپ کی Firebase کنفیگریشن میں کوئی چیز آپ کے پروجیکٹ سے مماثل نہیں ہے، یا مطلوبہ API فعال نہیں ہے۔ اقدار کو دوبارہ چیک کریں۔ پروجیکٹ کی ترتیبات → عمومی کنسول سے۔
مسئلہ 2: 403 یا، یہاں تک کہ اگر آپ کا کوڈ درست نظر آتا ہے، درخواست خود بخود بلاک ہوجاتی ہے۔
یہ تقریباً ہمیشہ ایک ایپ چیک رجسٹریشن میں مماثلت نہیں رکھتا۔ اس بات کو یقینی بنائیں کہ آپ جس ڈومین کی جانچ کر رہے ہیں وہ اس ڈومین سے میل کھاتا ہے جسے آپ نے اپنی reCAPTCHA انٹرپرائز سائٹ کلید کے لیے رجسٹر کیا ہے، اور وہ ایپ چیک درخواست کو ‘Not Verified’ (‘Not Enforced’ یا Missing Outright) کے طور پر دکھاتا ہے۔ ایپ چیک پھر apis.
مسئلہ 3: ایپ چیک پروڈکشن میں کام کرتا ہے لیکن پروڈکشن میں ناکام ہوجاتا ہے۔ localhost
جیسا کہ توقع کی گئی ہے، reCAPTCHA Enterprise قابل اعتماد طریقے سے نہیں چلتا ہے: localhost. یقینی بنائیں کہ مرحلہ 4 سے ڈیبگ ٹوکن بلاک آپ کے ترقیاتی ماحول میں فعال ہے اور یہ کہ آپ نے پرنٹ شدہ ڈیبگ ٹوکن شامل کیا ہے۔ ایپ چیک کریں۔ پھر ڈیبگ ٹوکن مینجمنٹ کنسول سے۔ اگر آپ اپنے کمپیوٹر کو گھماتے ہیں یا اپنا براؤزر اسٹوریج صاف کرتے ہیں، تو ایک نیا ٹوکن پرنٹ کیا جائے گا اور آپ کو دوبارہ رجسٹر کرنے کی ضرورت ہوگی۔
مسئلہ 4: ماڈل کی خرابی یا غیر متوقع اخراج
گوگل باقاعدگی سے پرانے جیمنی ماڈلز کو کئی مہینوں کی پیشگی اطلاع کے ساتھ ریٹائر کرتا ہے۔ gemini-2.0-flash مثال کے طور پر، لائٹ ویریئنٹ 1 جون 2026 کو ختم ہوا۔ اگر کوئی درخواست جو کام کر رہی تھی اچانک 404 لوٹاتا ہے، تو یہ ماننے سے پہلے کہ یہ آپ کے کوڈ میں ایک بگ ہے، فرسودگی کے نوٹسز کے لیے ماڈل کا صفحہ چیک کریں۔
مسئلہ 5: سٹریمنگ بغیر کسی غلطی کے درمیان میں رک جاتی ہے۔
یہ عام طور پر ہوتا ہے۔ usageMetadataیہ ایک /token-limit مسئلہ ہے، نیٹ ورک کی ناکامی نہیں۔ چیک کریں finalResponse.candidates[0].finishReason (صرف ایک بار ممکن ہے۔ result.response حل شدہ)، درج ذیل اقدار کے ساتھ: MAX_TOKENS اس کا مطلب یہ نہیں کہ کچھ کریش ہو گیا، اس کا مطلب صرف یہ ہے کہ ردعمل ٹوٹ گیا تھا۔
نتیجہ
تخلیقی AI صلاحیتوں کو بنانے کا مطلب ہے پروٹوٹائپ مرحلے سے پیداواری سطح کی سیکیورٹی کو اپنانا، بجائے اس کے کہ اسے بعد میں شامل کیا جائے۔ Firebase AI Logic کا پراکسی فن تعمیر جیمنی API کیز کو کلائنٹ کوڈ سے مکمل طور پر محفوظ رکھتا ہے، اور Firebase App Check اس بات کو یقینی بناتا ہے کہ آپ کی ایپ کی صرف حقیقی مثالیں ہی کوٹہ استعمال کر سکتی ہیں، چاہے کلید چھپی ہو۔ ہم ناکامی کے دو اہم ترین طریقوں کا ایک ساتھ احاطہ کرتے ہیں: کلیدی چوری اور اسکرپٹ کا غلط استعمال۔
یہاں کچھ چیزیں ہیں جو آگے دیکھنے کے قابل ہیں:
-
کالنگ فنکشنز / ٹولز کا استعمالجیمنی کو اس کے جواب کے حصے کے طور پر اس کے اپنے ایپ فنکشنز کو کال کرنے کی اجازت دیتا ہے۔
-
سرور سائیڈ پرامپٹ ٹیمپلیٹاگر آپ اپنے کلائنٹ کوڈ میں پرامپٹ کو برقرار رکھنا چاہتے ہیں، نہ کہ صرف API کلید
-
ہائبرڈ تخمینہجہاں ممکن ہو، معاون براؤزرز میں آن ڈیوائس ماڈل پر واپس جائیں تاکہ لاگت اور سادہ درخواستوں کے لیے تاخیر کو کم کیا جا سکے۔
-
ماڈل کے نام کے لیے Firebase ریموٹ کنفیگآپ ایپ کا نیا ورژن جاری کیے بغیر اپنے صارفین کے لیے نئے جیمنی ماڈل جاری کر سکتے ہیں۔