{"id":29687,"date":"2026-09-21T15:43:44","date_gmt":"2026-09-21T15:43:44","guid":{"rendered":"https:\/\/umang.pk\/2026\/09\/21\/%d8%a2%d9%be-%da%a9%d9%88-%d8%a7%d9%be%d9%86%db%92-%da%a9%d9%84%d8%a7%d8%a6%d9%86%d9%b9-%da%a9%d9%88%da%88-%d9%85%db%8c%da%ba-gemini-api-%da%a9%db%8c%d8%b2-%da%a9%db%8c%d9%88%da%ba-%d9%86%db%81%db%8c\/"},"modified":"2026-09-21T15:43:44","modified_gmt":"2026-09-21T15:43:44","slug":"%d8%a2%d9%be-%da%a9%d9%88-%d8%a7%d9%be%d9%86%db%92-%da%a9%d9%84%d8%a7%d8%a6%d9%86%d9%b9-%da%a9%d9%88%da%88-%d9%85%db%8c%da%ba-gemini-api-%da%a9%db%8c%d8%b2-%da%a9%db%8c%d9%88%da%ba-%d9%86%db%81%db%8c","status":"publish","type":"post","link":"https:\/\/umang.pk\/en_us\/2026\/09\/21\/%d8%a2%d9%be-%da%a9%d9%88-%d8%a7%d9%be%d9%86%db%92-%da%a9%d9%84%d8%a7%d8%a6%d9%86%d9%b9-%da%a9%d9%88%da%88-%d9%85%db%8c%da%ba-gemini-api-%da%a9%db%8c%d8%b2-%da%a9%db%8c%d9%88%da%ba-%d9%86%db%81%db%8c\/","title":{"rendered":"\u0622\u067e \u06a9\u0648 \u0627\u067e\u0646\u06d2 \u06a9\u0644\u0627\u0626\u0646\u0679 \u06a9\u0648\u0688 \u0645\u06cc\u06ba Gemini API \u06a9\u06cc\u0632 \u06a9\u06cc\u0648\u06ba \u0646\u06c1\u06cc\u06ba \u0688\u0627\u0644\u0646\u0627 \u0686\u0627\u06c1\u0626\u06d2 (\u0627\u0648\u0631 Firebase AI Logic \u0645\u06cc\u06ba \u0627\u0633 \u06a9\u06d2 \u0627\u0631\u062f \u06af\u0631\u062f \u06a9\u06cc\u0633\u06d2 \u06a9\u0627\u0645 \u06a9\u0631\u06cc\u06ba)"},"content":{"rendered":"\n<div id=\"\">\n<p>\u062c\u0646\u0631\u06cc\u0679\u0648 AI \u06a9\u0627 \u062f\u06be\u0645\u0627\u06a9\u06c1 \u06c1\u0632\u0627\u0631\u0648\u06ba \u0648\u06cc\u0628 \u0688\u0648\u06cc\u0644\u067e\u0631\u0632 \u06a9\u0648 \u0627\u067e\u0646\u06cc \u0627\u06cc\u067e\u0633 \u0645\u06cc\u06ba \u0630\u06c1\u06cc\u0646 \u062e\u0635\u0648\u0635\u06cc\u0627\u062a \u0634\u0627\u0645\u0644 \u06a9\u0631\u0646\u06d2 \u067e\u0631 \u0645\u062c\u0628\u0648\u0631 \u06a9\u0631 \u0631\u06c1\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u067e\u06c1\u0644\u06cc \u062c\u0628\u0644\u062a \u0639\u0627\u0645 \u0637\u0648\u0631 \u067e\u0631 \u062c\u06cc\u0645\u0646\u06cc API \u06a9\u06d2 SDK \u06a9\u0648 \u0628\u0631\u0627\u06c1 \u0631\u0627\u0633\u062a \u0628\u0631\u0627\u0624\u0632\u0631 \u0633\u06d2 \u06a9\u0627\u0644 \u06a9\u0631\u0646\u0627 \u06c1\u06d2\u06d4 \u06cc\u06c1 \u062c\u0628\u0644\u062a \u0622\u067e \u06a9\u06cc API \u06a9\u06cc\u0632 \u06a9\u0648 \u062f\u0646\u06cc\u0627 \u06a9\u06d2 \u0633\u0627\u0645\u0646\u06d2 \u0638\u0627\u06c1\u0631 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0633\u0646\u06af\u06cc\u0646 \u0633\u06cc\u06a9\u06cc\u0648\u0631\u0679\u06cc \u0631\u0633\u06a9 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0622\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<p>\u0627\u0633 \u0622\u0631\u0679\u06cc\u06a9\u0644 \u0645\u06cc\u06ba\u060c \u0622\u067e \u0633\u06cc\u06a9\u06be\u06cc\u06ba \u06af\u06d2 \u06a9\u06c1 \u062e\u0627\u0645 Gemini API \u06a9\u06cc\u0632 \u06a9\u0648 \u06a9\u0644\u0627\u0626\u0646\u0679\u0633 \u06a9\u0648 \u062f\u06cc\u0646\u0627 \u06a9\u06cc\u0648\u06ba \u062e\u0637\u0631\u0646\u0627\u06a9 \u06c1\u06d2\u060c Firebase AI Logic \u06a9\u0627 \u067e\u0631\u0627\u06a9\u0633\u06cc \u0641\u0646 \u062a\u0639\u0645\u06cc\u0631 \u06a9\u06cc\u0633\u06d2 \u0627\u0633\u06d2 \u062d\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u0627\u0648\u0631 Firebase App Check \u0627\u0633 \u0645\u0633\u0626\u0644\u06d2 \u06a9\u06d2 \u0622\u062e\u0631\u06cc \u062d\u0635\u06d2 \u06a9\u0648 \u06a9\u06cc\u0633\u06d2 \u062d\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u062c\u0648 \u0627\u06a9\u06cc\u0644\u06d2 \u067e\u0631\u0627\u06a9\u0633\u06cc \u0646\u06c1\u06cc\u06ba \u06a9\u0631 \u0633\u06a9\u062a\u06d2\u06d4<\/p>\n<p>\u0622\u062e\u0631 \u0645\u06cc\u06ba\u060c \u0622\u067e \u06a9\u06d2 \u067e\u0627\u0633 \u0648\u0631\u06a9\u0646\u06af \u067e\u0631\u0648\u0688\u06a9\u0634\u0646 \u0637\u0631\u0632 \u06a9\u0627 \u0633\u06cc\u0679 \u0627\u067e \u06c1\u0648\u06af\u0627\u060c \u062c\u0633 \u0645\u06cc\u06ba \u0627\u06cc\u06a9 \u0645\u062d\u0641\u0648\u0638 AI \u0645\u0646\u0637\u0642 \u06a9\u0644\u0627\u0626\u0646\u0679\u060c \u0645\u0646\u0627\u0633\u0628 \u0637\u0631\u06cc\u0642\u06d2 \u0633\u06d2 \u062a\u0631\u062a\u06cc\u0628 \u0634\u062f\u06c1 \u0627\u06cc\u067e \u0686\u06cc\u06a9 \u0641\u0644\u0648 (\u0628\u0634\u0645\u0648\u0644 \u0688\u06cc\u0628\u06af \u0679\u0648\u06a9\u0646\u0632)\u060c \u062d\u0642\u06cc\u0642\u06cc \u062f\u0646\u06cc\u0627 \u06a9\u06d2 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u06d2 \u0646\u0645\u0648\u0646\u06d2\u060c \u0627\u0633\u0679\u0631\u06cc\u0645\u0646\u06af\u060c \u0645\u0644\u0679\u06cc \u0679\u0631\u0646 \u0686\u06cc\u0679\u060c \u0627\u0648\u0631 \u0633\u0627\u062e\u062a\u06cc JSON \u0622\u0624\u0679 \u067e\u0679 \u0634\u0627\u0645\u0644 \u06c1\u06cc\u06ba\u06d4 <code>console.log<\/code>.<\/p>\n<h3 id=\"heading-table-of-contents\">\u0627\u0646\u0688\u06cc\u06a9\u0633<\/h3>\n<h3 id=\"heading-prerequisites\">\u0634\u0631\u0627\u0626\u0637<\/h3>\n<p>\u0634\u0631\u0648\u0639 \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2\u060c \u06cc\u0642\u06cc\u0646\u06cc \u0628\u0646\u0627\u0626\u06cc\u06ba \u06a9\u06c1 \u0622\u067e \u06a9\u06d2 \u067e\u0627\u0633 \u062f\u0631\u062c \u0630\u06cc\u0644 \u06c1\u06cc\u06ba:<\/p>\n<ul>\n<li>\n<p><strong>Node.js v18 \u06cc\u0627 \u0627\u0633 \u0633\u06d2 \u0632\u06cc\u0627\u062f\u06c1<\/strong> (<code>node --version<\/code>)<\/p>\n<\/li>\n<li>\n<p>\u06a9\u0648\u0626\u06cc \u0631\u0627\u0633\u062a\u06c1 \u0646\u06c1\u06cc\u06ba <strong>\u06af\u0648\u06af\u0644 \u0627\u06a9\u0627\u0624\u0646\u0679<\/strong> \u0627\u06cc\u06a9 \u0641\u0627\u0626\u0631\u0628\u06cc\u0633 \u067e\u0631\u0648\u062c\u06cc\u06a9\u0679 \u0628\u0646\u0627\u0626\u06cc\u06ba (\u0645\u0641\u062a \u0627\u0633\u067e\u0627\u0631\u06a9 \u067e\u0644\u0627\u0646 \u062c\u06cc\u0645\u0646\u06cc \u0688\u06cc\u0648\u0644\u067e\u0631 API \u06a9\u06d2 \u0633\u0627\u062a\u06be \u06a9\u0627\u0645 \u06a9\u0631\u062a\u0627 \u06c1\u06d2)<\/p>\n<\/li>\n<li>\n<p>\u062c\u0627\u0648\u0627 \u0627\u0633\u06a9\u0631\u067e\u0679 \u06a9\u0627 \u0628\u0646\u06cc\u0627\u062f\u06cc \u0639\u0644\u0645\u060c <code>async<\/code>\/<code>await<\/code>\u0627\u0648\u0631 ES \u0645\u0627\u0688\u06cc\u0648\u0644<\/p>\n<\/li>\n<li>\n<p>\u06a9\u0648\u0688 \u0627\u06cc\u0688\u06cc\u0679\u0631 \u0627\u0648\u0631 \u0679\u0631\u0645\u06cc\u0646\u0644<\/p>\n<\/li>\n<\/ul>\n<p>\u06cc\u06c1 \u06af\u0627\u0626\u06cc\u0688 \u0622\u067e \u06a9\u0648 \u0632\u0645\u06cc\u0646 \u0633\u06d2 \u0627\u0648\u067e\u0631 \u0644\u06d2 \u062c\u0627\u062a\u06cc \u06c1\u06d2\u060c \u0644\u06c1\u0630\u0627 \u0622\u067e \u06a9\u0648 Firebase\u060c AppCheck\u060c \u06cc\u0627 Gemini API \u06a9\u06d2 \u0633\u0627\u062a\u06be \u06a9\u0633\u06cc \u067e\u06cc\u0634\u06af\u06cc \u062a\u062c\u0631\u0628\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4<\/p>\n<h2 id=\"heading-the-problem-with-client-side-api-keys\">\u06a9\u0644\u0627\u0626\u0646\u0679 \u0633\u0627\u0626\u06cc\u0688 API \u06a9\u0644\u06cc\u062f\u06cc \u0645\u0633\u0626\u0644\u06c1<\/h2>\n<p>\u062c\u0627\u0648\u0627 \u0627\u0633\u06a9\u0631\u067e\u0679 \u0628\u0646\u0688\u0644 \u06a9\u06d2 \u0627\u0646\u062f\u0631 \u06cc\u0627 <code>.env<\/code> \u0641\u0627\u0626\u0644 \u06a9\u0648 \u0628\u0631\u0627\u0624\u0632\u0631 \u067e\u0631 \u0645\u0646\u062a\u0642\u0644 \u06a9\u0631\u0646\u0627 \u0627\u06cc\u06a9 \u0633\u0646\u06af\u06cc\u0646 \u0633\u06cc\u06a9\u06cc\u0648\u0631\u0679\u06cc \u062e\u0627\u0645\u06cc \u06c1\u06d2 \u0627\u0648\u0631 \u0627\u0633 \u06a9\u0627 \u0641\u0627\u0626\u062f\u06c1 \u0627\u0679\u06be\u0627\u0646\u0627 \u0628\u06c1\u062a \u0622\u0633\u0627\u0646 \u06c1\u06d2\u06d4 \u0639\u0645\u0644\u06cc \u0637\u0648\u0631 \u067e\u0631 \u06cc\u06c1 \u06a9\u06cc\u0633\u0627 \u0644\u06af\u062a\u0627 \u06c1\u06d2 \u06cc\u06c1\u0627\u06ba \u06c1\u06d2:<\/p>\n<p>\u0622\u0626\u06cc\u06d2 \u0641\u0631\u0636 \u06a9\u0631\u06cc\u06ba \u06a9\u06c1 \u0622\u067e \u062c\u06cc\u0645\u0646\u06cc API \u06a9\u0648 \u0627\u067e\u0646\u06d2 \u06a9\u0644\u0627\u0626\u0646\u0679 \u06a9\u0648\u0688 \u0633\u06d2 \u0627\u0633 \u0637\u0631\u062d \u06a9\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba:<\/p>\n<pre><code class=\"language-javascript\">\/\/ DON'T do this in a browser-shipped app\nconst genAI = new GoogleGenerativeAI(\"AIzaSyD4-your-real-key-here\");\n<\/code><\/pre>\n<p>\u0627\u0633\u06d2 \u062a\u0639\u0645\u06cc\u0631\u0627\u062a\u06cc \u0679\u0648\u0644 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0628\u0646\u0688\u0644 \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u0622\u0624\u0679 \u067e\u0679 JS \u0645\u06cc\u06ba \u06a9\u0644\u06cc\u062f\u06cc\u06ba \u0633\u0627\u062f\u06c1 \u0645\u062a\u0646 \u0645\u06cc\u06ba \u0638\u0627\u06c1\u0631 \u06c1\u0648\u06ba \u06af\u06cc\u06d4 \u06a9\u0648\u0626\u06cc \u0628\u06be\u06cc \u062e\u0635\u0648\u0635\u06cc \u0679\u0648\u0644\u0632 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06a9\u06d2 \u0628\u063a\u06cc\u0631 \u0627\u0633\u06d2 \u0627\u06cc\u06a9 \u0645\u0646\u0679 \u0633\u06d2 \u0628\u06be\u06cc \u06a9\u0645 \u0648\u0642\u062a \u0645\u06cc\u06ba \u062a\u0644\u0627\u0634 \u06a9\u0631 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-shell\"># Anyone can run this against your deployed bundle\ncurl -s https:\/\/your-app.com\/assets\/main.js | grep -oE \"AIzaSy[A-Za-z0-9_-]{33}\"\n<\/code><\/pre>\n<p>\u06cc\u06c1 \u06a9\u0645\u0627\u0646\u0688 miniified \u067e\u0631\u0648\u0688\u06a9\u0634\u0646 \u0628\u0646\u0688\u0644 \u0633\u06d2 Gemini API \u06a9\u0644\u06cc\u062f \u0646\u06a9\u0627\u0644\u062a\u06cc \u06c1\u06d2\u060c \u0627\u06af\u0631 \u06cc\u06c1 \u0645\u0648\u062c\u0648\u062f \u06c1\u06d2\u06d4 \u0622\u067e \u06a9\u06d2 \u0628\u0631\u0627\u0624\u0632\u0631 \u06a9\u06d2 \u0688\u0648\u06cc\u0644\u067e\u0645\u0646\u0679 \u0679\u0648\u0644\u0632 \u0645\u06cc\u06ba \u0645\u0648\u062c\u0648\u062f \u0646\u06cc\u0679 \u0648\u0631\u06a9 \u0679\u06cc\u0628 \u0622\u067e \u06a9\u0648 \u0628\u0627\u06c1\u0631 \u062c\u0627\u0646\u06d2 \u0648\u0627\u0644\u06cc \u062a\u0645\u0627\u0645 \u062f\u0631\u062e\u0648\u0627\u0633\u062a\u0648\u06ba \u06a9\u0627 \u0628\u06c1\u062a \u0628\u06c1\u062a\u0631 \u0646\u0638\u0627\u0631\u06c1 \u0641\u0631\u0627\u06c1\u0645 \u06a9\u0631\u062a\u0627 \u06c1\u06d2: <code>generativelanguage.googleapis.com<\/code> \u06a9\u0644\u06cc\u062f \u06a9\u0648 \u0628\u0631\u0627\u06c1 \u0631\u0627\u0633\u062a \u0627\u0633\u062a\u0641\u0633\u0627\u0631 \u06a9\u06d2 \u0633\u0679\u0631\u0646\u06af \u06cc\u0627 \u06c1\u06cc\u0688\u0631 \u0645\u06cc\u06ba \u0688\u0633\u067e\u0644\u06d2 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<p>\u0627\u06af\u0631 Gemini API \u06a9\u0644\u06cc\u062f \u0627\u0633 \u0637\u0631\u062d \u0644\u06cc\u06a9 \u06c1\u0648 \u062c\u0627\u062a\u06cc \u06c1\u06d2 \u062a\u0648 \u062d\u0645\u0644\u06c1 \u0622\u0648\u0631 \u06cc\u06c1 \u06a9\u0631 \u0633\u06a9\u062a\u0627 \u06c1\u06d2:<\/p>\n<ul>\n<li>\n<p>\u0627\u067e\u0646\u0627 \u067e\u0648\u0631\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0627 \u06a9\u0648\u0679\u06c1 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p>\u06a9\u0644\u0627\u0624\u0688 \u0628\u0644 \u063a\u06cc\u0631 \u0645\u062a\u0648\u0642\u0639 \u0637\u0648\u0631 \u067e\u0631 \u0628\u0691\u06be\u062a\u06d2 \u06c1\u06cc\u06ba (\u062c\u06cc\u0645\u0646\u06cc \u06a9\u0627\u0644\u0632 \u06a9\u0627 \u0628\u0644 \u0641\u06cc \u0679\u0648\u06a9\u0646\u060c \u0641\u0644\u06cc\u0679 \u0631\u06cc\u0679 \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u06a9\u06d2 \u067e\u0691\u06be\u0646\u06d2 \u06a9\u06d2 \u0628\u0631\u0639\u06a9\u0633 \u06c1\u0648\u062a\u0627 \u06c1\u06d2)\u06d4<\/p>\n<\/li>\n<li>\n<p>\u0627\u06af\u0631 \u0622\u067e \u0627\u067e\u0646\u06cc \u062f\u0631\u062e\u0648\u0627\u0633\u062a\u0648\u06ba \u067e\u0631 \u0639\u0645\u0644 \u062f\u0631\u0622\u0645\u062f \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0648\u0633\u0627\u0626\u0644 \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u062a\u0648 \u0622\u067e \u06a9\u0627 \u06af\u0648\u06af\u0644 \u06a9\u0644\u0627\u0624\u0688 \u067e\u0631\u0648\u062c\u06cc\u06a9\u0679 \u06a9\u0633\u06cc \u0627\u0633\u062a\u062d\u0635\u0627\u0644 \u06a9\u06cc \u0648\u062c\u06c1 \u0633\u06d2 \u0645\u0646\u062c\u0645\u062f \u06c1\u0648 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<\/ul>\n<p>\u062a\u0627\u0631\u06cc\u062e\u06cc \u0637\u0648\u0631 \u067e\u0631\u060c \u0648\u0627\u062d\u062f \u062d\u0644 \u06cc\u06c1 \u062a\u06be\u0627 \u06a9\u06c1 \u0627\u06cc\u06a9 \u06a9\u0633\u0679\u0645 \u0628\u06cc\u06a9 \u0627\u06cc\u0646\u0688 \u0633\u0631\u0648\u0631 (Node.js, Python, Go&#8230;) \u06a9\u0648 \u0628\u0646\u0627\u06cc\u0627 \u062c\u0627\u0626\u06d2\u060c \u062a\u0639\u06cc\u0646\u0627\u062a \u06a9\u06cc\u0627 \u062c\u0627\u0626\u06d2 \u0627\u0648\u0631 \u0627\u0633\u06d2 \u0628\u0631\u0642\u0631\u0627\u0631 \u0631\u06a9\u06be\u0627 \u062c\u0627\u0626\u06d2 \u062c\u0648 \u0622\u067e \u06a9\u06cc \u0627\u06cc\u067e \u0627\u0648\u0631 Gemini API \u06a9\u06d2 \u062f\u0631\u0645\u06cc\u0627\u0646 \u0627\u06cc\u06a9 \u067e\u0631\u0627\u06a9\u0633\u06cc \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631 \u06a9\u0627\u0645 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u062a\u0627\u06a9\u06c1 \u0627\u0633 \u0633\u0646\u06af\u0644 \u0633\u0679\u0631\u0646\u06af \u06a9\u0648 \u062e\u0641\u06cc\u06c1 \u0631\u06a9\u06be\u0627 \u062c\u0627 \u0633\u06a9\u06d2\u06d4 \u06cc\u06c1 \u0686\u0644\u0627\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u0635\u0644 \u0628\u0646\u06cc\u0627\u062f\u06cc \u0688\u06be\u0627\u0646\u0686\u06c1 \u06c1\u06d2 \u062c\u0648 \u0627\u06cc\u06a9 \u0633\u0627\u062f\u06c1 \u0641\u0646\u06a9\u0634\u0646 \u06c1\u0648\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06d2\u06d4<\/p>\n<h2 id=\"heading-step-1-how-firebase-ai-logics-proxy-architecture-works\">\u0645\u0631\u062d\u0644\u06c1 1 \u2013 Firebase AI Logic \u06a9\u0627 \u067e\u0631\u0627\u06a9\u0633\u06cc \u0641\u0646 \u062a\u0639\u0645\u06cc\u0631 \u06a9\u06cc\u0633\u06d2 \u06a9\u0627\u0645 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/h2>\n<p><strong>Firebase AI \u0645\u0646\u0637\u0642<\/strong> \u06c1\u0645 \u067e\u0631\u0627\u06a9\u0633\u06cc \u06af\u06cc\u0679 \u0648\u06d2 \u06a9\u06cc \u062a\u0639\u0645\u06cc\u0631 \u06cc\u0627 \u0645\u06cc\u0632\u0628\u0627\u0646\u06cc \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06a9\u06d2 \u0628\u063a\u06cc\u0631 \u0627\u06cc\u06a9 \u067e\u0631\u0627\u06a9\u0633\u06cc \u06af\u06cc\u0679 \u0648\u06d2 \u0641\u0631\u0627\u06c1\u0645 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0622\u067e \u0627\u0628 \u0628\u06be\u06cc \u06a9\u0644\u0627\u0626\u0646\u0679 \u0633\u0627\u0626\u06cc\u0688 \u06a9\u0648\u0688 \u0644\u06a9\u06be\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u0644\u06cc\u06a9\u0646 \u0622\u067e \u06a9\u06cc \u0686\u0627\u0628\u06cc\u0627\u06ba \u06a9\u0628\u06be\u06cc \u0628\u06be\u06cc \u06af\u0648\u06af\u0644 \u06a9\u06d2 \u0628\u0646\u06cc\u0627\u062f\u06cc \u0688\u06be\u0627\u0646\u0686\u06d2 \u06a9\u0648 \u0646\u06c1\u06cc\u06ba \u0686\u06be\u0648\u0691\u062a\u06cc \u06c1\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-plaintext\">[Web Browser] \u2500\u2500(Authenticated Request)\u2500\u2500> [Firebase AI Logic Proxy] \u2500\u2500(Key Injected Server-Side)\u2500\u2500> [Gemini API]\n<\/code><\/pre>\n<p>\u0622\u067e \u06a9\u06cc Gemini API \u06a9\u0644\u06cc\u062f \u0622\u067e \u06a9\u06d2 Firebase \u067e\u0631\u0648\u062c\u06cc\u06a9\u0679 \u0633\u06d2 \u0645\u0646\u0633\u0644\u06a9 \u06c1\u06d2 \u0627\u0648\u0631 \u0645\u062d\u0641\u0648\u0638 \u0637\u0631\u06cc\u0642\u06d2 \u0633\u06d2 \u0627\u0633\u0679\u0648\u0631 \u06a9\u06cc \u06af\u0626\u06cc \u06c1\u06d2\u06d4 \u06a9\u0644\u0627\u0626\u0646\u0679 SDK \u067e\u0631\u0627\u06a9\u0633\u06cc \u06af\u06cc\u0679 \u0648\u06d2 \u06a9\u0648 \u0627\u06cc\u06a9 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0628\u06be\u06cc\u062c\u062a\u0627 \u06c1\u06d2\u060c \u062c\u0648 \u06a9\u0644\u06cc\u062f \u062f\u0627\u062e\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u06a9\u0627\u0644 \u06a9\u0648 \u0622\u067e \u06a9\u06cc \u067e\u0633\u0646\u062f \u06a9\u06d2 &quot;Gemini API&#8221; \u0641\u0631\u0627\u06c1\u0645 \u06a9\u0646\u0646\u062f\u06c1 \u06a9\u0648 \u0628\u06be\u06cc\u062c \u062f\u06cc\u062a\u0627 \u06c1\u06d2\u06d4 \u06a9\u0644\u06cc\u062f \u062c\u06d2 \u0627\u06cc\u0633 \u0628\u0646\u0688\u0644\u060c \u0646\u06cc\u0679 \u0648\u0631\u06a9 \u06a9\u06cc \u062f\u0631\u062e\u0648\u0627\u0633\u062a\u060c \u06cc\u0627 \u06a9\u0633\u06cc \u0627\u0648\u0631 \u0686\u06cc\u0632 \u0645\u06cc\u06ba \u0645\u0648\u062c\u0648\u062f \u0646\u06c1\u06cc\u06ba \u06c1\u06d2 \u062c\u0633 \u06a9\u0627 \u0628\u0631\u0627\u0624\u0632\u0631 \u0645\u0639\u0627\u0626\u0646\u06c1 \u06a9\u0631 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>Firebase AI Logic \u062f\u0648 \u0641\u0631\u0627\u06c1\u0645 \u06a9\u0646\u0646\u062f\u06af\u0627\u0646 \u06a9\u0648 \u0633\u067e\u0648\u0631\u0679 \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u060c \u062c\u0646 \u06a9\u0627 \u0627\u0646\u062a\u062e\u0627\u0628 \u06a9\u0646\u0633\u0648\u0644 \u0645\u06cc\u06ba \u0633\u0631\u0648\u0633 \u0633\u06cc\u0679 \u0627\u067e \u06a9\u0631\u062a\u06d2 \u0648\u0642\u062a \u06a9\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<table>\n<thead>\n<tr>\n<th\/>\n<th>Gemini Developer API<\/th>\n<th>Agent Platform Gemini API (\u0633\u0627\u0628\u0642\u06c1 \u200b\u200bVertex AI)<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>\u0627\u062f\u0627\u0626\u06cc\u06af\u06cc \u06a9\u06cc \u0645\u0646\u0635\u0648\u0628\u06c1 \u0628\u0646\u062f\u06cc<\/td>\n<td>\u0645\u0641\u062a \u0627\u0633\u067e\u0627\u0631\u06a9 \u067e\u0644\u0627\u0646 \u067e\u0631 \u06a9\u0627\u0645 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/td>\n<td>\u0628\u0644\u06cc\u0632 (\u062c\u06cc\u0633\u06cc \u0627\u062f\u0627\u0626\u06cc\u06af\u06cc \u06a9\u0631\u06cc\u06ba) \u067e\u0644\u0627\u0646 \u062f\u0631\u06a9\u0627\u0631 \u06c1\u06d2\u06d4<\/td>\n<\/tr>\n<tr>\n<td>\u06a9\u06d2 \u0644\u06cc\u06d2 \u0628\u06c1\u062a\u0631\u06cc\u0646 \u0645\u0648\u0632\u0648\u06ba \u06c1\u06d2\u06d4<\/td>\n<td>\u0641\u0648\u0631\u06cc \u0622\u063a\u0627\u0632\u060c \u067e\u0631\u0648\u0679\u0648 \u0679\u0627\u0626\u067e\u0646\u06af\u060c \u0632\u06cc\u0627\u062f\u06c1 \u062a\u0631 \u0648\u06cc\u0628\/\u0645\u0648\u0628\u0627\u0626\u0644 \u0627\u06cc\u067e\u0633<\/td>\n<td>\u0688\u06cc\u0679\u0627 \u06a9\u06cc \u0631\u06c1\u0627\u0626\u0634 \u06a9\u06d2 \u062a\u0642\u0627\u0636\u06d2\u060c \u0679\u06cc\u0645\u06cc\u06ba \u067e\u06c1\u0644\u06d2 \u0633\u06d2 \u06c1\u06cc Google Cloud\/Vertex AI \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631 \u0631\u06c1\u06cc \u06c1\u06cc\u06ba\u06d4<\/td>\n<\/tr>\n<tr>\n<td>\u0645\u0642\u0627\u0645\u06cc \u06a9\u0646\u0679\u0631\u0648\u0644<\/td>\n<td>\u0645\u062d\u062f\u0648\u062f<\/td>\n<td>\u0628\u0631\u0627\u06c1 \u06a9\u0631\u0645 \u0627\u06cc\u06a9 \u0645\u062e\u0635\u0648\u0635 \u0639\u0644\u0627\u0642\u06c1 \u0645\u0646\u062a\u062e\u0628 \u06a9\u0631\u06cc\u06ba (<code>us<\/code>\u060c <code>eu<\/code>) \u0645\u0627\u0688\u0644 \u062a\u06a9 \u0631\u0633\u0627\u0626\u06cc \u06a9\u06d2 \u0644\u06cc\u06d2 \u0645\u0627\u0688\u0644 \u067e\u0631 \u0645\u0646\u062d\u0635\u0631 \u06c1\u06d2\u06d4<\/td>\n<\/tr>\n<tr>\n<td>\u0631\u06af\u0691 \u06a9\u06cc \u062a\u0631\u062a\u06cc\u0628\u0627\u062a<\/td>\n<td>\u06a9\u0645 \u0633\u06d2 \u06a9\u0645\u060c \u0628\u0644\u0646\u06af \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4<\/td>\n<td>\u06a9\u0644\u0627\u0624\u0688 \u0628\u0644\u0646\u06af \u0627\u06a9\u0627\u0624\u0646\u0679 \u06a9\u0646\u06a9\u0634\u0646 \u062f\u0631\u06a9\u0627\u0631 \u06c1\u06d2\u06d4<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\u0632\u06cc\u0627\u062f\u06c1 \u062a\u0631 \u0627\u06cc\u067e\u0633 \u06a9\u06d2 \u0644\u06cc\u06d2\u060c Gemini Developer API \u0633\u06d2 \u0634\u0631\u0648\u0639 \u06a9\u0631\u06cc\u06ba\u060c \u062c\u0633\u06d2 \u06c1\u0645 \u0627\u0633 \u0679\u06cc\u0648\u0679\u0648\u0631\u06cc\u0644 \u0645\u06cc\u06ba \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0641\u0631\u0627\u06c1\u0645 \u06a9\u0646\u0646\u062f\u06af\u0627\u0646 \u06a9\u0648 \u0628\u0639\u062f \u0645\u06cc\u06ba \u062a\u0628\u062f\u06cc\u0644 \u06a9\u0631\u0646\u0627 \u06a9\u0646\u0641\u06cc\u06af\u0631\u06cc\u0634\u0646 \u0645\u06cc\u06ba \u062a\u0628\u062f\u06cc\u0644\u06cc \u06c1\u06d2\u060c \u06a9\u0648\u0688 \u06a9\u0648 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0644\u06a9\u06be\u0646\u0627 \u0646\u06c1\u06cc\u06ba\u06d4 \u06a9\u06cc\u0648\u0646\u06a9\u06c1 \u062f\u0648\u0646\u0648\u06ba \u0627\u06cc\u06a9 \u06c1\u06cc \u0639\u0645\u0644 \u0633\u06d2 \u06af\u0632\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 <code>getGenerativeModel()<\/code> \u0627\u0646\u0679\u0631\u0641\u06cc\u0633<\/p>\n<h2 id=\"heading-step-2-what-firebase-app-check-actually-does\">\u0645\u0631\u062d\u0644\u06c1 2 &#8211; Firebase \u0627\u06cc\u067e \u0627\u0635\u0644 \u0645\u06cc\u06ba \u06a9\u06cc\u0627 \u0686\u06cc\u06a9 \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u06d4<\/h2>\n<p>\u067e\u0631\u0627\u06a9\u0633\u06cc \u0622\u067e \u06a9\u06cc \u0686\u0627\u0628\u06cc\u0627\u06ba \u0686\u06be\u067e\u0627\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u06cc\u06c1 \u062e\u0648\u062f \u0633\u06d2 \u0646\u06c1\u06cc\u06ba \u0631\u06a9\u062a\u0627\u06d4 <em>\u062c\u0648 \u0628\u06be\u06cc<\/em> \u0641\u0627\u0626\u0631 \u0628\u06cc\u0633 \u06a9\u0646\u0641\u06cc\u06af\u0631\u06cc\u0634\u0646 \u0622\u0628\u062c\u06cc\u06a9\u0679 \u0628\u0646\u0627\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u0633 \u067e\u0631\u0627\u06a9\u0633\u06cc \u06a9\u0648 \u06a9\u0627\u0644 \u06a9\u0631\u06cc\u06ba (<code>apiKey<\/code>\u060c <code>projectId<\/code>\u0648\u063a\u06cc\u0631\u06c1) \u062e\u0641\u06cc\u06c1 \u0646\u06c1\u06cc\u06ba \u06c1\u06cc\u06ba\u060c \u0627\u0646\u06c1\u06cc\u06ba \u0639\u0648\u0627\u0645\u06cc \u06c1\u0648\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0688\u06cc\u0632\u0627\u0626\u0646 \u06a9\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2\u060c \u0627\u0648\u0631 \u0648\u06c1 \u062a\u0645\u0627\u0645 \u062a\u0642\u0633\u06cc\u0645 \u0634\u062f\u06c1 \u0627\u06cc\u067e\u0633 \u06a9\u06d2 \u0628\u0646\u0688\u0644 \u0645\u06cc\u06ba \u0638\u0627\u06c1\u0631 \u06c1\u0648\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0688\u06cc\u0632\u0627\u0626\u0646 \u06a9\u06cc\u06d2 \u06af\u0626\u06d2 \u06c1\u06cc\u06ba\u06d4 \u06a9\u0633\u06cc \u062f\u0648\u0633\u0631\u06cc \u067e\u0631\u062a \u06a9\u06d2 \u0628\u063a\u06cc\u0631\u060c \u0622\u067e \u06a9\u0627 \u0628\u0648\u0679 \u0627\u0633 \u06a9\u0646\u0641\u06cc\u06af\u0631\u06cc\u0634\u0646 \u06a9\u0648 \u06a9\u0627\u067e\u06cc \u06a9\u0631 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u060c \u0622\u067e \u06a9\u06d2 \u067e\u0631\u0648\u062c\u06cc\u06a9\u0679 \u06a9\u06cc \u0637\u0631\u0641 \u0627\u0634\u0627\u0631\u06c1 \u06a9\u0631\u0646\u06d2 \u0648\u0627\u0644\u06cc \u0627\u067e\u0646\u06cc Firebase \u0627\u06cc\u067e \u06a9\u0648 \u0634\u0631\u0648\u0639 \u06a9\u0631 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u060c \u0627\u0648\u0631 \u06a9\u0633\u06cc \u062d\u0642\u06cc\u0642\u06cc \u0635\u0627\u0631\u0641 \u06a9\u06cc \u0634\u0645\u0648\u0644\u06cc\u062a \u06a9\u06d2 \u0628\u063a\u06cc\u0631 Gemini \u0627\u0646\u0648\u0627\u0626\u0633\u0632 \u0686\u0644\u0627\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 AI Logic \u067e\u0631\u0627\u06a9\u0633\u06cc \u06a9\u0648 \u0628\u0631\u0627\u06c1 \u0631\u0627\u0633\u062a \u06a9\u0627\u0644 \u06a9\u0631 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u06cc\u06c1 \u06c1\u06d2 <strong>\u0641\u0627\u0626\u0631 \u0628\u06cc\u0633 \u0627\u06cc\u067e \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4<\/strong> \u062a\u0635\u062f\u06cc\u0642 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0627\u0644\u062c\u06be\u0646 \u0645\u06cc\u06ba \u067e\u0691\u0646\u0627 \u0622\u0633\u0627\u0646 \u06c1\u06d2\u060c \u0644\u06c1\u0630\u0627 \u06cc\u06c1 \u0633\u0645\u062c\u06be\u0646\u0627 \u0627\u0686\u06be\u0627 \u062e\u06cc\u0627\u0644 \u06c1\u06d2 \u06a9\u06c1 \u06cc\u06c1 \u06a9\u06cc\u0627 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p><strong>\u0627\u06cc\u067e \u0686\u06cc\u06a9 \u062b\u0628\u0648\u062a \u06c1\u06d2\u060c \u062a\u0635\u062f\u06cc\u0642 \u0646\u06c1\u06cc\u06ba\u06d4<\/strong> Firebase \u062a\u0648\u062b\u06cc\u0642 \u06a9\u0627 \u062c\u0648\u0627\u0628 &quot;\u06cc\u06c1 \u0635\u0627\u0631\u0641 \u06a9\u0648\u0646 \u06c1\u06d2\u061f&#8221; \u0627\u06cc\u067e \u0686\u06cc\u06a9 \u062f\u06cc\u06af\u0631 \u0633\u0648\u0627\u0644\u0627\u062a \u06a9\u06d2 \u062c\u0648\u0627\u0628\u0627\u062a \u062f\u06cc\u062a\u0627 \u06c1\u06d2\u060c \u062c\u06cc\u0633\u06d2: &#8216;\u06a9\u06cc\u0627 \u06cc\u06c1 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u06a9\u0633\u06cc \u062d\u0642\u06cc\u0642\u06cc\u060c \u063a\u06cc\u0631 \u0686\u06be\u06cc\u0691 \u0686\u06be\u0627\u0691 \u0633\u06d2 \u0622\u0631\u06c1\u06cc \u06c1\u06d2\u061f <em>\u0645\u06cc\u0631\u06cc \u0627\u06cc\u067e<\/em>\u06a9\u06cc\u0627 \u06cc\u06c1 \u0627\u0633\u06a9\u0631\u067e\u0679\u060c \u0628\u0648\u0679\u060c \u06cc\u0627 \u06a9\u0633\u06cc \u0627\u0648\u0631 \u06a9\u06cc \u0627\u06cc\u067e \u0646\u06c1\u06cc\u06ba \u06c1\u06d2 \u062c\u0648 \u0645\u06cc\u0631\u06cc \u06a9\u0646\u0641\u06cc\u06af\u0631\u06cc\u0634\u0646 \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631 \u0631\u06c1\u06cc \u06c1\u06d2\u061f&#8217; \u062f\u0648\u0646\u0648\u06ba \u06a9\u0648 \u0627\u06cc\u06a9 \u0633\u0627\u062a\u06be \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u06cc\u0627 \u062c\u0627 \u0633\u06a9\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u06a9\u06cc\u0627 \u062c\u0627\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06d2\u060c \u0644\u06cc\u06a9\u0646 \u0627\u06cc\u067e \u0686\u06cc\u06a9 \u0628\u062f\u0633\u0644\u0648\u06a9\u06cc \u0633\u06d2 \u062a\u062d\u0641\u0638 \u0641\u0631\u0627\u06c1\u0645 \u06a9\u0631\u062a\u06cc \u06c1\u06d2 \u06cc\u06c1\u0627\u06ba \u062a\u06a9 \u06a9\u06c1 \u062c\u0628 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u06a9\u0627 \u06a9\u0648\u0626\u06cc \u0635\u0627\u0631\u0641 \u0633\u06cc\u0627\u0642 \u0648 \u0633\u0628\u0627\u0642 \u0646\u06c1 \u06c1\u0648\u06d4<\/p>\n<p><strong>\u0622\u0626\u06cc\u06d2 \u0627\u06cc\u06a9 \u0642\u062f\u0645 \u0628\u06c1 \u0642\u062f\u0645 \u062f\u06cc\u06a9\u06be\u062a\u06d2 \u06c1\u06cc\u06ba \u06a9\u06c1 \u0628\u06c1\u0627\u0624 \u062f\u0631\u0627\u0635\u0644 \u06a9\u06cc\u0633\u06d2 \u06a9\u0627\u0645 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/strong><\/p>\n<ol>\n<li>\n<p>\u062c\u0628 \u0622\u067e \u06a9\u06cc \u0627\u06cc\u067e \u0627\u06cc\u067e \u0686\u06cc\u06a9 \u06a9\u0648 \u0634\u0631\u0648\u0639 \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u060c SDK <strong>\u062b\u0628\u0648\u062a \u0686\u06cc\u0644\u0646\u062c<\/strong> \u062a\u0634\u06a9\u06cc\u0644 \u0634\u062f\u06c1 \u0641\u0631\u0627\u06c1\u0645 \u06a9\u0646\u0646\u062f\u06af\u0627\u0646 \u06a9\u06d2 \u0633\u0627\u062a\u06be\u06d4 \u0648\u06cc\u0628 \u067e\u0631\u060c reCAPTCHA Enterprise \u0627\u06cc\u06a9 \u063a\u06cc\u0631 \u0645\u0631\u0626\u06cc \u062e\u0637\u0631\u06d2 \u06a9\u06cc \u062a\u0634\u062e\u06cc\u0635 (\u0645\u0627\u0624\u0633 \u06a9\u06cc \u0646\u0642\u0644 \u0648 \u062d\u0631\u06a9\u062a\u060c \u0628\u0631\u0627\u0624\u0632\u0631 \u06a9\u06d2 \u0641\u0646\u06af\u0631 \u067e\u0631\u0646\u0679\u0633\u060c \u0646\u06cc\u0679 \u0648\u0631\u06a9 \u0633\u06af\u0646\u0644\u0632) \u0627\u0646\u062c\u0627\u0645 \u062f\u06cc\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u06cc\u06c1 \u062f\u0639\u0648\u06cc\u0670 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2 \u0627\u06cc\u06a9 \u0679\u0648\u06a9\u0646 \u0648\u0627\u067e\u0633 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c &quot;\u06cc\u06c1 \u0628\u0631\u0627\u0624\u0632\u0631 \u06a9\u0627 \u0627\u06cc\u06a9 \u062c\u0627\u0626\u0632 \u0633\u06cc\u0634\u0646 \u0645\u0639\u0644\u0648\u0645 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4&#8221;<\/p>\n<\/li>\n<li>\n<p>\u0622\u067e \u06a9\u06cc \u0627\u06cc\u067e \u06a9\u0627 SDK \u0645\u062a\u0639\u0644\u0642\u06c1 reCAPTCHA \u0679\u0648\u06a9\u0646 \u06a9\u0648 Firebase \u06a9\u06d2 App Check \u0628\u06cc\u06a9 \u0627\u06cc\u0646\u0688 \u067e\u0631 \u0628\u06be\u06cc\u062c\u062a\u0627 \u06c1\u06d2\u060c \u062c\u0648 Firebase \u06a9\u06d2 App Check \u0628\u06cc\u06a9 \u0627\u06cc\u0646\u0688 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0627\u0633 \u06a9\u0627 \u062a\u0628\u0627\u062f\u0644\u06c1 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 <strong>\u0641\u0627\u0626\u0631 \u0628\u06cc\u0633 \u0627\u06cc\u067e \u0686\u06cc\u06a9 \u0679\u0648\u06a9\u0646<\/strong>\u06cc\u06c1 \u0627\u06cc\u06a9 \u0645\u062e\u062a\u0635\u0631 \u0645\u062f\u062a \u06a9\u06d2 \u0644\u06cc\u06d2 \u062f\u0633\u062a\u062e\u0637 \u0634\u062f\u06c1 JWT \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p>\u0648\u06c1 \u0627\u06cc\u067e \u0686\u06cc\u06a9 \u0679\u0648\u06a9\u0646 \u0645\u0642\u0627\u0645\u06cc \u0637\u0648\u0631 \u067e\u0631 \u06a9\u06cc\u0634 \u06a9\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u062e\u0648\u062f \u0628\u062e\u0648\u062f \u0622\u067e \u06a9\u06cc \u0627\u06cc\u067e Firebase AI Logic (\u0627\u0648\u0631 \u062f\u06cc\u06af\u0631 \u0627\u06cc\u067e \u0686\u06cc\u06a9 \u0627\u0646\u0679\u06cc\u06af\u0631\u06cc\u0634\u0646 \u0633\u0631\u0648\u0633\u0632\u060c \u062c\u06cc\u0633\u06d2 \u06a9\u06c1 Firestore \u06cc\u0627 Cloud Functions) \u06a9\u06d2 \u0628\u0639\u062f \u06a9\u06cc \u062c\u0627\u0646\u06d2 \u0648\u0627\u0644\u06cc \u062a\u0645\u0627\u0645 \u062f\u0631\u062e\u0648\u0627\u0633\u062a\u0648\u06ba \u0633\u06d2 \u0645\u0646\u0633\u0644\u06a9 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p>AI Logic \u067e\u0631\u0627\u06a9\u0633\u06cc \u062c\u06cc\u0645\u0646\u06cc \u06a9\u0648 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0628\u06be\u06cc\u062c\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u0627\u06cc\u067e \u0686\u06cc\u06a9 \u0679\u0648\u06a9\u0646 \u06a9\u06d2 \u062f\u0633\u062a\u062e\u0637 \u0627\u0648\u0631 \u062f\u0631\u0633\u062a\u06af\u06cc \u06a9\u06cc \u062a\u0635\u062f\u06cc\u0642 \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u06d4 \u06a9\u0648\u0626\u06cc \u062f\u0631\u0633\u062a \u0679\u0648\u06a9\u0646 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2 \u0627\u0648\u0631 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0645\u0627\u0688\u0644 \u062a\u06a9 \u0646\u06c1\u06cc\u06ba \u067e\u06c1\u0646\u0686\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<\/ol>\n<p>\u06cc\u06c1 \u06a9\u06cc\u0648\u06ba \u0627\u06c1\u0645\u06cc\u062a \u0631\u06a9\u06be\u062a\u0627 \u06c1\u06d2\u06d4 <em>\u062e\u0627\u0635 \u0637\u0648\u0631 \u067e\u0631<\/em> \u0639\u0627\u0645 CRUD \u0628\u06cc\u06a9 \u0627\u06cc\u0646\u0688\u0632 \u06a9\u06d2 \u0645\u0642\u0627\u0628\u0644\u06d2 \u062c\u0646\u0631\u06cc\u0679\u06cc\u0648 AI \u06a9\u06d2 \u0644\u06cc\u06d2 \u0644\u0627\u06af\u062a \u06a9\u06cc \u0634\u06a9\u0644 \u0632\u06cc\u0627\u062f\u06c1 \u0627\u06c1\u0645 \u06c1\u06d2\u06d4 \u0628\u0644\u0627\u06a9 \u0634\u062f\u06c1 \u0641\u0627\u0626\u0631 \u0627\u0633\u0679\u0648\u0631 \u0631\u06cc\u0688\u0632 \u06a9\u06d2 \u0644\u06cc\u06d2 \u06a9\u0648\u0626\u06cc \u0642\u06cc\u0645\u062a \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 \u0627\u06af\u0631 \u0645\u0633\u062f\u0648\u062f \u0646\u06c1\u06cc\u06ba \u06a9\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2 \u062a\u0648\u060c \u0628\u0644\u0627\u06a9 \u0634\u062f\u06c1 \u062c\u06cc\u0645\u0646\u06cc \u06a9\u0627\u0644\u0632 \u0622\u067e \u06a9\u0648 \u0641\u06cc \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u062d\u0642\u06cc\u0642\u06cc \u0631\u0642\u0645 \u062e\u0631\u0686 \u06a9\u0631 \u0633\u06a9\u062a\u06cc \u06c1\u06cc\u06ba\u060c \u0627\u0648\u0631 \u067e\u06cc\u0645\u0627\u0646\u06d2 \u067e\u0631\u060c \u0627\u0633\u06a9\u0631\u067e\u0679\u0688 \u0627\u0628\u06cc\u0648\u0632 \u0644\u0648\u067e\u0633 \u0622\u067e \u06a9\u06d2 \u0645\u0627\u06c1\u0627\u0646\u06c1 \u0628\u062c\u0679 \u06a9\u0648 \u0686\u0646\u062f \u06af\u06be\u0646\u0679\u0648\u06ba \u0645\u06cc\u06ba \u06a9\u06be\u0627 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0627\u06cc\u067e \u0686\u06cc\u06a9 \u0627\u0633 \u0628\u0627\u062a \u06a9\u0648 \u06cc\u0642\u06cc\u0646\u06cc \u0628\u0646\u0627\u0646\u06d2 \u06a9\u0627 \u06af\u06cc\u0679 \u0648\u06d2 \u06c1\u06d2 \u06a9\u06c1 \u0622\u067e \u06a9\u0627 \u062e\u0631\u0686 \u0635\u0631\u0641 \u062d\u0642\u06cc\u0642\u06cc \u0627\u06cc\u067e\u0633 \u067e\u0631 \u0686\u0644\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p><strong>\u0627\u062d\u062a\u06cc\u0627\u0637:<\/strong> \u06af\u0648\u06af\u0644 \u0646\u06d2 \u0627\u06cc\u067e \u0686\u06cc\u06a9 \u06a9\u06d2 \u0646\u0641\u0627\u0630 \u06a9\u0627 \u0627\u0639\u0644\u0627\u0646 \u06a9\u0631 \u062f\u06cc\u0627\u06d4 <strong>2 \u0646\u0648\u0645\u0628\u0631 2026 \u0633\u06d2 Firebase AI Logic \u06a9\u06d2 \u0644\u06cc\u06d2 \u062f\u0631\u06a9\u0627\u0631 \u06c1\u06d2\u06d4<\/strong>. \u062c\u0648\u0644\u0627\u0626\u06cc 2026 \u0633\u06d2\u060c \u0646\u0626\u06d2 AI \u0645\u0646\u0637\u0642 \u06a9\u06d2 \u0627\u0646\u0636\u0645\u0627\u0645 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u06cc\u067e \u06a9\u06cc \u062c\u0627\u0646\u0686 \u067e\u06c1\u0644\u06d2 \u06c1\u06cc Firebase \u06a9\u0646\u0633\u0648\u0644 \u0645\u06cc\u06ba \u06af\u0627\u0626\u06cc\u0688\u0688 \u0633\u06cc\u0679 \u0627\u067e \u0648\u0631\u06a9 \u0641\u0644\u0648 \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u062e\u0648\u062f \u0628\u062e\u0648\u062f \u0641\u0639\u0627\u0644 \u06c1\u0648 \u0686\u06a9\u06cc \u06c1\u06d2\u06d4 \u0645\u0624\u062b\u0631 \u062a\u0627\u0631\u06cc\u062e \u06a9\u06d2 \u0628\u0639\u062f \u06a9\u0633\u06cc \u0628\u06be\u06cc \u063a\u06cc\u0631 \u0645\u0635\u062f\u0642\u06c1 \u062f\u0631\u062e\u0648\u0627\u0633\u062a\u0648\u06ba \u06a9\u0648 \u0645\u0633\u062a\u0631\u062f \u06a9\u0631 \u062f\u06cc\u0627 \u062c\u0627\u0626\u06d2 \u06af\u0627\u060c \u0644\u06c1\u0630\u0627 \u06c1\u0645 \u0628\u0639\u062f \u0645\u06cc\u06ba \u06af\u06be\u0628\u0631\u0627\u0646\u06d2 \u06a9\u06cc \u0628\u062c\u0627\u0626\u06d2 \u0627\u0628\u06be\u06cc \u0631\u0627\u0628\u0637\u06c1 \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u062a\u062c\u0648\u06cc\u0632 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<h2 id=\"heading-step-3-set-up-your-firebase-project\">\u0645\u0631\u062d\u0644\u06c1 3 \u2013 \u0627\u067e\u0646\u0627 Firebase \u067e\u0631\u0648\u062c\u06cc\u06a9\u0679 \u062a\u0631\u062a\u06cc\u0628 \u062f\u06cc\u06ba\u06d4<\/h2>\n<ol>\n<li>\n<p>Firebase \u06a9\u0646\u0633\u0648\u0644 \u067e\u0631 \u062c\u0627\u0626\u06cc\u06ba \u0627\u0648\u0631 \u0627\u06cc\u06a9 \u0646\u06cc\u0627 \u067e\u0631\u0648\u062c\u06cc\u06a9\u0679 \u0628\u0646\u0627\u0626\u06cc\u06ba \u06cc\u0627 \u0627\u06cc\u06a9 \u0645\u0648\u062c\u0648\u062f\u06c1 \u067e\u0631\u0648\u062c\u06cc\u06a9\u0679 \u06a9\u06be\u0648\u0644\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p>\u0628\u0627\u0626\u06cc\u06ba \u0633\u0627\u0626\u0688\u0628\u0627\u0631 \u0645\u06cc\u06ba\u060c \u06a9\u06be\u0648\u0644\u06cc\u06ba: <strong>\u062a\u062d\u0631\u06cc\u0631<\/strong> \u067e\u06be\u0631 <strong>\u0627\u06d2 \u0622\u0626\u06cc \u0645\u0646\u0637\u0642<\/strong>\u060c \u067e\u06be\u0631 \u06a9\u0644\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4 <strong>\u0634\u0631\u0648\u0639 \u06a9\u0631\u0646\u0627<\/strong>. \u0645\u0646\u062a\u062e\u0628 \u06a9\u0631\u06cc\u06ba <strong>Gemini Developer API<\/strong> \u0622\u067e \u0628\u0644\u0646\u06af \u0633\u06cc\u0679 \u0627\u067e \u06a9\u06cc\u06d2 \u0628\u063a\u06cc\u0631 \u0628\u0637\u0648\u0631 \u0641\u0631\u0627\u06c1\u0645 \u06a9\u0646\u0646\u062f\u06c1 \u062d\u0635\u06c1 \u0644\u06d2 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p>\u062f\u0648\u0628\u0627\u0631\u06c1 <strong>\u067e\u0631\u0648\u062c\u06cc\u06a9\u0679 \u06a9\u06cc \u062a\u0631\u062a\u06cc\u0628\u0627\u062a<\/strong>\u067e\u0631 \u062c\u0627\u0626\u06cc\u06ba\u06d4 <strong>\u062c\u0646\u0631\u0644<\/strong> \u067e\u06be\u0631 <strong>\u0622\u067e \u06a9\u06cc \u0627\u06cc\u067e<\/strong>. \u0627\u06af\u0631 \u0622\u067e \u0646\u06d2 \u067e\u06c1\u0644\u06d2 \u0633\u06d2 \u0627\u067e\u0646\u06cc \u0648\u06cc\u0628 \u0627\u06cc\u067e \u06a9\u0648 \u0631\u062c\u0633\u0679\u0631 \u0646\u06c1\u06cc\u06ba \u06a9\u0631\u0627\u06cc\u0627 \u06c1\u06d2 \u062a\u0648 \u0627\u0633\u06d2 \u0631\u062c\u0633\u0679\u0631 \u06a9\u0631\u06cc\u06ba \u0627\u0648\u0631 Firebase \u06a9\u0646\u0641\u06cc\u06af\u0631\u06cc\u0634\u0646 \u0622\u0628\u062c\u06cc\u06a9\u0679 \u06a9\u0648 \u06a9\u0627\u067e\u06cc \u06a9\u0631\u06cc\u06ba\u06d4 \u0627\u06af\u0644\u06d2 \u0645\u0631\u062d\u0644\u06d2 \u0645\u06cc\u06ba \u0622\u067e \u06a9\u0648 \u0627\u0633 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u0648\u06af\u06cc\u06d4<\/p>\n<\/li>\n<\/ol>\n<p>\u0627\u06cc\u067e \u0686\u06cc\u06a9 \u06a9\u06cc \u062a\u0631\u062a\u06cc\u0628\u0627\u062a \u06a9\u0648 \u062e\u0648\u062f \u06c1\u06cc \u062f\u0631\u06cc\u0627\u0641\u062a \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u06d2\u060c \u0644\u06c1\u0630\u0627 \u06c1\u0645 \u0627\u0646\u06c1\u06cc\u06ba \u0627\u06af\u0644\u06d2 \u0645\u0631\u062d\u0644\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u06a9\u06cc\u0644\u0627 \u0686\u06be\u0648\u0691 \u062f\u06cc\u06ba \u06af\u06d2\u06d4<\/p>\n<h2 id=\"heading-step-4-integrate-firebase-app-check\">\u0645\u0631\u062d\u0644\u06c1 4 &#8211; \u0641\u0627\u0626\u0631 \u0628\u06cc\u0633 \u0627\u06cc\u067e \u0686\u06cc\u06a9 \u0627\u0646\u0679\u06cc\u06af\u0631\u06cc\u0634\u0646<\/h2>\n<h3 id=\"heading-register-your-app-for-recaptcha-enterprise\">\u0627\u067e\u0646\u06cc \u0627\u06cc\u067e \u06a9\u0648 reCAPTCHA \u0627\u0646\u0679\u0631\u067e\u0631\u0627\u0626\u0632 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0631\u062c\u0633\u0679\u0631 \u06a9\u0631\u06cc\u06ba\u06d4<\/h3>\n<p>Firebase \u06a9\u0646\u0633\u0648\u0644 \u0645\u06cc\u06ba\u060c \u0627\u0633 \u067e\u0631 \u062c\u0627\u0626\u06cc\u06ba: <strong>\u062a\u062d\u0631\u06cc\u0631<\/strong> \u067e\u06be\u0631 <strong>\u0627\u06cc\u067e \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4<\/strong>\u0627\u06cc\u06a9 \u0648\u06cc\u0628 \u0627\u06cc\u067e \u0645\u0646\u062a\u062e\u0628 \u06a9\u0631\u06cc\u06ba\u06d4 <strong>reCAPTCHA \u0627\u0646\u0679\u0631\u067e\u0631\u0627\u0626\u0632<\/strong> \u0628\u0637\u0648\u0631 \u0633\u067e\u0644\u0627\u0626\u0631\u06d4 \u0641\u0627\u0626\u0631 \u0628\u06cc\u0633 <strong>\u0633\u0627\u0626\u0679 \u06a9\u06cc \u06a9\u0644\u06cc\u062f<\/strong> \u0627\u06cc\u067e \u0688\u0648\u0645\u06cc\u0646 \u0633\u06d2 \u0645\u0646\u0633\u0644\u06a9 \u06c1\u06d2\u06d4 \u0627\u0633\u06d2 \u06a9\u0627\u067e\u06cc \u06a9\u0631\u06cc\u06ba \u062c\u06cc\u0633\u0627 \u06a9\u06c1 \u06c1\u0645 \u0627\u0633\u06d2 \u0646\u06cc\u0686\u06d2 \u06a9\u0648\u0688 \u0645\u06cc\u06ba \u0645\u0646\u062a\u0642\u0644 \u06a9\u0631\u06cc\u06ba \u06af\u06d2\u06d4<\/p>\n<h3 id=\"heading-install-the-sdk\">SDK \u0627\u0646\u0633\u0679\u0627\u0644 \u06a9\u0631\u06cc\u06ba\u06d4<\/h3>\n<pre><code class=\"language-shell\">npm install firebase\n<\/code><\/pre>\n<p>\u06cc\u06c1 \u0648\u0627\u062d\u062f \u067e\u06cc\u06a9\u06cc\u062c \u06c1\u06d2 \u062c\u0633 \u06a9\u06cc \u0622\u067e \u06a9\u0648 \u0636\u0631\u0648\u0631\u062a \u06c1\u06d2\u06d4 <code>ReCaptchaEnterpriseProvider<\/code> \u0627\u0646\u062f\u0631\u0648\u0646\u06cc \u0634\u067e\u0646\u06af <code>firebase\/app-check<\/code>\u0627\u06cc\u06a9 \u06c1\u06cc \u062d\u0635\u06c1 <code>firebase<\/code> \u067e\u06cc\u06a9\u062c \u0639\u0644\u06cc\u062d\u062f\u06c1 reCAPTCHA SDK \u0627\u0646\u0633\u0679\u0627\u0644 \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 <code><script\/><\/code> \u0628\u0631\u0627\u06c1 \u06a9\u0631\u0645 \u062f\u0633\u062a\u06cc \u0637\u0648\u0631 \u067e\u0631 \u0679\u06cc\u06af\u0632 \u0634\u0627\u0645\u0644 \u06a9\u0631\u06cc\u06ba\u06d4 Firebase reCAPTCHA \u0627\u0646\u0679\u0631\u067e\u0631\u0627\u0626\u0632 \u0627\u0633\u06a9\u0631\u067e\u0679 \u06a9\u0648 \u0641\u0648\u0631\u06cc \u0637\u0648\u0631 \u067e\u0631 \u0644\u0648\u0688 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u062c\u0628: <code>initializeAppCheck()<\/code> \u062f\u0648\u0691\u0648\u06d4<\/p>\n<h3 id=\"heading-initialize-app-check-with-a-debug-token-for-local-development\">\u0645\u0642\u0627\u0645\u06cc \u062a\u0631\u0642\u06cc \u06a9\u06d2 \u0644\u06cc\u06d2 \u0688\u06cc\u0628\u06af \u0679\u0648\u06a9\u0646 \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2 \u0627\u06cc\u067e \u0686\u06cc\u06a9 \u06a9\u0648 \u0634\u0631\u0648\u0639 \u06a9\u0631\u06cc\u06ba\u06d4<\/h3>\n<p>reCAPTCHA Enterprise \u0642\u0627\u0628\u0644 \u0627\u0639\u062a\u0645\u0627\u062f \u0637\u0631\u06cc\u0642\u06d2 \u0633\u06d2 \u06a9\u0627\u0645 \u0646\u06c1\u06cc\u06ba \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 <code>localhost<\/code>\u0644\u06c1\u0630\u0627\u060c \u067e\u0631\u0648\u0688\u06a9\u0634\u0646 \u06a9\u0648\u0688 \u0644\u06a9\u06be\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u0627\u06cc\u067e \u0686\u06cc\u06a9 \u062a\u0631\u062a\u06cc\u0628 \u062f\u06cc\u06ba\u06d4 <strong>\u0688\u06cc\u0628\u06af \u0641\u0631\u0627\u06c1\u0645 \u06a9\u0646\u0646\u062f\u06c1<\/strong>. \u06cc\u06c1 \u0622\u067e \u06a9\u0648 \u062c\u06be\u0648\u0679\u06d2 \u0645\u0633\u062a\u0631\u062f\u0648\u06ba \u06a9\u06d2 \u062e\u0644\u0627\u0641 \u0644\u0691\u06d2 \u0628\u063a\u06cc\u0631 \u0645\u0642\u0627\u0645\u06cc \u0637\u0648\u0631 \u067e\u0631 \u062a\u0631\u0642\u06cc \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u0627\u062c\u0627\u0632\u062a \u062f\u06cc\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-javascript\">\/\/ app-check-setup.js\nimport { initializeApp } from \"firebase\/app\";\nimport { initializeAppCheck, ReCaptchaEnterpriseProvider } from \"firebase\/app-check\";\n\nconst firebaseConfig = {\n  apiKey: \"AIzaSy...\",\n  authDomain: \"your-project.firebaseapp.com\",\n  projectId: \"your-project\",\n  storageBucket: \"your-project.firebasestorage.app\",\n  messagingSenderId: \"123456789\",\n  appId: \"1:1234:web:abcd\",\n};\n\nconst app = initializeApp(firebaseConfig);\n\n\/\/ Enable the debug provider ONLY in local\/dev environments.\n\/\/ This prints a debug token to the console the first time it runs.\nif (location.hostname === \"localhost\") {\n  self.FIREBASE_APPCHECK_DEBUG_TOKEN = true;\n}\n\nexport const appCheck = initializeAppCheck(app, {\n  provider: new ReCaptchaEnterpriseProvider(\"YOUR_RECAPTCHA_ENTERPRISE_SITE_KEY\"),\n  isTokenAutoRefreshEnabled: true,\n});\n\nexport { app };\n<\/code><\/pre>\n<p>\u0627\u06af\u0631 \u0622\u067e \u0627\u0633\u06d2 \u067e\u06c1\u0644\u06cc \u0628\u0627\u0631 \u0645\u0642\u0627\u0645\u06cc \u0637\u0648\u0631 \u067e\u0631 \u0686\u0644\u0627 \u0631\u06c1\u06d2 \u06c1\u06cc\u06ba\u060c \u062a\u0648 \u0627\u067e\u0646\u06d2 \u0628\u0631\u0627\u0624\u0632\u0631 \u06a9\u0646\u0633\u0648\u0644 \u06a9\u0648 \u0627\u0633 \u0637\u0631\u062d \u06a9\u06cc \u0644\u0627\u0626\u0646 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba:<\/p>\n<pre><code class=\"language-plaintext\">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.\n<\/code><\/pre>\n<p>\u0679\u0648\u06a9\u0646 <strong>\u0627\u06cc\u067e \u2192 \u0627\u06cc\u067e \u2192 \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4 [your app] \u2192 \u0688\u06cc\u0628\u06af \u0679\u0648\u06a9\u0646 \u0645\u06cc\u0646\u062c\u0645\u0646\u0679<\/strong> \u06a9\u0646\u0633\u0648\u0644 \u0633\u06d2\u06d4 \u0627\u0633 \u06a9\u06d2 \u0628\u0639\u062f \u0633\u06d2\u060c \u0645\u0642\u0627\u0645\u06cc \u0646\u0638\u0627\u0645 \u06a9\u06cc \u062f\u0631\u062e\u0648\u0627\u0633\u062a\u0648\u06ba \u06a9\u0648 \u0628\u063a\u06cc\u0631 \u06a9\u0633\u06cc \u062d\u0642\u06cc\u0642\u06cc reCAPTCHA \u0686\u06cc\u0644\u0646\u062c \u06a9\u06d2 \u062a\u0635\u062f\u06cc\u0642 \u0634\u062f\u06c1 \u0633\u0645\u062c\u06be\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u0633 \u0688\u06cc\u0628\u06af \u0679\u0648\u06a9\u0646 \u0628\u0644\u0627\u06a9 \u06a9\u0648 \u067e\u0631\u0648\u0688\u06a9\u0634\u0646 \u0645\u06cc\u06ba \u0641\u0631\u0627\u06c1\u0645 \u0646\u06c1 \u06a9\u0631\u06cc\u06ba\u06d4 \u062c\u06cc\u0633\u0627 \u06a9\u06c1 \u0627\u0648\u067e\u0631 \u0628\u062a\u0627\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2 \u0645\u0627\u062d\u0648\u0644\u06cc\u0627\u062a\u06cc \u0686\u06cc\u06a9 \u06a9\u06d2 \u067e\u06cc\u0686\u06be\u06d2 \u0627\u06cc\u06a9 \u06af\u06cc\u0679 \u0644\u06af\u0627\u0646\u0627 \u0636\u0631\u0648\u0631\u06cc \u06c1\u06d2\u06d4<\/p>\n<h3 id=\"heading-verifying-its-working\">\u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba \u06a9\u06c1 \u0622\u06cc\u0627 \u06cc\u06c1 \u06a9\u0627\u0645 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/h3>\n<p>\u0627\u06cc\u06a9 \u0628\u0627\u0631 \u062c\u0628 \u0622\u067e \u06a9\u06cc \u0627\u06cc\u067e \u0627\u067e\u0646\u06cc \u067e\u06c1\u0644\u06cc \u0627\u06cc\u067e \u0686\u06cc\u06a9 \u06a9\u06cc \u062d\u0641\u0627\u0638\u062a \u06a9\u06cc \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u06a9\u0631\u062a\u06cc \u06c1\u06d2 (\u0645\u0631\u062d\u0644\u06c1 5 \u0645\u06cc\u06ba \u0645\u0646\u0633\u0644\u06a9 \u06c1\u06d2)\u060c \u0627\u06af\u0644\u06d2 \u067e\u0631 \u062c\u0627\u0626\u06cc\u06ba\u06d4 <strong>\u0627\u06cc\u067e \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4<\/strong> \u067e\u06be\u0631 <strong>apis<\/strong> \u06a9\u0646\u0633\u0648\u0644 \u0633\u06d2\u06d4 \u0622\u067e Firebase AI Logic \u062a\u06a9 \u067e\u06c1\u0646\u0686\u0646\u06d2 \u0648\u0627\u0644\u06cc \u062a\u0635\u062f\u06cc\u0642 \u0634\u062f\u06c1 \u0627\u0648\u0631 \u063a\u06cc\u0631 \u062a\u0635\u062f\u06cc\u0642 \u0634\u062f\u06c1 \u062f\u0631\u062e\u0648\u0627\u0633\u062a\u0648\u06ba \u06a9\u06d2 \u062d\u0642\u06cc\u0642\u06cc \u0648\u0642\u062a \u06a9\u06d2 \u062a\u062c\u0632\u06cc\u0627\u062a \u062f\u06cc\u06a9\u06be \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0627\u06af\u0631 \u0633\u0628 \u06a9\u0686\u06be \u0635\u062d\u06cc\u062d \u0637\u0631\u06cc\u0642\u06d2 \u0633\u06d2 \u062c\u0691\u0627 \u06c1\u0648\u0627 \u06c1\u06d2\u060c \u062a\u0648 \u0622\u067e \u06a9\u0627 \u0679\u0631\u06cc\u0641\u06a9 &#8216;\u062a\u0635\u062f\u06cc\u0642 \u0634\u062f\u06c1&#8217; \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631 \u0638\u0627\u06c1\u0631 \u06c1\u0648\u06af\u0627\u06d4<\/p>\n<h2 id=\"heading-step-5-implement-firebase-ai-logic\">\u0645\u0631\u062d\u0644\u06c1 5 &#8211; Firebase AI \u0645\u0646\u0637\u0642 \u06a9\u0648 \u0646\u0627\u0641\u0630 \u06a9\u0631\u06cc\u06ba\u06d4<\/h2>\n<p>\u0627\u06cc\u067e \u0686\u06cc\u06a9\u0633 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0627\u06cc\u06a9 \u062f\u0631\u062e\u0648\u0627\u0633\u062a\/\u062c\u0648\u0627\u0628 \u0631\u0627\u0624\u0646\u0688 \u0679\u0631\u067e \u0633\u06d2 \u0622\u06af\u06d2 \u0645\u0627\u0688\u0644 \u06a9\u0648 \u0627\u0635\u0644 \u0645\u06cc\u06ba \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u0646\u06d2 \u06a9\u0627 \u0637\u0631\u06cc\u0642\u06c1 \u06cc\u06c1\u0627\u06ba \u06c1\u06d2:<\/p>\n<h3 id=\"heading-basic-setup\">\u067e\u06c1\u0644\u06d2 \u0633\u06d2 \u0637\u06d2 \u0634\u062f\u06c1 \u062a\u0631\u062a\u06cc\u0628\u0627\u062a:<\/h3>\n<pre><code class=\"language-javascript\">\/\/ ai-client.js\nimport { getAI, GoogleAIBackend, getGenerativeModel } from \"firebase\/ai\";\nimport { app } from \".\/app-check-setup.js\";\n\n\/\/ useLimitedUseAppCheckTokens issues short-lived tokens for extra protection\n\/\/ against replay attacks on top of standard App Check verification.\nconst ai = getAI(app, {\n  backend: new GoogleAIBackend(),\n  useLimitedUseAppCheckTokens: true,\n});\n\nexport const model = getGenerativeModel(ai, { model: \"gemini-3.8-flash\" });\n<\/code><\/pre>\n<p><strong>\u0645\u06cc\u0645\u0648:<\/strong> \u062c\u06cc\u0645\u0646\u06cc \u0645\u0627\u0688\u0644 \u06a9\u06d2 \u0646\u0627\u0645 \u0627\u0648\u0631 \u062f\u0633\u062a\u06cc\u0627\u0628\u06cc \u0627\u06a9\u062b\u0631 \u062a\u0628\u062f\u06cc\u0644 \u06c1\u0648\u062a\u06cc \u0631\u06c1\u062a\u06cc \u06c1\u06d2\u06d4 <code>gemini-2.0-flash<\/code> Lite \u0648\u06cc\u0631\u06cc\u0626\u0646\u0679 1 \u062c\u0648\u0646 2026 \u06a9\u0648 \u0631\u06cc\u0679\u0627\u0626\u0631 \u06c1\u0648 \u06af\u06cc\u0627 \u062a\u06be\u0627 \u0627\u0648\u0631 Gemini 2.5 \u0644\u0627\u0626\u0646 \u06a9\u0648 \u0627\u0628 Gemini 3.x \u0633\u06cc\u0631\u06cc\u0632 \u06a9\u06d2 \u062d\u0642 \u0645\u06cc\u06ba \u0641\u0631\u0633\u0648\u062f\u06c1 \u06a9\u0631 \u062f\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0645\u0627\u0688\u0644 \u06a9\u06d2 \u0646\u0627\u0645\u0648\u06ba \u06a9\u0648 \u067e\u0631\u0648\u0688\u06a9\u0634\u0646 \u0645\u06cc\u06ba \u06c1\u0627\u0631\u0688 \u06a9\u0648\u0688\u0646\u06af \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u06c1\u0645\u06cc\u0634\u06c1 \u0645\u0639\u0627\u0648\u0646 \u0645\u0627\u0688\u0644\u0632 \u06a9\u0627 \u0635\u0641\u062d\u06c1 \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4 \u06cc\u0627 \u0627\u0633 \u0633\u06d2 \u0628\u06be\u06cc \u0628\u06c1\u062a\u0631\u060c \u0622\u067e \u0627\u0633\u06d2 Firebase Remote Config \u0633\u06d2 \u0644\u0648\u0688 \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba \u062a\u0627\u06a9\u06c1 \u0622\u067e \u0627\u067e\u0646\u0627 \u0645\u0627\u0688\u0644 \u062a\u0628\u062f\u06cc\u0644 \u06a9\u0631 \u0633\u06a9\u06cc\u06ba \u0628\u063a\u06cc\u0631 \u06a9\u0648\u0626\u06cc \u0646\u0626\u06cc \u062a\u0639\u0645\u06cc\u0631 \u062c\u0627\u0631\u06cc \u06a9\u06cc\u06d2 \u062c\u0627\u0626\u06cc\u06ba\u06d4<\/p>\n<h3 id=\"heading-example-1-a-single-request\">\u0645\u062b\u0627\u0644 1 &#8211; \u0627\u06cc\u06a9 \u062f\u0631\u062e\u0648\u0627\u0633\u062a<\/h3>\n<pre><code class=\"language-javascript\">import { model } from \".\/ai-client.js\";\n\nasync function generateAIText(prompt) {\n  try {\n    const result = await model.generateContent(prompt);\n    const response = result.response;\n    return response.text();\n  } catch (error) {\n    console.error(\"Firebase AI Logic request failed:\", error);\n  }\n}\n\ngenerateAIText(\"Explain the purpose of an API proxy in two sentences.\");\n<\/code><\/pre>\n<h3 id=\"heading-example-2-streaming-into-the-ui\">\u0645\u062b\u0627\u0644 2 &#8211; UI \u0645\u06cc\u06ba \u0633\u0644\u0633\u0644\u06c1 \u0628\u0646\u062f\u06cc<\/h3>\n<p>\u0627\u06af\u0631 \u06cc\u06c1 \u062c\u0645\u0644\u06d2 \u0633\u06d2 \u0632\u06cc\u0627\u062f\u06c1 \u0644\u0645\u0628\u0627 \u06c1\u06d2\u060c \u062a\u0648 \u0633\u0679\u0631\u06cc\u0645\u0646\u06af \u0635\u0627\u0631\u0641 \u06a9\u0648 \u0627\u06cc\u06a9 \u062c\u0648\u0627\u0628 \u062f\u06cc\u062a\u06cc \u06c1\u06d2 \u062c\u0648 \u0686\u0646\u062f \u0633\u06cc\u06a9\u0646\u0688 \u06a9\u06d2 \u0644\u06cc\u06d2 \u062e\u0627\u0645\u0648\u0634\u06cc \u0633\u06d2 \u0627\u0646\u062a\u0638\u0627\u0631 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2 \u0641\u0648\u0631\u0627\u064b \u0638\u0627\u06c1\u0631 \u06c1\u0648\u0646\u0627 \u0634\u0631\u0648\u0639 \u06c1\u0648 \u062c\u0627\u062a\u06cc \u06c1\u06d2\u06d4 \u06cc\u06c1\u0627\u06ba \u0627\u06cc\u06a9 \u062d\u0642\u06cc\u0642\u06cc DOM \u0644\u0646\u06a9 \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u0645\u062b\u0627\u0644 \u06c1\u06d2\u060c \u0646\u06c1 \u0635\u0631\u0641 \u0627\u06cc\u06a9 \u06a9\u0646\u0633\u0648\u0644 \u0644\u0627\u06af:<\/p>\n<pre><code class=\"language-javascript\">import { model } from \".\/ai-client.js\";\n\nasync function streamIntoElement(prompt, targetElement) {\n  targetElement.textContent = \"\";\n\n  const result = await model.generateContentStream(prompt);\n\n  for await (const chunk of result.stream) {\n    targetElement.textContent += chunk.text();\n  }\n\n  \/\/ The aggregated final response is also available once streaming finishes\n  const finalResponse = await result.response;\n  console.log(\"Total tokens used:\", finalResponse.usageMetadata?.totalTokenCount);\n}\n\nconst output = document.querySelector(\"#ai-output\");\nstreamIntoElement(\"Write a 3-sentence product description for a smart water bottle.\", output);\n<\/code><\/pre>\n<h3 id=\"heading-example-3-multi-turn-chat\">\u0645\u062b\u0627\u0644 3 &#8211; \u0645\u0644\u0679\u06cc \u0679\u0631\u0646 \u0686\u06cc\u0679<\/h3>\n<p>\u0686\u06cc\u0679 \u0628\u0648\u0679 \u0637\u0631\u0632 \u06a9\u06cc \u0641\u0639\u0627\u0644\u06cc\u062a \u06a9\u06d2 \u0644\u06cc\u06d2\u060c \u0622\u067e \u06c1\u0631 \u06a9\u0627\u0644 \u067e\u0631 \u067e\u0648\u0631\u06cc \u06af\u0641\u062a\u06af\u0648 \u06a9\u0648 \u062f\u0633\u062a\u06cc \u0637\u0648\u0631 \u067e\u0631 \u0679\u0631\u06cc\u06a9 \u06a9\u0631\u0646\u0627 \u0627\u0648\u0631 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0628\u06be\u06cc\u062c\u0646\u0627 \u0646\u06c1\u06cc\u06ba \u0686\u0627\u06c1\u062a\u06d2\u06d4 <code>startChat()<\/code> \u06c1\u0645 \u0627\u0633\u06d2 \u0622\u067e \u06a9\u06d2 \u0644\u06cc\u06d2 \u0633\u0646\u0628\u06be\u0627\u0644\u062a\u06d2 \u06c1\u06cc\u06ba:<\/p>\n<pre><code class=\"language-javascript\">import { model } from \".\/ai-client.js\";\n\nconst chat = model.startChat({\n  history: [\n    { role: \"user\", parts: [{ text: \"I'm building a task management app.\" }] },\n    { role: \"model\", parts: [{ text: \"Got it, what would you like help with?\" }] },\n  ],\n});\n\nasync function sendChatMessage(message) {\n  const result = await chat.sendMessage(message);\n  return result.response.text();\n}\n\nsendChatMessage(\"Suggest 3 status labels for a Kanban board.\");\n\/\/ A follow-up call automatically has the prior turns as context:\nsendChatMessage(\"Now suggest color codes for each of those.\");\n<\/code><\/pre>\n<h3 id=\"heading-example-4-structured-json-output\">\u0645\u062b\u0627\u0644 4 \u2014 \u0633\u0679\u0631\u06a9\u0686\u0631\u0688 JSON \u0622\u0624\u0679 \u067e\u0679<\/h3>\n<p>\u0627\u06af\u0631 \u0622\u067e \u0645\u0627\u0688\u0644 \u06a9\u06d2 \u0622\u0624\u0679 \u067e\u0679 \u06a9\u0648 \u0627\u067e\u0646\u06cc \u0627\u06cc\u067e \u06a9\u06cc \u0645\u0646\u0637\u0642 (\u06a9\u0627\u0631\u0688 \u0631\u06cc\u0646\u0688\u0631\u0646\u06af\u060c \u0641\u0627\u0631\u0645 \u0641\u0644\u0646\u06af) \u06a9\u06d2 \u0645\u0637\u0627\u0628\u0642 \u0641\u06cc\u0688 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u062a\u0648 \u0645\u0641\u062a \u0679\u06cc\u06a9\u0633\u0679 \u0622\u0624\u0679 \u067e\u0679 \u067e\u0627\u0631\u0633 \u06c1\u0648\u0646\u06d2 \u06a9\u0627 \u062e\u0637\u0631\u06c1 \u06c1\u06d2\u06d4 \u06af\u0632\u0631\u0646\u0627 <code>responseSchema<\/code> \u062f\u0631\u0633\u062a JSON \u062f\u0648\u0628\u0627\u0631\u06c1 \u062f\u0631\u062c \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2:<\/p>\n<pre><code class=\"language-javascript\">import { getGenerativeModel, Schema } from \"firebase\/ai\";\nimport { ai } from \".\/ai-client.js\"; \/\/ assuming `ai` is also exported from ai-client.js\n\nconst taskSchema = Schema.object({\n  properties: {\n    title: Schema.string(),\n    priority: Schema.enumString({ enum: [\"low\", \"medium\", \"high\"] }),\n    tags: Schema.array({ items: Schema.string() }),\n  },\n});\n\nconst structuredModel = getGenerativeModel(ai, {\n  model: \"gemini-3.8-flash\",\n  generationConfig: {\n    responseMimeType: \"application\/json\",\n    responseSchema: taskSchema,\n  },\n});\n\nasync function extractTaskFromText(text) {\n  const result = await structuredModel.generateContent(\n    `Extract a task from this note: \"${text}\"`\n  );\n  return JSON.parse(result.response.text());\n}\n\nextractTaskFromText(\"Need to review the PR from Sarah by Friday, this is urgent\");\n\/\/ \u2192 { title: \"Review PR from Sarah\", priority: \"high\", tags: [\"review\"] }\n<\/code><\/pre>\n<h3 id=\"heading-example-5-handling-rate-limits-and-transient-errors\">\u0645\u062b\u0627\u0644 5 \u2014 \u0634\u0631\u062d \u06a9\u0648 \u0645\u062d\u062f\u0648\u062f \u06a9\u0631\u0646\u0627 \u0627\u0648\u0631 \u0639\u0627\u0631\u0636\u06cc \u063a\u0644\u0637\u06cc \u0633\u06d2 \u0646\u0645\u0679\u0646\u06d2<\/h3>\n<p>\u062c\u06cc\u0645\u0646\u06cc \u06a9\u0627\u0644\u0632 \u0634\u0631\u062d \u06a9\u06cc \u062d\u062f \u06cc\u0627 \u0639\u0627\u0631\u0636\u06cc \u063a\u0644\u0637\u06cc\u0648\u06ba \u062a\u06a9 \u067e\u06c1\u0646\u0686 \u0633\u06a9\u062a\u06cc \u06c1\u06cc\u06ba\u060c \u062e\u0627\u0635 \u0637\u0648\u0631 \u067e\u0631 \u0628\u0648\u062c\u06be \u06a9\u06d2 \u0646\u06cc\u0686\u06d2\u06d4 \u0622\u0633\u0627\u0646 \u0627\u06cc\u06a9\u0633\u067e\u0648\u0646\u06cc\u0646\u0634\u0644 \u0628\u06cc\u06a9 \u0622\u0641 API \u06a9\u0648 \u062a\u0648\u0691\u06d2 \u0628\u063a\u06cc\u0631 \u0622\u067e \u06a9\u06cc \u0627\u06cc\u067e \u06a9\u0648 \u0644\u0686\u06a9\u062f\u0627\u0631 \u0631\u06a9\u06be\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-javascript\">import { model } from \".\/ai-client.js\";\n\nasync function generateWithRetry(prompt, maxRetries = 3) {\n  for (let attempt = 0; attempt <= maxRetries; attempt++) {\n    try {\n      const result = await model.generateContent(prompt);\n      return result.response.text();\n    } catch (error) {\n      const isRetryable = error.message?.includes(\"429\") || error.message?.includes(\"503\");\n      if (!isRetryable || attempt === maxRetries) throw error;\n\n      const delayMs = 2 ** attempt * 1000; \/\/ 1s, 2s, 4s...\n      await new Promise((resolve) => setTimeout(resolve, delayMs));\n    }\n  }\n}\n<\/code><\/pre>\n<h2 id=\"heading-debugging-common-issues\">\u0639\u0627\u0645 \u0645\u0633\u0627\u0626\u0644 \u06a9\u0648 \u0688\u06cc\u0628\u06af \u06a9\u0631\u0646\u0627<\/h2>\n<h3 id=\"heading-issue-1-api-key-not-valid-please-pass-a-valid-api-key\">\u0645\u0633\u0626\u0644\u06c1 1: <code>API key not valid. Please pass a valid API key.<\/code><\/h3>\n<p>\u0627\u0633 \u06a9\u0627 \u0639\u0627\u0645 \u0645\u0637\u0644\u0628 \u06c1\u06d2: <code>apiKey<\/code> \u0622\u067e \u06a9\u06cc Firebase \u06a9\u0646\u0641\u06cc\u06af\u0631\u06cc\u0634\u0646 \u0645\u06cc\u06ba \u06a9\u0648\u0626\u06cc \u0686\u06cc\u0632 \u0622\u067e \u06a9\u06d2 \u067e\u0631\u0648\u062c\u06cc\u06a9\u0679 \u0633\u06d2 \u0645\u0645\u0627\u062b\u0644 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u060c \u06cc\u0627 \u0645\u0637\u0644\u0648\u0628\u06c1 API \u0641\u0639\u0627\u0644 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 \u0627\u0642\u062f\u0627\u0631 \u06a9\u0648 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4 <strong>\u067e\u0631\u0648\u062c\u06cc\u06a9\u0679 \u06a9\u06cc \u062a\u0631\u062a\u06cc\u0628\u0627\u062a \u2192 \u0639\u0645\u0648\u0645\u06cc<\/strong> \u06a9\u0646\u0633\u0648\u0644 \u0633\u06d2\u06d4<\/p>\n<h3 id=\"heading-issue-2-403-or-requests-silently-blocked-even-though-your-code-looks-correct\">\u0645\u0633\u0626\u0644\u06c1 2: <code>403<\/code> \u06cc\u0627\u060c \u06cc\u06c1\u0627\u06ba \u062a\u06a9 \u06a9\u06c1 \u0627\u06af\u0631 \u0622\u067e \u06a9\u0627 \u06a9\u0648\u0688 \u062f\u0631\u0633\u062a \u0646\u0638\u0631 \u0622\u062a\u0627 \u06c1\u06d2\u060c \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u062e\u0648\u062f \u0628\u062e\u0648\u062f \u0628\u0644\u0627\u06a9 \u06c1\u0648\u062c\u0627\u062a\u06cc \u06c1\u06d2\u06d4<\/h3>\n<p>\u06cc\u06c1 \u062a\u0642\u0631\u06cc\u0628\u0627\u064b \u06c1\u0645\u06cc\u0634\u06c1 \u0627\u06cc\u06a9 \u0627\u06cc\u067e \u0686\u06cc\u06a9 \u0631\u062c\u0633\u0679\u0631\u06cc\u0634\u0646 \u0645\u06cc\u06ba \u0645\u0645\u0627\u062b\u0644\u062a \u0646\u06c1\u06cc\u06ba \u0631\u06a9\u06be\u062a\u0627\u06d4 \u0627\u0633 \u0628\u0627\u062a \u06a9\u0648 \u06cc\u0642\u06cc\u0646\u06cc \u0628\u0646\u0627\u0626\u06cc\u06ba \u06a9\u06c1 \u0622\u067e \u062c\u0633 \u0688\u0648\u0645\u06cc\u0646 \u06a9\u06cc \u062c\u0627\u0646\u0686 \u06a9\u0631 \u0631\u06c1\u06d2 \u06c1\u06cc\u06ba \u0648\u06c1 \u0627\u0633 \u0688\u0648\u0645\u06cc\u0646 \u0633\u06d2 \u0645\u06cc\u0644 \u06a9\u06be\u0627\u062a\u0627 \u06c1\u06d2 \u062c\u0633\u06d2 \u0622\u067e \u0646\u06d2 \u0627\u067e\u0646\u06cc reCAPTCHA \u0627\u0646\u0679\u0631\u067e\u0631\u0627\u0626\u0632 \u0633\u0627\u0626\u0679 \u06a9\u0644\u06cc\u062f \u06a9\u06d2 \u0644\u06cc\u06d2 \u0631\u062c\u0633\u0679\u0631 \u06a9\u06cc\u0627 \u06c1\u06d2\u060c \u0627\u0648\u0631 \u0648\u06c1 \u0627\u06cc\u067e \u0686\u06cc\u06a9 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u06a9\u0648 &#8216;Not Verified&#8217; (&#8216;Not Enforced&#8217; \u06cc\u0627 Missing Outright) \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631 \u062f\u06a9\u06be\u0627\u062a\u0627 \u06c1\u06d2\u06d4 <strong>\u0627\u06cc\u067e \u0686\u06cc\u06a9<\/strong> \u067e\u06be\u0631 <strong>apis<\/strong>.<\/p>\n<h3 id=\"heading-issue-3-app-check-works-in-production-but-fails-on-localhost\">\u0645\u0633\u0626\u0644\u06c1 3: \u0627\u06cc\u067e \u0686\u06cc\u06a9 \u067e\u0631\u0648\u0688\u06a9\u0634\u0646 \u0645\u06cc\u06ba \u06a9\u0627\u0645 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u0644\u06cc\u06a9\u0646 \u067e\u0631\u0648\u0688\u06a9\u0634\u0646 \u0645\u06cc\u06ba \u0646\u0627\u06a9\u0627\u0645 \u06c1\u0648\u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4 <code>localhost<\/code><\/h3>\n<p>\u062c\u06cc\u0633\u0627 \u06a9\u06c1 \u062a\u0648\u0642\u0639 \u06a9\u06cc \u06af\u0626\u06cc \u06c1\u06d2\u060c reCAPTCHA Enterprise \u0642\u0627\u0628\u0644 \u0627\u0639\u062a\u0645\u0627\u062f \u0637\u0631\u06cc\u0642\u06d2 \u0633\u06d2 \u0646\u06c1\u06cc\u06ba \u0686\u0644\u062a\u0627 \u06c1\u06d2: <code>localhost<\/code>. \u06cc\u0642\u06cc\u0646\u06cc \u0628\u0646\u0627\u0626\u06cc\u06ba \u06a9\u06c1 \u0645\u0631\u062d\u0644\u06c1 4 \u0633\u06d2 \u0688\u06cc\u0628\u06af \u0679\u0648\u06a9\u0646 \u0628\u0644\u0627\u06a9 \u0622\u067e \u06a9\u06d2 \u062a\u0631\u0642\u06cc\u0627\u062a\u06cc \u0645\u0627\u062d\u0648\u0644 \u0645\u06cc\u06ba \u0641\u0639\u0627\u0644 \u06c1\u06d2 \u0627\u0648\u0631 \u06cc\u06c1 \u06a9\u06c1 \u0622\u067e \u0646\u06d2 \u067e\u0631\u0646\u0679 \u0634\u062f\u06c1 \u0688\u06cc\u0628\u06af \u0679\u0648\u06a9\u0646 \u0634\u0627\u0645\u0644 \u06a9\u06cc\u0627 \u06c1\u06d2\u06d4 <strong>\u0627\u06cc\u067e \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4<\/strong> \u067e\u06be\u0631 <strong>\u0688\u06cc\u0628\u06af \u0679\u0648\u06a9\u0646 \u0645\u06cc\u0646\u062c\u0645\u0646\u0679<\/strong> \u06a9\u0646\u0633\u0648\u0644 \u0633\u06d2\u06d4 \u0627\u06af\u0631 \u0622\u067e \u0627\u067e\u0646\u06d2 \u06a9\u0645\u067e\u06cc\u0648\u0679\u0631 \u06a9\u0648 \u06af\u06be\u0645\u0627\u062a\u06d2 \u06c1\u06cc\u06ba \u06cc\u0627 \u0627\u067e\u0646\u0627 \u0628\u0631\u0627\u0624\u0632\u0631 \u0627\u0633\u0679\u0648\u0631\u06cc\u062c \u0635\u0627\u0641 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u062a\u0648 \u0627\u06cc\u06a9 \u0646\u06cc\u0627 \u0679\u0648\u06a9\u0646 \u067e\u0631\u0646\u0679 \u06a9\u06cc\u0627 \u062c\u0627\u0626\u06d2 \u06af\u0627 \u0627\u0648\u0631 \u0622\u067e \u06a9\u0648 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0631\u062c\u0633\u0679\u0631 \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u0648\u06af\u06cc\u06d4<\/p>\n<h3 id=\"heading-issue-4-model-errors-or-unexpected-shutdowns\">\u0645\u0633\u0626\u0644\u06c1 4: \u0645\u0627\u0688\u0644 \u06a9\u06cc \u062e\u0631\u0627\u0628\u06cc \u06cc\u0627 \u063a\u06cc\u0631 \u0645\u062a\u0648\u0642\u0639 \u0627\u062e\u0631\u0627\u062c<\/h3>\n<p>\u06af\u0648\u06af\u0644 \u0628\u0627\u0642\u0627\u0639\u062f\u06af\u06cc \u0633\u06d2 \u067e\u0631\u0627\u0646\u06d2 \u062c\u06cc\u0645\u0646\u06cc \u0645\u0627\u0688\u0644\u0632 \u06a9\u0648 \u06a9\u0626\u06cc \u0645\u06c1\u06cc\u0646\u0648\u06ba \u06a9\u06cc \u067e\u06cc\u0634\u06af\u06cc \u0627\u0637\u0644\u0627\u0639 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0631\u06cc\u0679\u0627\u0626\u0631 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 <code>gemini-2.0-flash<\/code> \u0645\u062b\u0627\u0644 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631\u060c \u0644\u0627\u0626\u0679 \u0648\u06cc\u0631\u06cc\u0626\u0646\u0679 1 \u062c\u0648\u0646 2026 \u06a9\u0648 \u062e\u062a\u0645 \u06c1\u0648\u0627\u06d4 \u0627\u06af\u0631 \u06a9\u0648\u0626\u06cc \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u062c\u0648 \u06a9\u0627\u0645 \u06a9\u0631 \u0631\u06c1\u06cc \u062a\u06be\u06cc \u0627\u0686\u0627\u0646\u06a9 404 \u0644\u0648\u0679\u0627\u062a\u0627 \u06c1\u06d2\u060c \u062a\u0648 \u06cc\u06c1 \u0645\u0627\u0646\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u06a9\u06c1 \u06cc\u06c1 \u0622\u067e \u06a9\u06d2 \u06a9\u0648\u0688 \u0645\u06cc\u06ba \u0627\u06cc\u06a9 \u0628\u06af \u06c1\u06d2\u060c \u0641\u0631\u0633\u0648\u062f\u06af\u06cc \u06a9\u06d2 \u0646\u0648\u0679\u0633\u0632 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0645\u0627\u0688\u0644 \u06a9\u0627 \u0635\u0641\u062d\u06c1 \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<h3 id=\"heading-issue-5-streaming-stops-partway-with-no-error\">\u0645\u0633\u0626\u0644\u06c1 5: \u0633\u0679\u0631\u06cc\u0645\u0646\u06af \u0628\u063a\u06cc\u0631 \u06a9\u0633\u06cc \u063a\u0644\u0637\u06cc \u06a9\u06d2 \u062f\u0631\u0645\u06cc\u0627\u0646 \u0645\u06cc\u06ba \u0631\u06a9 \u062c\u0627\u062a\u06cc \u06c1\u06d2\u06d4<\/h3>\n<p>\u06cc\u06c1 \u0639\u0627\u0645 \u0637\u0648\u0631 \u067e\u0631 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4 <code>usageMetadata<\/code>\u06cc\u06c1 \u0627\u06cc\u06a9 \/token-limit \u0645\u0633\u0626\u0644\u06c1 \u06c1\u06d2\u060c \u0646\u06cc\u0679 \u0648\u0631\u06a9 \u06a9\u06cc \u0646\u0627\u06a9\u0627\u0645\u06cc \u0646\u06c1\u06cc\u06ba\u06d4 \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba <code>finalResponse.candidates[0].finishReason<\/code> (\u0635\u0631\u0641 \u0627\u06cc\u06a9 \u0628\u0627\u0631 \u0645\u0645\u06a9\u0646 \u06c1\u06d2\u06d4 <code>result.response<\/code> \u062d\u0644 \u0634\u062f\u06c1)\u060c \u062f\u0631\u062c \u0630\u06cc\u0644 \u0627\u0642\u062f\u0627\u0631 \u06a9\u06d2 \u0633\u0627\u062a\u06be: <code>MAX_TOKENS<\/code> \u0627\u0633 \u06a9\u0627 \u0645\u0637\u0644\u0628 \u06cc\u06c1 \u0646\u06c1\u06cc\u06ba \u06a9\u06c1 \u06a9\u0686\u06be \u06a9\u0631\u06cc\u0634 \u06c1\u0648 \u06af\u06cc\u0627\u060c \u0627\u0633 \u06a9\u0627 \u0645\u0637\u0644\u0628 \u0635\u0631\u0641 \u06cc\u06c1 \u06c1\u06d2 \u06a9\u06c1 \u0631\u062f\u0639\u0645\u0644 \u0679\u0648\u0679 \u06af\u06cc\u0627 \u062a\u06be\u0627\u06d4<\/p>\n<h3 id=\"heading-conclusion\">\u0646\u062a\u06cc\u062c\u06c1<\/h3>\n<p>\u062a\u062e\u0644\u06cc\u0642\u06cc AI \u0635\u0644\u0627\u062d\u06cc\u062a\u0648\u06ba \u06a9\u0648 \u0628\u0646\u0627\u0646\u06d2 \u06a9\u0627 \u0645\u0637\u0644\u0628 \u06c1\u06d2 \u067e\u0631\u0648\u0679\u0648\u0679\u0627\u0626\u067e \u0645\u0631\u062d\u0644\u06d2 \u0633\u06d2 \u067e\u06cc\u062f\u0627\u0648\u0627\u0631\u06cc \u0633\u0637\u062d \u06a9\u06cc \u0633\u06cc\u06a9\u06cc\u0648\u0631\u0679\u06cc \u06a9\u0648 \u0627\u067e\u0646\u0627\u0646\u0627\u060c \u0628\u062c\u0627\u0626\u06d2 \u0627\u0633 \u06a9\u06d2 \u06a9\u06c1 \u0627\u0633\u06d2 \u0628\u0639\u062f \u0645\u06cc\u06ba \u0634\u0627\u0645\u0644 \u06a9\u06cc\u0627 \u062c\u0627\u0626\u06d2\u06d4 Firebase AI Logic \u06a9\u0627 \u067e\u0631\u0627\u06a9\u0633\u06cc \u0641\u0646 \u062a\u0639\u0645\u06cc\u0631 \u062c\u06cc\u0645\u0646\u06cc API \u06a9\u06cc\u0632 \u06a9\u0648 \u06a9\u0644\u0627\u0626\u0646\u0679 \u06a9\u0648\u0688 \u0633\u06d2 \u0645\u06a9\u0645\u0644 \u0637\u0648\u0631 \u067e\u0631 \u0645\u062d\u0641\u0648\u0638 \u0631\u06a9\u06be\u062a\u0627 \u06c1\u06d2\u060c \u0627\u0648\u0631 Firebase App Check \u0627\u0633 \u0628\u0627\u062a \u06a9\u0648 \u06cc\u0642\u06cc\u0646\u06cc \u0628\u0646\u0627\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 \u0622\u067e \u06a9\u06cc \u0627\u06cc\u067e \u06a9\u06cc \u0635\u0631\u0641 \u062d\u0642\u06cc\u0642\u06cc \u0645\u062b\u0627\u0644\u06cc\u06ba \u06c1\u06cc \u06a9\u0648\u0679\u06c1 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631 \u0633\u06a9\u062a\u06cc \u06c1\u06cc\u06ba\u060c \u0686\u0627\u06c1\u06d2 \u06a9\u0644\u06cc\u062f \u0686\u06be\u067e\u06cc \u06c1\u0648\u06d4 \u06c1\u0645 \u0646\u0627\u06a9\u0627\u0645\u06cc \u06a9\u06d2 \u062f\u0648 \u0627\u06c1\u0645 \u062a\u0631\u06cc\u0646 \u0637\u0631\u06cc\u0642\u0648\u06ba \u06a9\u0627 \u0627\u06cc\u06a9 \u0633\u0627\u062a\u06be \u0627\u062d\u0627\u0637\u06c1 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba: \u06a9\u0644\u06cc\u062f\u06cc \u0686\u0648\u0631\u06cc \u0627\u0648\u0631 \u0627\u0633\u06a9\u0631\u067e\u0679 \u06a9\u0627 \u063a\u0644\u0637 \u0627\u0633\u062a\u0639\u0645\u0627\u0644\u06d4<\/p>\n<p>\u06cc\u06c1\u0627\u06ba \u06a9\u0686\u06be \u0686\u06cc\u0632\u06cc\u06ba \u06c1\u06cc\u06ba \u062c\u0648 \u0622\u06af\u06d2 \u062f\u06cc\u06a9\u06be\u0646\u06d2 \u06a9\u06d2 \u0642\u0627\u0628\u0644 \u06c1\u06cc\u06ba:<\/p>\n<ul>\n<li>\n<p><strong>\u06a9\u0627\u0644\u0646\u06af \u0641\u0646\u06a9\u0634\u0646\u0632 \/ \u0679\u0648\u0644\u0632 \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644<\/strong>\u062c\u06cc\u0645\u0646\u06cc \u06a9\u0648 \u0627\u0633 \u06a9\u06d2 \u062c\u0648\u0627\u0628 \u06a9\u06d2 \u062d\u0635\u06d2 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631 \u0627\u0633 \u06a9\u06d2 \u0627\u067e\u0646\u06d2 \u0627\u06cc\u067e \u0641\u0646\u06a9\u0634\u0646\u0632 \u06a9\u0648 \u06a9\u0627\u0644 \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u0627\u062c\u0627\u0632\u062a \u062f\u06cc\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p><strong>\u0633\u0631\u0648\u0631 \u0633\u0627\u0626\u06cc\u0688 \u067e\u0631\u0627\u0645\u067e\u0679 \u0679\u06cc\u0645\u067e\u0644\u06cc\u0679<\/strong>\u0627\u06af\u0631 \u0622\u067e \u0627\u067e\u0646\u06d2 \u06a9\u0644\u0627\u0626\u0646\u0679 \u06a9\u0648\u0688 \u0645\u06cc\u06ba \u067e\u0631\u0627\u0645\u067e\u0679 \u06a9\u0648 \u0628\u0631\u0642\u0631\u0627\u0631 \u0631\u06a9\u06be\u0646\u0627 \u0686\u0627\u06c1\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u0646\u06c1 \u06a9\u06c1 \u0635\u0631\u0641 API \u06a9\u0644\u06cc\u062f<\/p>\n<\/li>\n<li>\n<p><strong>\u06c1\u0627\u0626\u0628\u0631\u0688 \u062a\u062e\u0645\u06cc\u0646\u06c1<\/strong>\u062c\u06c1\u0627\u06ba \u0645\u0645\u06a9\u0646 \u06c1\u0648\u060c \u0645\u0639\u0627\u0648\u0646 \u0628\u0631\u0627\u0624\u0632\u0631\u0632 \u0645\u06cc\u06ba \u0622\u0646 \u0688\u06cc\u0648\u0627\u0626\u0633 \u0645\u0627\u0688\u0644 \u067e\u0631 \u0648\u0627\u067e\u0633 \u062c\u0627\u0626\u06cc\u06ba \u062a\u0627\u06a9\u06c1 \u0644\u0627\u06af\u062a \u0627\u0648\u0631 \u0633\u0627\u062f\u06c1 \u062f\u0631\u062e\u0648\u0627\u0633\u062a\u0648\u06ba \u06a9\u06d2 \u0644\u06cc\u06d2 \u062a\u0627\u062e\u06cc\u0631 \u06a9\u0648 \u06a9\u0645 \u06a9\u06cc\u0627 \u062c\u0627 \u0633\u06a9\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p><strong>\u0645\u0627\u0688\u0644 \u06a9\u06d2 \u0646\u0627\u0645 \u06a9\u06d2 \u0644\u06cc\u06d2 Firebase \u0631\u06cc\u0645\u0648\u0679 \u06a9\u0646\u0641\u06cc\u06af<\/strong>\u0622\u067e \u0627\u06cc\u067e \u06a9\u0627 \u0646\u06cc\u0627 \u0648\u0631\u0698\u0646 \u062c\u0627\u0631\u06cc \u06a9\u06cc\u06d2 \u0628\u063a\u06cc\u0631 \u0627\u067e\u0646\u06d2 \u0635\u0627\u0631\u0641\u06cc\u0646 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0646\u0626\u06d2 \u062c\u06cc\u0645\u0646\u06cc \u0645\u0627\u0688\u0644 \u062c\u0627\u0631\u06cc \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<\/ul><\/div>\n","protected":false},"excerpt":{"rendered":"<p>\u062c\u0646\u0631\u06cc\u0679\u0648 AI \u06a9\u0627 \u062f\u06be\u0645\u0627\u06a9\u06c1 \u06c1\u0632\u0627\u0631\u0648\u06ba \u0648\u06cc\u0628 \u0688\u0648\u06cc\u0644\u067e\u0631\u0632 \u06a9\u0648 \u0627\u067e\u0646\u06cc \u0627\u06cc\u067e\u0633 \u0645\u06cc\u06ba \u0630\u06c1\u06cc\u0646 \u062e\u0635\u0648\u0635\u06cc\u0627\u062a \u0634\u0627\u0645\u0644 \u06a9\u0631\u0646\u06d2 \u067e\u0631 \u0645\u062c\u0628\u0648\u0631 \u06a9\u0631 \u0631\u06c1\u0627 \u06c1\u06d2\u06d4 \u067e\u06c1\u0644\u06cc \u062c\u0628\u0644\u062a \u0639\u0627\u0645 \u0637\u0648\u0631 \u067e\u0631 \u062c\u06cc\u0645\u0646\u06cc API \u06a9\u06d2 SDK \u06a9\u0648 \u0628\u0631\u0627\u06c1 \u0631\u0627\u0633\u062a \u0628\u0631\u0627\u0624\u0632\u0631 \u0633\u06d2 \u06a9\u0627\u0644 \u06a9\u0631\u0646\u0627 \u06c1\u06d2\u06d4 \u06cc\u06c1 \u062c\u0628\u0644\u062a \u0622\u067e \u06a9\u06cc API \u06a9\u06cc\u0632 \u06a9\u0648 \u062f\u0646\u06cc\u0627 \u06a9\u06d2 \u0633\u0627\u0645\u0646\u06d2 \u0638\u0627\u06c1\u0631 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0633\u0646\u06af\u06cc\u0646 \u0633\u06cc\u06a9\u06cc\u0648\u0631\u0679\u06cc \u0631\u0633\u06a9 \u06a9\u06d2 \u0633\u0627\u062a\u06be [&hellip;]<\/p>\n","protected":false},"author":7,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[1],"tags":[],"class_list":["post-29687","post","type-post","status-publish","format-standard","hentry","category-blog"],"_links":{"self":[{"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/posts\/29687","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/users\/7"}],"replies":[{"embeddable":true,"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/comments?post=29687"}],"version-history":[{"count":0,"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/posts\/29687\/revisions"}],"wp:attachment":[{"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/media?parent=29687"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/categories?post=29687"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/tags?post=29687"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}