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

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

ภาพรวมนี้อธิบายเวิร์กโฟลว์ทั่วไปในการเพิ่มทรัพยากรและแอป Firebase ลงในGoogle Cloud��

คุณข้ามไปยังส่วนที่ต้องการในหน้านี้ได้หากต้องการ โดยทำดังนี้

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

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

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

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

./gradlew signingReport

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