מפתח API הוא מחרוזת ייחודית שמשמשת לניתוב בקשות לפרויקט Firebase שלכם כשאתם מבצעים אינטראקציה עם Firebase ועם שירותי Google. בדף הזה מופיע מידע בסיסי על מפתחות API, וגם שיטות מומלצות לשימוש ולניהול של מפתחות API באפליקציות Firebase.
מידע כללי על מפתחות API ו-Firebase
מפתחות API ל-Firebase שונים ממפתחות API רגילים
בניגוד לאופן שבו משתמשים בדרך כלל במפתחות API, מפתחות API לשירותי Firebase לא משמשים לבקרת הגישה למשאבי הקצה. אפשר לעשות זאת רק באמצעות Firebase Security Rules (כדי לקבוע אילו משתמשי קצה יכולים לגשת למשאבים) ו-Firebase App Check (כדי לקבוע אילו אפליקציות יכולות לגשת למשאבים).
בדרך כלל צריך לשמור בקפידה על מפתחות API (לדוגמה, באמצעות שירות של מאגר או הגדרת המפתחות כמשתני סביבה). עם זאת, מותר לכלול מפתחות API לשירותי Firebase בקוד או בקובצי תצורה שהוגשו לבדיקה.
Firebase Apple Apps – מאתרים את מפתח ה-API שהותאם באופן אוטומטי בקובץ התצורה של Firebase, GoogleService-Info.plist, בשדה API_KEY.
אפליקציות ל-Android ב-Firebase – מאתרים את מפתח ה-API שהותאם באופן אוטומטי בקובץ התצורה של Firebase, google-services.json, בשדה current_key.
אפליקציות אינטרנט של Firebase – מאתרים את מפתח ה-API שהותאם באופן אוטומטי באובייקט התצורה של Firebase, בשדה apiKey.
שימוש במפתח API
מפתחות API משמשים לזיהוי הפרויקט ב-Firebase במהלך האינטראקציה עם שירותי Firebase או Google. באופן ספציפי, הם משמשים לשיוך בקשות API עם הפרויקט שלכם, לצורכי מכסה וחיוב. הם גם שימושיים לגישה לנתונים ציבוריים.
לדוגמה, אפשר להשתמש במפתח API באופן מפורש על ידי העברת הערך שלו לקריאה ל-API ל-REST כפרמטר של שאילתה. בדוגמה הזו מוסבר איך שולחים בקשה ל-Dynamic Links API לקיצורי קישורים:
POST https://firebasedynamiclinks.googleapis.com/v1/shortLinks?key=API_KEY
כשהאפליקציה שולחת קריאה ל-Firebase API שדורש מפתח API שמסופק על ידי לקוח האינטרנט או הנייד, האפליקציה מחפשת באופן אוטומטי את מפתח ה-API של הפרויקט בקובץ התצורה או באובייקט התצורה של Firebase. עם זאת, אפשר לספק מפתחות API לאפליקציה באמצעות מנגנון אחר, כולל משתני סביבה.
לבדוק את ההגבלות המתאימות ולהחיל אותן על מפתחות ה-API (מומלץ)
אין צורך להתייחס למפתח API לשירותי Firebase כסוד, אבל כדאי לבדוק את ההגבלות והמגבלות ולהחיל אותן כפי שמתואר בקטע הזה.
בדיקת ממשקי ה-API שנוספו באופן אוטומטי לרשימת ההיתרים של מפתחות ה-API של Firebase
כשמערכת Firebase יוצרת מפתח API בפרויקט, אנחנו מוסיפים למפתח הזה באופן אוטומטי את ההגבלות על API. ממשקי ה-API שנוספו לרשימת ההיתרים הזו הם ממשקי API שקשורים ל-Firebase, שדורשים מהלקוח לספק מפתח API יחד עם הקריאה. חשוב לזכור שרוב ממשקי ה-API הנדרשים לשימוש בשירותי Firebase לא צריכים להופיע ברשימת ההיתרים של מפתחות ה-API.
מאחר ש-Firebase מוסיף את ממשקי ה-API הנדרשים לכל שירותי Firebase, רשימת ההיתרים של מפתח API עשויה לכלול ממשקי API של מוצרים שאתם לא משתמשים בהם.
אפשר להסיר ממשקי API מרשימת ההיתרים, אבל חשוב מאוד לא להסיר את ממשקי ה-API הנדרשים ל-Firebase ולשירותי Firebase שבהם אתם משתמשים (ראו רשימת ממשקי ה-API שקשורים ל-Firebase שצריכים להופיע ברשימת ההיתרים לכל שירות או מוצר). אחרת, תקבלו שגיאות כשתבצעו קריאות לשירותי Firebase.
צמצום המכסה אם משתמשים ב-Authentication שמבוסס על סיסמה
אם אתם משתמשים ב-Firebase Authentication שמבוסס על סיסמה ומישהו מקבל גישה למפתח ה-API, הוא לא יוכל לגשת למסדי הנתונים או לנתוני Cloud Storage של פרויקט Firebase כל עוד הנתונים האלה מוגנים על ידי Firebase Security Rules. עם זאת, הם יכולים להשתמש במפתח ה-API כדי לגשת לנקודות הקצה של אימות ב-Firebase ולשלוח בקשות אימות לגבי הפרויקט שלכם.
כדי למזער את האפשרות שמישהו ישתמש לרעה במפתח API כדי לנסות לבצע התקפת כוח גס, אפשר להדק את מכסת ברירת המחדל של נקודות הקצה identitytoolkit.googleapis.com כך שתשקף את תחזיות התנועה הרגילות של האפליקציה. חשוב לזכור שאם תגבילו את המכסה הזו והאפליקציה תקבל פתאום משתמשים, יכול להיות שתקבלו שגיאות כניסה עד שתגדילו את המכסה.
אפשר לשנות את המכסות של ה-API בפרויקט במסוף Google Cloud.
שימוש במפתחות API נפרדים ומוגבלים לכל שירות שאינו Firebase
בדרך כלל, אין צורך להתייחס למפתחות API המשמשים לשירותי Firebase כסודיים, אבל כדאי לנקוט אמצעי זהירות נוספים לגבי מפתחות API שבהם אתם משתמשים בממשקי API אחרים של Google Cloud.
אם אתם משתמשים ב-Google Cloud API (בכל פלטפורמה) שלא מיועד לשירות או למוצר של Firebase, מומלץ מאוד ליצור מפתחות API נפרדים ומותרים לשימוש עם ממשקי ה-API האלה. הדבר חשוב במיוחד אם ה-API מיועד לשירות Google Cloud שניתן לחיוב.
לדוגמה, אם אתם משתמשים ב-Firebase ML וב-Cloud Vision APIs ב-iOS, עליכם ליצור מפתחות API נפרדים שמיועדים רק לגישה ל-Cloud Vision APIs.
שימוש במפתחות API נפרדים ומקובצים עם הגבלות לממשקי API שאינם של Firebase מאפשר לכם לבצע רוטציה של המפתחות או להחליף אותם לפי הצורך, וגם להוסיף הגבלות נוספות למפתחות ה-API בלי להפריע לשימוש בשירותי Firebase.
הוראות ליצירת מפתחות ספציפיים ל-API
ההוראות האלה מתארות איך ליצור מפתח API נפרד ומוגבל לממשק API מזויף שנקרא Super Service API.
שלב 1: מגדירים את מפתחות ה-API הקיימים כך שלא יאפשרו גישה אל Super Service API
פותחים את הדף Credentials במסוף Google Cloud. כשמופיעה בקשה לעשות זאת, בוחרים את הפרויקט הרצוי.
פותחים את תצוגת העריכה של כל מפתח API קיים ברשימה.
בקטע API restrictions, בוחרים באפשרות Restrict key ומוסיפים לרשימה את כל ממשקי ה-API שרוצים לתת למפתח ה-API גישה אליהם. חשוב לא לכלול את ה-API שעבורו אתם יוצרים מפתח API נפרד (בדוגמה הזו, Super Service API).
כשמגדירים הגבלות על ממשקי API של מפתח API, מצהירים באופן מפורש על ממשקי ה-API שיש למפתח גישה אליהם. כברירת מחדל, כשבקטע API restrictions מסומנת האפשרות Don't restrict key, אפשר להשתמש במפתח API כדי לגשת לכל ממשק API שמופעל בפרויקט.
מעכשיו, מפתחות ה-API הקיימים לא יעניקו גישה ל-Super Service API, אבל כל מפתח ימשיך לפעול עם כל ממשקי ה-API שהוספתם לרשימה של ההגבלות על ממשקי ה-API שלו.
שלב 2: יוצרים מפתח API חדש ומשתמשים בו כדי לגשת ל-Super Service API
חוזרים לדף Credentials. מוודאים שפרויקט Firebase עדיין נבחר.
לוחצים על Create credentials (יצירת פרטי כניסה) > API key (מפתח API). מציינים את מפתח ה-API החדש ולוחצים על Restrict key.
בקטע API restrictions, בוחרים באפשרות Restrict key ומוסיפים לרשימה רק את Super Service API.
מפתח ה-API החדש הזה מעניק גישה רק ל-Super Service API.
מגדירים את האפליקציה והשירותים כך שישתמשו במפתח ה-API החדש.
שימוש במפתחות API ספציפיים לסביבה (מומלץ)
אם מגדירים פרויקטים שונים ב-Firebase לסביבות שונות, כמו סביבות Staging וייצור, חשוב שכל מופע של האפליקציה יתקשר עם פרויקט Firebase התואם שלו. לדוגמה, מכונה של אפליקציה בסביבת ייצור אף פעם לא צריכה לתקשר עם פרויקט Firebase בסביבת הייצור. המשמעות היא גם שאפליקציית ה-staging צריכה להשתמש במפתחות API שמשויכים לפרויקט Firebase של ה-staging.
כדי לצמצם בעיות בהעלאת שינויים בקוד משלב הפיתוח לשלב ההרצה בסביבה לצורך בדיקה ולשלב הייצור, במקום לכלול מפתחות API בקוד עצמו, אפשר להגדיר אותם כמשתני סביבה או לכלול אותם בקובץ תצורה.
חשוב לזכור שאם אתם משתמשים ב-Firebase Local Emulator Suite לפיתוח יחד עם Firebase ML, עליכם ליצור מפתח API לצורך ניפוי באגים בלבד ולהשתמש בו. ההוראות ליצירת מפתח כזה מפורטות במסמכי התיעוד של Firebase ML.
שאלות נפוצות ופתרון בעיות
שאלות נפוצות
האם מפתחות API לשירותי Firebase מוגבלים כברירת מחדל?
כן, כברירת מחדל, הגבלות API חלות באופן אוטומטי על כל מפתחות ה-API שמערכת Firebase מקצה באופן אוטומטי לשימוש בממשקי API שקשורים ל-Firebase. כאן אפשר לראות את רשימת ממשקי ה-API שקשורים ל-Firebase שמופיעים ברשימת ההיתרים הזו.
ממשקי ה-API שנוספו לרשימת ההיתרים הזו הם ממשקי ה-API שנקראים על ידי שירותי Firebase מקודק הלקוח, ודורשים מפתחות API לזיהוי הפרויקט או האפליקציה ב-Firebase. שימו לב שרוב ממשקי ה-API הנדרשים לשימוש בשירותי Firebase לא צריכים להופיע ברשימת ההיתרים של מפתחות ה-API.
מאחר ש-Firebase מוסיף את ממשקי ה-API הנדרשים לכל שירותי Firebase, רשימת ההיתרים של מפתח API עשויה לכלול ממשקי API של מוצרים שאתם לא משתמשים בהם. אפשר להסיר ממשתמשי ההרשאה ממשקי API, אבל חשוב מאוד לא להסיר את ממשקי ה-API הנדרשים ל-Firebase ולשירותי Firebase שבהם אתם משתמשים (ראו רשימת ממשקי ה-API שקשורים ל-Firebase שצריכים להופיע ברשימת ההיתרים לכל שירות או מוצר). אחרת, תקבלו שגיאות כשתבצעו קריאות לשירותי Firebase.
במהלך מאי 2024, כל מפתחות ה-API הקיימים וללא הגבלה שמערכת Firebase הקצתה בעבר באופן אוטומטי יהיו מוגבלים לרשימת ממשקי ה-API שקשורים ל-Firebaseוכן לכל ממשקי ה-API שהופעלו כרגע בפרויקט.
מפתחות API קיימים ושכבר הוגבלו, ש-Firebase הקצתה להם הרשאות באופן אוטומטי בעבר, לא השתנו.
מפתחות API קיימים שלא הוקצו באופן אוטומטי על ידי Firebase לא השתנו.
איך אפשר לדעת איזה מפתח API משויך לאפליקציה ב-Firebase?
אפשר להשתמש באחת מהאפשרויות הבאות כדי לקבוע איזה מפתח API משויך לאפליקציית Firebase:
Firebase מסוף
עוברים אל settingsהגדרות הפרויקט, גוללים למטה אל הכרטיס האפליקציות שלך.
בוחרים את האפליקציה הרצויה.
מקבלים את קובץ התצורה או האובייקט של Firebase לאפליקציה הרלוונטית, ואז מחפשים את מפתח ה-API שלה:
Apple: מורידים את GoogleService-Info.plist ומאתרים את השדה API_KEY
Android: מורידים את google-services.json, מחפשים את קובץ התצורה של האפליקציה הרצויה (מחפשים את שם החבילה שלה) ואז מחפשים את השדה current_key.
אינטרנט: בוחרים באפשרות Config ומאתרים את השדה apiKey.
Firebase CLI
כדי לקבל את קובץ התצורה או האובייקט של Firebase לאפליקציה הרלוונטית, מריצים את הפקודה הבאה:
בתצורת Firebase המודפסת של האפליקציה, מחפשים את מפתח ה-API שלה:
Apple: מחפשים את השדה API_KEY
Android: מחפשים את קובץ התצורה של האפליקציה הרצויה (מחפשים את שם החבילה שלה) ואז מחפשים את השדה current_key.
אינטרנט: מחפשים את השדה apiKey
API ל-REST
כדי לקבל את הערך apiKeyId (ה-UID) של מפתח ה-API, צריך לבצע קריאה לנקודת הקצה הרלוונטית של האפליקציה הרצויה, ולאחר מכן להעביר את הערך apiKeyId לשלב הבא.
הערך של keyString זהה לערך שאפשר למצוא באובייקט התצורה של האפליקציה (Apple | Android | אינטרנט).
האם אפשר להציג שני מפתחות API לאותה אפליקציית Firebase בקובץ/באובייקט התצורה של Firebase?
אפליקציות Apple של Firebase – לכל אפליקציה יש קובץ תצורה משלה, ואפשר לרשום בה רק מפתח API אחד.
אפליקציות Firebase ל-Android – כל האפליקציות ל-Android בפרויקט Firebase מפורטות באותו קובץ תצורה, ולכל אפליקציה יכול להיות רשום רק מפתח API אחד. עם זאת, לכל אפליקציה בקובץ התצורה הזה יכול להיות מפתח שונה שמופיע.
אפליקציות אינטרנט של Firebase – לכל אפליקציה יש אובייקט תצורה משלה, ואפשר לרשום בה רק מפתח API אחד.
עם זאת, אפשר להשתמש במספר מפתחות API באפליקציה אחת. עליכם לספק לאפליקציה מנגנון לגישה למפתחות ה-API האחרים האלה, למשל באמצעות משתנה סביבה. המנגנון לגישה למפתחות ה-API האחרים לא יכול להסתמך על כך שמפתחות ה-API האלה מופיעים בקובץ או באובייקט התצורה של Firebase.
איך מערכת Firebase יודעת איזה מפתח API להתאים לאפליקציה (למשל בקובץ או באובייקט התצורה של Firebase)?
אם מערכת Firebase לא תמצא מפתחות מוגבלים שתואמים, היא תציין בקובץ התצורה או באובייקט התצורה את הערך iOS key לאפליקציות של Apple, את הערך Android key לאפליקציות של Android ואת הערך Browser key לאפליקציות אינטרנט (בהנחה שהמפתחות האלה קיימים ואין להם 'הגבלות על אפליקציות' שמונעות מהם להתאים לאפליקציה הזו).
האם אפשר למחוק באופן ידני את מפתח ה-API ואת השדה מקובץ התצורה או מהאובייקט של Firebase?
כן, אפשר למחוק באופן ידני את מפתח ה-API מקובץ התצורה או מהאובייקט של התצורה. עם זאת, עליכם לספק מנגנון אחר כדי לאפליקציה תהיה גישה למפתח API (למשל באמצעות משתנה סביבה). אחרת, כל הקריאות לשירותי Firebase ייכשלו.
האם אפשר לערוך באופן ידני את קובץ התצורה או האובייקט של Firebase עם מפתחות API שונים?
כן, אפשר לערוך באופן ידני קובץ תצורה או אובייקט תצורה כדי לשייך מפתח API אחר לאפליקציה.
האם אפשר להעביר מפתח API מפרויקט Firebase אחד לפרויקט אחר?
לא, מפתח API מזהה רק פרויקט ספציפי ואי אפשר להעביר אותו לפרויקט אחר.
מה קורה אם מוחקים מפתח API שמופיע במסוף Google Cloud?
אם מוחקים מפתח API שנמצא בשימוש באפליקציה, קריאות ה-API מהאפליקציה הזו ייכשלו. יכול להיות שתקבלו דוחות, אימיילים או שגיאות על כך שאתם מנסים להשתמש במפתח API לא תקין.
מחיקת מפתח API היא פעולה סופית ואי אפשר לבטל אותה.
אילו ממשקי API נדרשים ברשימת ההיתרים 'הגבלות API' למפתח API של Firebase?
במפתח API של Firebase, רק ממשקי ה-API שצריכים להופיע ברשימת ההיתרים 'הגבלות API' של המפתח הם ממשקי ה-API שדורשים מהלקוח לספק מפתח API יחד עם הקריאה. חשוב לזכור שרק מעט ממשקי API שקשורים ל-Firebase כוללים את הדרישה הזו. רוב ממשקי ה-API שקשורים ל-Firebase שמופעלים בפרויקט לא צריכים להופיע ברשימת ההיתרים 'הגבלות API' של המפתח.
* נדרש רק אם משתמשים במפתח ה-API של Firebase עם כלים של צד שלישי או עם גישה ישירה ל-REST לשירות או למוצר של Firebase.
** חובה לגרסאות קודמות של ה-SDK של המוצר. אם אתם משתמשים בגרסה האחרונה של ה-SDK, ה-API לא צריך להופיע ברשימת ההיתרים של המפתח.
פתרון בעיות
איך מתקנים שגיאה מסוג API_KEY_SERVICE_BLOCKED או Forbidden 403 עם ההודעה 'בקשות ל-API הזה חסומות'?
אם מופיעה הודעת השגיאה API_KEY_SERVICE_BLOCKED או הודעת שגיאה שנראת כך:
Forbidden: 403 POST https://example-service.googleapis.com/method: Requests to this API example-service.googleapis.com method google.example-service.rest.method are blocked.
סביר להניח שמפתח ה-API שבו האפליקציה משתמשת כדי לקרוא ל-API עבר הגבלות API, ורשימת ההיתרים של המפתח לא כוללת את ה-API הזה.
איך מתקנים את השגיאה הזו? "Failed to fetch this Firebase app's measurement ID from the
server"
סביר להניח שמפתח ה-API שבו משתמשת אפליקציית האינטרנט שלכם עבר הגבלות API. במקרה כזה, צריך לוודא ש-Firebase Management API נמצא ברשימה של ממשקי ה-API המורשים.
קיבלתי אימייל או שגיאה על כך שמפתח ה-API שלי לא תקין. מה קרה ואיך אפשר לפתור את הבעיה?
ריכזנו כאן כמה מהסיבות הנפוצות ביותר למפתחות API לא חוקיים:
למפתח ה-API הוחלו 'הגבלות על מפתחות API', כך שלא ניתן להתאים אותו לאפליקציה שמנסה להשתמש במפתח ('הגבלות על אפליקציות') או להשתמש בו בממשק ה-API שאליו קוראים ('הגבלות על ממשקי API').
מפתח ה-API נמחק מהפרויקט במסוף Google Cloud.
מפתח ה-API לא נוצר עבור מזהה הפרויקט שמופיע בקובץ או באובייקט התצורה של האפליקציה ב-Firebase.