ตั้งค่าและจัดการโปรเจ็กต์ 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

ก่อนจะเริ่ม

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

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

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

  1. เปิดหน้า Firebase Management API ในคอนโซล Google APIs
  2. เมื่อได้รับแจ้ง ให้เลือกโครงการ Google Cloud ของคุณ
  3. คลิก เปิดใช้งาน ในหน้า 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 กต์.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 ไปที่ operation จนกว่าค่า 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 กต์.androidApps.create ต่อไปนี้เป็นวิธีสร้างเนื้อหาคำขอของคุณ:

  • ที่จำเป็น:

    • packageName : ชื่อแพ็กเกจ Canonical ของแอป 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 ไปที่ operation จนกว่าค่า 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 กต์.androidApps.sha.create เนื้อหาคำขอสำหรับการเรียกเมธอดนี้ต้องมีฟิลด์ name ว่าง ผลลัพธ์ของการโทรนี้คืออินสแตนซ์ ShaCertificate ที่สร้างขึ้นใหม่

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

./gradlew signingReport

สำหรับข้อมูลเพิ่มเติม โปรดไปที่ Google APIs สำหรับ 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 ของคุณหรือไม่ (ตามชื่อแพ็ก bundleId packageName เชื่อมโยงกับสตรีมข้อมูล) จากนั้นสตรีมข้อมูลและแอปจะเชื่อมโยงกันตามความเหมาะสม โปรดทราบว่าการเชื่อมโยงอัตโนมัตินี้ใช้กับแอป Android และ iOS เท่านั้น

  2. หากไม่พบสตรีมข้อมูลที่สอดคล้องกันสำหรับแอป Firebase สตรีมข้อมูลใหม่จะได้รับการจัดสรรในพร็อพเพอร์ตี้ Google Analytics สำหรับแอป Firebase แต่ละแอป โปรดทราบว่าเว็บแอปจะจัดเตรียมสตรีมข้อมูลใหม่เสมอ แม้ว่าก่อนหน้านี้จะเชื่อมโยงกับสตรีมข้อมูลในพร็อพเพอร์ตี้ Analytics ก็ตาม

เรียนรู้เพิ่มเติมเกี่ยวกับลำดับชั้นและโครงสร้างของบัญชี Google Analytics ใน เอกสารประกอบ ของ Analytics

ขอ

โทร projects.addGoogleAnalytics กต์.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 ต์ addGoogleAnalytics คือ Operation ก่อนที่คุณจะเรียกใช้ปลายทางอื่นๆ ที่เกี่ยวข้องกับ Firebase สำหรับโปรเจ็กต์ของคุณได้ การดำเนินการจะต้องสำเร็จเสียก่อน

ในการตรวจสอบว่าการดำเนินการสำเร็จหรือไม่ คุณสามารถเรียก operations.get ไปที่ operation จนกว่าค่า 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 ต์. AvailableLocations เพื่อส่งคืนรายการสถานที่ที่ถูกต้องสำหรับโปรเจ็กต์ของคุณ เนื่องจากหากโปรเจ็กต์ของคุณเป็นส่วนหนึ่งขององค์กร Google Cloud นโยบายองค์กรของคุณอาจจำกัดสถานที่ที่ ถูกต้องสำหรับโปรเจ็กต์ของคุณ

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

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

ขอ

โทร projects.defaultLocation.finalize กต์.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 ที่ operation จนกว่าค่า done จะเป็น true และการ response เป็นประเภท google.protobuf.Empty หากการดำเนินการไม่สำเร็จ error ของเนื้อหาการตอบสนองจะเป็นประเภท google.rpc.Status การ Operation จะถูกลบโดยอัตโนมัติหลังจากเสร็จสิ้น