ตั้งค่าและจัดการโปรเจ็กต์ Firebase โดยใช้ Management REST API

Firebase Management REST API ช่วยให้สามารถตั้งค่าและจัดการโปรเจ็กต์ Firebase แบบเป็นโปรแกรมได้ รวมถึงทรัพยากร Firebase และแอป Firebase ของโปรเจ็กต์

ภาพรวมนี้อธิบายขั้นตอนการทำงานทั่วไปในการเพิ่มทรัพยากรและแอป Firebase ให้กับ โปรเจ็กต์ Google Cloud ที่มีอยู่ซึ่งไม่ได้ใช้บริการ Firebase ในปัจจุบัน

คุณสามารถข้ามไปยังส่วนเฉพาะของหน้านี้ได้หากต้องการ:

ก่อนที่จะทำตามขั้นตอนใดๆ ในหน้านี้ ตรวจสอบให้แน่ใจว่าคุณ เปิดใช้งาน API

สำหรับข้อมูลเกี่ยวกับการจัดการการเข้าถึงสำหรับ Firebase Management API โปรดไปที่ เอกสารประกอบ Cloud Identity Access Management (IAM) API

ก่อนที่คุณจะเริ่ม

ก่อนที่คุณจะเริ่มต้น คุณจะต้อง เปิดใช้งาน API การจัดการ สำหรับโครงการ Google Cloud ของคุณ และ สร้างโทเค็นการเข้าถึงของคุณ

เปิดใช้งาน Management REST API สำหรับโปรเจ็กต์ Google Cloud ของคุณ

หากคุณยังไม่ได้เปิดใช้งาน คุณจะต้องเปิดใช้ งาน Firebase Management API เพื่อใช้กับโปรเจ็กต์ Google Cloud ของคุณ

  1. เปิดหน้า Firebase Management API ในคอนโซล Google API
  2. เมื่อได้รับแจ้ง ให้เลือกโปรเจ็กต์ Google Cloud ของคุณ
  3. คลิก เปิดใช้งาน ในหน้า Firebase Management API

สร้างโทเค็นการเข้าถึง API ของคุณ

นี่คือตัวอย่างสำหรับ Node.js ที่ดึงข้อมูลโทเค็นการเข้าถึงของคุณ

ขั้นแรก หากคุณไม่ได้อยู่ในสภาพแวดล้อม Google Cloud ให้ตั้งค่าตัวแปรสภาพแวดล้อม GOOGLE_APPLICATION_CREDENTIALS เป็นเส้นทางไปยังคีย์บัญชีบริการของคุณ

ลินุกซ์หรือ macOS

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

หน้าต่าง

ด้วย 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

คุณสามารถเพิ่ม แอป Firebase Android ลงในโปรเจ็กต์ Firebase ที่มีอยู่ได้

ขอ

เรียก projects.androidApps.create ต่อไปนี้เป็นวิธีสร้างเนื้อหาคำขอของคุณ:

  • ที่จำเป็น:

    • packageName : ชื่อแพ็กเกจตามรูปแบบบัญญัติของแอป Android ที่จะปรากฏในแผงควบคุมสำหรับนักพัฒนาซอฟต์แวร์ Google Play
  • ไม่บังคับ แต่แนะนำ:

    • 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 การตอบสนองยังมีข้อมูลที่เป็นประโยชน์อื่นๆ เกี่ยวกับแอป Firebase Android ที่คุณสร้างขึ้นใหม่ เช่น Firebase appId ที่ไม่ซ้ำใคร Operation จะถูกลบโดยอัตโนมัติหลังจากเสร็จสิ้น

เพิ่มใบรับรอง SHA

คุณสามารถเพิ่มใบรับรอง SHA ให้กับแอป Firebase Android ที่มีอยู่ได้โดยเรียก projects.androidApps.sha.create เนื้อความคำขอสำหรับการเรียกเมธอดนี้ต้องมีฟิลด์ name ว่าง ผลลัพธ์ของการเรียกนี้คืออินสแตนซ์ที่สร้างขึ้นใหม่ของ ShaCertificate

เมื่อเรียก projects.androidApps.sha.create คุณจะต้องระบุแฮชใบรับรอง SHA-1 หรือ SHA-256 ที่ถูกต้อง คุณสามารถรับแฮช SHA ของใบรับรองการลงนามของคุณด้วยคำสั่ง gradle signingReport :

./gradlew signingReport

สำหรับข้อมูลเพิ่มเติม โปรดไปที่ Google API สำหรับ Android

คุณสามารถเชื่อมโยง บัญชี Google Analytics ที่มีอยู่กับ FirebaseProject ที่มีอยู่โดยทางโปรแกรมได้ โปรดทราบว่าคุณยังสามารถเชื่อมโยงโปรเจ็กต์ Firebase ที่มีอยู่กับ Google Analytics ได้ในแท็บ การรวมระบบ ของ การตั้งค่าโปรเจ็กต์

การเรียก 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 แต่ละรายการของคุณ โปรดทราบว่าสตรีมข้อมูลใหม่จะได้รับการจัดสรรสำหรับ Web App เสมอ แม้ว่าก่อนหน้านี้จะเชื่อมโยงกับสตรีมข้อมูลในพร็อพเพอร์ตี้ 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 เป็นจริงและประเภท response คือ analyticsDetails ขณะนี้ FirebaseProject จึงเชื่อมโยงกับบัญชี Google Analytics ที่ระบุ Operation จะถูกลบโดยอัตโนมัติหลังจากเสร็จสิ้น

สรุปตำแหน่งเริ่มต้นของโครงการของคุณ (ไม่บังคับ)

หากโปรเจ็กต์ Firebase ของคุณจะใช้ Cloud Firestore, Cloud Storage หรือแอป App Engine คุณสามารถสรุป ตำแหน่งทรัพยากรเริ่มต้นของ Google Cloud Platform (GCP) สำหรับโปรเจ็กต์ของคุณโดยทางโปรแกรมได้ โปรดทราบว่าคุณสามารถเลือกตำแหน่งใน คอนโซล Firebase ได้ด้วย

ก่อนที่จะตั้งค่าตำแหน่งนี้ โปรดดู เลือกตำแหน่งสำหรับโครงการของคุณ เพื่อดูข้อมูลว่าตำแหน่งใดดีที่สุดสำหรับโครงการของคุณ คุณควรเรียก projects.availableLocations เพื่อส่งคืนรายการตำแหน่งที่ถูกต้องสำหรับโปรเจ็กต์ของคุณ เนื่องจากหากโปรเจ็กต์ของคุณเป็นส่วนหนึ่งขององค์กร Google Cloud นโยบายองค์กรของคุณอาจจำกัดตำแหน่ง ที่ถูกต้องสำหรับโปรเจ็กต์ของคุณ

การเรียกใช้เมธอด defaultLocation.finalize นี้จะสร้างแอปพลิเคชัน App Engine โดยมี ที่เก็บข้อมูล Cloud Storage เริ่มต้น อยู่ใน locationId ที่คุณระบุในเนื้อหาคำขอ

อาจมีการระบุตำแหน่งทรัพยากร GCP เริ่มต้นแล้วหาก Project มีแอปพลิเคชัน App Engine อยู่แล้ว หรือเคยเรียกเมธอด defaultLocation.finalize นี้มาก่อน

ขอ

โทร projects.defaultLocation.finalize ต่อไปนี้เป็นวิธีสร้างเนื้อหาคำขอของคุณ:

  • ที่จำเป็น:

    • locationId : ตำแหน่งที่จัดเก็บข้อมูลของคุณสำหรับบริการ GCP ที่ต้องมีการตั้งค่าตำแหน่ง เช่น Cloud Firestore หรือ Cloud Storage
{
  "locationId": "us-west2"
}

ต่อไปนี้เป็นตัวอย่างสำหรับ Node.js เพื่อสรุปตำแหน่งเริ่มต้นของโปรเจ็กต์ของคุณ:

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

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

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

ผลลัพธ์

ผลลัพธ์ของการเรียก projects.defaultLocation.finalize คือ Operation ก่อนที่คุณจะสามารถเรียกตำแหน่งข้อมูลอื่นๆ ที่เกี่ยวข้องกับ Firebase สำหรับโปรเจ็กต์ของคุณได้ การดำเนินการจะต้องสำเร็จก่อน

หากต้องการตรวจสอบว่าการดำเนินการสำเร็จหรือไม่ คุณสามารถเรียก operations.get ในการดำเนินการได้จนกว่าค่าของ done จะเป็น true และ response เป็นประเภท google.protobuf.Empty หากการดำเนินการไม่สำเร็จ error เนื้อหาการตอบกลับจะเป็นประเภท google.rpc.Status Operation จะถูกลบโดยอัตโนมัติหลังจากเสร็จสิ้น