הגדרה וניהול של פרויקט Firebase באמצעות ה-Management API בארכיטקטורת REST

Firebase Management REST API מאפשר הגדרה וניהול של פרויקטים ב-Firebase באופן פרוגרמטי, כולל משאבי Firebase ואפליקציות Firebase של פרויקט.

במאמר הזה מוסבר על תהליך העבודה הכללי להוספת משאבים ואפליקציות של Firebase לGoogle Cloudפרויקט קיים שלא נעשה בו עדיין שימוש בשירותי Firebase.

אפשר לדלג לקטעים ספציפיים בדף הזה אם רוצים רק:

לפני שמבצעים את השלבים בדף הזה, חשוב להפעיל את ה-API.

למידע על ניהול הרשאות גישה ל-Firebase Management API, אפשר לעיין במסמכי התיעוד של Cloud Identity Access Management ‏ (IAM) API.

לפני שמתחילים

לפני שמתחילים, צריך להפעיל את Management API בפרויקט Google Cloud וליצור את אסימון הגישה.

הפעלת Management REST API בפרויקט Google Cloud

אם עדיין לא עשיתם זאת, תצטרכו להפעיל את Firebase Management API לשימוש בפרויקט Google Cloud.

  1. פותחים את הדף Firebase Management API במסוף Google APIs.
  2. כשמופיעה בקשה, בוחרים את הפרויקט Google Cloud.
  3. לוחצים על Enable (הפעלה) בדף Firebase Management API.

יצירת אסימון גישה ל-API

דוגמה ל-Node.js שבה מאחזרים את אסימון הגישה.

קודם כל, אם אתם לא בסביבת Google Cloud, צריך להגדיר את משתנה הסביבה GOOGLE_APPLICATION_CREDENTIALS לנתיב של המפתח לחשבון השירות.

Linux או macOS

export GOOGLE_APPLICATION_CREDENTIALS="/path/to/your/service-account-file.json"

Windows

עם PowerShell:

$env:GOOGLE_APPLICATION_CREDENTIALS="C:\path\to\your\service-account-file.json"

לאחר מכן, משתמשים ב-Firebase Admin SDK כדי לקבל אסימון גישה מפרטי הכניסה של חשבון השירות:

const admin = require('firebase-admin');

function getAccessToken() {
  return admin.credential.applicationDefault().getAccessToken()
      .then(accessToken => {
        return accessToken.access_token;
      })
      .catch(err => {
        console.error('Unable to get access token');
        console.error(err);
      });
}

איך מוצאים את שם המשאב של הפרויקט

אפשר לראות את Google Cloud הפרויקטים שזמינים להוספת שירותי Firebase.

בקשה

מתקשרים אל availableProjects.list. גוף הבקשה של השיחה הזו צריך להיות ריק.

הנה דוגמה ל-Node.js לבקשת רשימה של פרויקטים זמינים Google Cloud:

const fetch = require('node-fetch');

async function listProjects() {
  const accessToken = getAccessToken();
  const uri = 'https://firebase.googleapis.com/v1beta1/availableProjects';
  const options = {
    method: 'GET',
    headers: {
      'Authorization': 'Bearer ' + accessToken,
    },
  };

  try {
    const rawResponse = await fetch(uri, options);
    const resp = await rawResponse.json();
    const projects = resp['projectInfo'];
    console.log('Project total: ' + projects.length);
    console.log('');
    for (let i in projects) {
      const project = projects[i];
      console.log('Project ' + i);
      console.log('ID: ' + project['project']);
      console.log('Display Name: ' + project['displayName']);
      console.log('');
    }
  } catch(err) {
    console.error(err);
  }
}

תוצאה

גוף התשובה מקריאה ל-availableProjects.list מכיל רשימה של אובייקטים מסוג ProjectInfo. אם רשימת הפרויקטים ארוכה מדי, גוף התגובה יכיל גם nextPageToken שאפשר להשתמש בו כפרמטר שאילתה כדי לקבל את הדף הבא של הפרויקטים.

זוהי דוגמה לגוף התגובה של קריאה ל-availableProjects.list:

{
  "projectInfo": [
    {
      "project": "projects/first-cloud-project",
      "displayName": "First Cloud Project"
    },
    {
      "project": "projects/second-cloud-project",
      "displayName": "Second Cloud Project"
    }
  ]
}

בדוגמה הזו יש שני פרויקטים Google Cloud שאפשר להוסיף להם שירותי Firebase. שימו לב שהשדה project מספק את שם המשאב הייחודי הגלובלי של פרויקט.

אתם יכולים להשתמש בכל project ערך שמופיע בתגובה מ-availableProjects.list כדי להוסיף שירותי Firebase או להוסיף אפליקציות לפרויקט.

בקטע הבא נסביר איך להוסיף שירותי Firebase ל-First Cloud Project באמצעות שם המשאב projects/first-gcp-project.

הוספת שירותי Firebase לפרויקט

ב-Google Cloud פרויקטים אפשר להשתמש בשירותים שמוצעים על ידי Firebase. בקטע הזה נסביר איך להוסיף שירותי Firebase לפרויקט Google Cloud קיים באופן פרוגרמטי. שימו לב שאפשר גם להוסיף שירותי Firebase לפרויקט Google Cloud הקיים במסוף Firebase.

בקשה

מתקשרים אל projects.addFirebase. גוף הבקשה של השיחה הזו צריך להיות ריק.

הנה דוגמה ל-Node.js להוספת שירותי Firebase לGoogle Cloudפרויקט:

const fetch = require('node-fetch');

async function addFirebase(projectId) {
  const accessToken = getAccessToken();
  const uri = 'https://firebase.googleapis.com/v1beta1/projects/' + projectId + ':addFirebase';
  const options = {
    method: 'POST',
    // Use a manual access token here since explicit user access token is required.
    headers: {
      'Authorization': 'Bearer ' + accessToken,
    },
  };

  try {
    const rawResponse = await fetch(uri, options);
    const resp = await rawResponse.json();
    console.log(resp);
  } catch(err) {
    console.error(err['message']);
  }
}

תוצאה

התוצאה של שיחה אל projects.addFirebase היא Operation. כדי שתוכלו לקרוא לנקודות קצה אחרות שקשורות ל-Firebase בפרויקט, הפעולה צריכה להסתיים בהצלחה.

כדי לבדוק אם הפעולה הצליחה, אפשר לקרוא ל-operations.get בפעולה עד שהערך של done הוא true וה-response שלה הוא מסוג FirebaseProject. אם הפעולה נכשלת, הערך של error מוגדר כ-google.rpc.Status.

זוהי דוגמה לגוף התגובה של קריאת operations.get:

{
  "name": "operations/...",
  "done": true,
  "response": {
    "@type": "type.googleapis.com/google.firebase.service.v1beta1.FirebaseProject",
    "projectId": "first-cloud-project",
    "projectNumber": "...",
    "displayName": "First Cloud Project",
    "name": "projects/first-cloud-project",
    "resources": {
      "hostingSite": "first-cloud-project",
      "realtimeDatabaseInstance": "first-cloud-project"
    }
  }
}

מכיוון ש-done הוא true והסוג response הוא FirebaseProject, לפרויקט Google Cloud יש עכשיו שירותי Firebase. התשובה מכילה גם מידע שימושי אחר על FirebaseProject החדש שנוצר, כמו projectNumber וresources ברירת המחדל שלו. הקובץ Operation נמחק אוטומטית אחרי ההשלמה.

הוספת אפליקציות Firebase לפרויקט

אפשר להשתמש ב-FirebaseProject באפליקציות שונות, כולל אפליקציות ל-iOS, ל-Android ולאינטרנט. בקטע הזה מוסבר איך להוסיף אפליקציות ל-Firebase לתוכנית הקיימת שלכם FirebaseProject באופן פרוגרמטי. שימו לב: אפשר גם להוסיף אפליקציות Firebase לפרויקט Firebase קיים במסוף Firebase.

בוחרים את סוג האפליקציה ב-Firebase שרוצים להוסיף לפרויקט Firebase.

‫iOS+

אפשר להוסיף אפליקציית iOS ב-Firebase לפרויקט Firebase קיים.

בקשה

מתקשרים אל projects.iosApps.create. כך יוצרים את גוף הבקשה:

  • נדרש:

    • bundleId: מזהה החבילה הקנוני של האפליקציה ל-iOS, כפי שהוא מופיע בחנות האפליקציות ל-iOS.
  • אופציונלי, אבל מומלץ:

    • displayName: השם המוצג של האפליקציה שהמשתמש הקצה. הערך הזה שימושי למציאת האפליקציה בהמשך במסוף Firebase.

    • appStoreId: מזהה Apple ID שמוקצה לאפליקציה שלכם על ידי Apple באופן אוטומטי. מציינים appStoreId אם הוא כבר הוקצה על ידי אפל.

בדוגמה שלנו, נשתמש רק ב-displayName וב-bundleId בגוף הבקשה:

{
  "displayName": "My Firebase iOS App",
  "bundleId": "com.firebase.ios"
}

הנה דוגמה ל-Node.js להוספת אפליקציית iOS של Firebase לפרויקט Firebase:

const fetch = require('node-fetch');

async function addIosApp(projectId, displayName, bundleId) {
  const accessToken = getAccessToken();
  const uri = 'https://firebase.googleapis.com/v1beta1/projects/' + projectId + '/iosApps';
  const options = {
    method: 'POST',
    headers: {
      'Authorization': 'Bearer ' + accessToken,
    },
    body: JSON.stringify({
      'displayName': displayName,
      'bundleId': bundleId
    }),
  };

  try {
    const rawResponse = await fetch(uri, options);
    const resp = await rawResponse.json();
    console.log(resp);
  } catch(err) {
    console.error(err['message']);
  }
}

תוצאה

התוצאה של שיחה אל projects.iosApps.create היא Operation. כדי שתוכלו לקרוא לנקודות קצה אחרות שקשורות ל-Firebase בפרויקט, הפעולה צריכה להסתיים בהצלחה.

כדי לבדוק אם הפעולה הצליחה, אפשר לקרוא לפונקציה operations.get בפעולה עד שהערך של done הוא true והסוג של response הוא IosApp. אם הפעולה נכשלת, הערך של error מוגדר כ-google.rpc.Status.

זוהי דוגמה לגוף התגובה של קריאת operations.get:

{
  "name": "operations/...",
  "done": true,
  "response": {
    "@type": "type.googleapis.com/google.firebase.service.v1beta1.IosApp",
    "name": "projects/first-cloud-project/iosApps/...",
    "appId": "...",
    "displayName": "My Firebase iOS App",
    "projectId": "first-cloud-project",
    "bundleId": "com.firebase.ios"
  }
}

done הוא true והסוג response הוא IosApp, ולכן ל-FirebaseProject יש עכשיו IosApp. התגובה מכילה גם מידע שימושי אחר על אפליקציית iOS החדשה שנוצרה ב-Firebase, כמו מזהה Firebase הייחודי appId. ה-Operation נמחק אוטומטית אחרי ההשלמה.

Android

אתם יכולים להוסיף אפליקציית Android ב-Firebase לפרויקט Firebase קיים.

בקשה

מתקשרים אל projects.androidApps.create. כך יוצרים את גוף הבקשה:

  • נדרש:

    • packageName: שם החבילה הקנוני של אפליקציית Android, כפי שהוא מופיע ב-Google Play Console.
  • אופציונלי, אבל מומלץ:

    • displayName: השם המוצג של האפליקציה שהמשתמש הקצה. הערך הזה שימושי כדי למצוא את האפליקציה מאוחר יותר במסוף Firebase.

בדוגמה שלנו, נשתמש ב-packageName וב-displayName בגוף הבקשה:

{
  "displayName": "My Firebase Android App"
  "packageName": "com.firebase.android"
}

הנה דוגמה ל-Node.js להוספת אפליקציית Firebase Android לפרויקט Firebase:

const fetch = require('node-fetch');

async function addAndroidApp(projectId, displayName, packageName) {
  const accessToken = getAccessToken();
  const uri = 'https://firebase.googleapis.com/v1beta1/projects/' + projectId + '/androidApps';
  const options = {
    method: 'POST',
    headers: {
      'Authorization': 'Bearer ' + accessToken,
    },
    body: JSON.stringify({
      'displayName': displayName,
      'packageName': packageName
    }),
  };

  try {
    const rawResponse = await fetch(uri, options);
    const resp = await rawResponse.json();
    console.log(resp);
  } catch(err) {
    console.error(err['message']);
  }
}

תוצאה

התוצאה של שיחה אל projects.androidApps.create היא Operation. כדי שתוכלו לקרוא לנקודות קצה אחרות שקשורות ל-Firebase בפרויקט, הפעולה צריכה להסתיים בהצלחה.

כדי לבדוק אם הפעולה הצליחה, אפשר לקרוא ל-operations.get בפעולה עד שהערך של done הוא true וה-response שלה הוא מסוג AndroidApp. אם הפעולה נכשלת, הערך של error מוגדר כ-google.rpc.Status.

זוהי דוגמה לגוף התגובה של קריאת operations.get:

{
  "name": "operations/...",
  "done": true,
  "response": {
    "@type": "type.googleapis.com/google.firebase.service.v1beta1.AndroidApp",
    "name": "projects/first-cloud-project/androidApps/...",
    "appId": "...",
    "displayName": "My Firebase Android App",
    "projectId": "first-cloud-project",
    "packageName": "com.firebase.android"
  }
}

done הוא true והסוג response הוא AndroidApp, ולכן ל-FirebaseProject יש עכשיו AndroidApp. התגובה מכילה גם מידע שימושי אחר על אפליקציית Android החדשה שלכם ב-Firebase, כמו מזהה Firebase ייחודי appId. ה-Operation נמחק אוטומטית אחרי השלמת הפעולה.

הוספת אישורי SHA

אפשר להוסיף אישורי SHA לכל אפליקציית Android קיימת ב-Firebase באמצעות הקריאה ל-projects.androidApps.sha.create. גוף הבקשה של קריאת השיטה הזו חייב לכלול שדה name ריק. התוצאה של הקריאה הזו היא מופע חדש שנוצר של ShaCertificate.

כשמתקשרים אל projects.androidApps.sha.create, צריך לספק גיבוב אישור SHA-1 או SHA-256 תקין. אפשר לקבל את הגיבוב SHA של אישור החתימה באמצעות הפקודה signingReport של gradle:

./gradlew signingReport

מידע נוסף זמין במאמר בנושא ממשקי Google API ל-Android.

אינטרנט

אתם יכולים להוסיף אפליקציית אינטרנט של Firebase לפרויקט Firebase קיים.

בקשה

מתקשרים אל projects.webApps.create. כך יוצרים את גוף הבקשה:

  • אופציונלי:

    • displayName: השם המוצג של האפליקציה שהמשתמש הקצה. הערך הזה שימושי כדי למצוא את האפליקציה מאוחר יותר במסוף Firebase.
  • לא מומלץ:

    • appUrls: כתובות ה-URL המלאות שבהן האפליקציה מתארחת. כשמקשרים אפליקציית אינטרנט ב-Firebase לאתר Firebase Hosting, המערכת של Firebase מאכלסת את השדות האלה באופן אוטומטי, ולכן צריך להשאיר אותם ריקים בגוף הבקשה.

בדוגמה שלנו, נציין רק displayName בגוף הבקשה:

{
  "displayName": "My Firebase Web App"
}

הנה דוגמה ל-Node.js להוספת אפליקציית אינטרנט של Firebase לפרויקט Firebase:

const fetch = require('node-fetch');

async function addWebApp(projectId, displayName) {
  const accessToken = getAccessToken();
  const uri = 'https://firebase.googleapis.com/v1beta1/projects/' + projectId + '/webApps';
  const options = {
    method: 'POST',
    headers: {
      'Authorization': 'Bearer ' + accessToken,
    },
    body: JSON.stringify({
      'displayName': displayName
    }),
  };

  try {
    const rawResponse = await fetch(uri, options);
    const resp = await rawResponse.json();
    console.log(resp);
  } catch(err) {
    console.error(err['message']);
  }
}

תוצאה

התוצאה של שיחה אל projects.webApps.create היא Operation. כדי שתוכלו לקרוא לנקודות קצה אחרות שקשורות ל-Firebase בפרויקט, הפעולה צריכה להסתיים בהצלחה.

כדי לבדוק אם הפעולה הצליחה, אפשר לקרוא לפונקציה operations.get בפעולה עד שהערך של done הוא true והסוג של response הוא WebApp. אם הפעולה נכשלת, הערך של error מוגדר כ-google.rpc.Status.

זוהי דוגמה לגוף התגובה של קריאת operations.get:

{
  "name": "operations/...",
  "done": true,
  "response": {
    "@type": "type.googleapis.com/google.firebase.service.v1beta1.WebApp",
    "name": "projects/first-cloud-project/webApps/...",
    "appId": "...",
    "displayName": "My Firebase Web App",
    "projectId": "first-cloud-project"
  }
}

done הוא true והסוג response הוא WebApp, ולכן ל-FirebaseProject יש עכשיו WebApp. התשובה מכילה גם מידע שימושי אחר על אפליקציית האינטרנט החדשה של Firebase שיצרתם, כמו מזהה Firebase הייחודי appId. ה-Operation נמחק אוטומטית אחרי ההשלמה.

אפשר לקשר חשבון Google Analytics קיים לתוכנית הקיימת שלכם באמצעות תכנות.FirebaseProject שימו לב שאפשר גם לקשר את הפרויקט הקיים ב-Firebase ל-Google Analytics דרך הכרטיסייה Integrations (שילובים) בקטע Project Settings (הגדרות הפרויקט).

הקריאה אל projects.addGoogleAnalytics דורשת analytics_resource, שיכול להיות analyticsAccountId או analyticsPropertyId:

  • מציינים analyticsAccountId קיים כדי להקצות נכס חדש של Google Analytics בחשבון שצוין, ולשייך את הנכס החדש לפרויקט Firebase.

  • מציינים analyticsPropertyId קיים כדי לשייך את נכס Google Analytics לפרויקט Firebase.

אפשר למצוא את analyticsAccountId וכל analyticsPropertyId קיים באתר Google Analytics.

כשמתקשרים projects.addGoogleAnalytics:

  1. בבדיקה הראשונה נקבע אם יש מקורות נתונים קיימים בנכס Google Analytics שתואמים לאפליקציות Firebase קיימות ב-FirebaseProject (בהתבסס על packageName או bundleId שמשויכים למקור הנתונים). לאחר מכן, מקשרים את מקורות הנתונים והאפליקציות הרלוונטיים. שימו לב: הקישור האוטומטי הזה רלוונטי רק לאפליקציות ל-Android ולאפליקציות ל-iOS.

  2. אם לא נמצאו מקורות נתונים תואמים לאפליקציות שלכם ב-Firebase, יוקצו מקורות נתונים חדשים בנכס Google Analytics לכל אחת מהאפליקציות שלכם ב-Firebase. שימו לב: תמיד מוקצה מקור נתונים חדש לאפליקציית אינטרנט, גם אם היא קושרה בעבר למקור נתונים בנכס Analytics.

מידע נוסף על ההיררכיה והמבנה של חשבונות Google Analytics זמין במסמכי Analytics.

בקשה

מתקשרים אל projects.addGoogleAnalytics.

בגוף הבקשה של השיחה לדוגמה אל project.addGoogleAnalytics, נציין את חשבון Google Analytics שלנו analyticsAccountId. הקריאה הזו תספק נכס חדש של Google Analytics ותקשר את הנכס החדש אל FirebaseProject.

{
  "analyticsAccountId": "<your-google-analytics-account-id>"
}

הנה דוגמה ל-Node.js לקישור פרויקט Firebase לחשבון Google Analytics:

const fetch = require('node-fetch');

async function addGoogleAnalytics(projectId, analyticsAccountId) {
  const accessToken = getAccessToken();
  const uri = 'https://firebase.googleapis.com/v1beta1/projects/' + projectId + ':addGoogleAnalytics';
  const options = {
    method: 'POST',
    headers: {
      'Authorization': 'Bearer ' + accessToken,
    },
    body: JSON.stringify({
      'analyticsAccountId': analyticsAccountId
    }),
  };

  try {
    const rawResponse = await fetch(uri, options);
    const resp = await rawResponse.json();
    console.log(resp);
  } catch(err) {
    console.error(err['message']);
  }
}

תוצאה

התוצאה של שיחה אל projects.addGoogleAnalytics היא Operation. כדי שתוכלו לקרוא לנקודות קצה אחרות שקשורות ל-Firebase בפרויקט, הפעולה צריכה להסתיים בהצלחה.

כדי לבדוק אם הפעולה בוצעה בהצלחה, אפשר להתקשר אל operations.get בפעולה עד שהערך של done הוא true והערך של response הוא מסוג analyticsDetails. אם הפעולה נכשלת, הערך של error מוגדר כ-google.rpc.Status.

זוהי דוגמה לגוף התגובה של קריאת operations.get:

{
  "name": "operations/...",
  "none": true,
  "response": {
    "@type": "type.googleapis.com/google.firebase.service.v1beta1.AnalyticsDetails",
    "analyticsProperty": [
      {
        "id": "...",
        "displayName": "..."
      }
    ],
    "streamMappings": [
      {
        "app": "...",
        "streamId": "...",
        "measurementId": "..."
      }
    ]
  }
}

מכיוון שהערך של done הוא true והסוג של response הוא analyticsDetails, ‏ FirebaseProject מקושר עכשיו לחשבון Google Analytics שצוין. הקובץ Operation נמחק אוטומטית אחרי ההשלמה.