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

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

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

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

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

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

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

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

הפעלת Management API בארכיטקטורת REST בפרויקט 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"

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

import { initializeApp, applicationDefault } from "firebase-admin/app";

initializeApp();

async function getAccessToken() {
  try {
    const accessToken = await applicationDefault().getAccessToken();
    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 App Store.
  • אופציונלי, אבל מומלץ:

    • 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. התשובה מכילה גם מידע שימושי אחר על אפליקציית Firebase ל-iOS שיצרתם, כמו מזהה Firebase הייחודי appId. ה-Operation נמחק אוטומטית אחרי ההשלמה.

Android

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

בקשה

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

  • נדרש:

    • packageName: שם החבילה הקנוני של אפליקציית Android כפי שהוא מופיע ב-Google Play Developer 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. גוף הבקשה של הפעלת method זו חייב לכלול שדה name ריק. התוצאה של הקריאה הזו היא מופע חדש שנוצר של ShaCertificate.

כשמתקשרים אל projects.androidApps.sha.create, צריך לספק גיבוב אישור SHA-1 או SHA-256 תקין. אפשר לקבל את ה-hash של 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 נמחק אוטומטית אחרי ההשלמה.