ปรับใช้กับไซต์ของคุณโดยใช้ Hosting REST API

REST API โฮสติ้งของ Firebase ช่วยให้ใช้งานแบบเป็นโปรแกรมและปรับแต่งได้กับไซต์ที่โฮสต์โดย Firebase ใช้ REST API นี้เพื่อปรับใช้เนื้อหาและการกำหนดค่าโฮสติ้งใหม่หรือที่อัปเดต

อีกทางเลือกหนึ่งนอกเหนือจากการใช้ Firebase CLI สำหรับการปรับใช้ คุณสามารถใช้ Firebase Hosting REST API เพื่อสร้างเนื้อหา version ใหม่สำหรับเว็บไซต์ของคุณโดยทางโปรแกรม อัปโหลดไฟล์ไปยังเวอร์ชัน จากนั้นปรับใช้เวอร์ชันกับเว็บไซต์ของคุณ

ตัวอย่างเช่น ด้วย Firebase Hosting REST API คุณสามารถ:

  • กำหนดการปรับใช้ เมื่อใช้ REST API ร่วมกับงาน cron คุณจะสามารถเปลี่ยนเนื้อหาที่โฮสต์โดย Firebase ตามกำหนดเวลาปกติได้ (เช่น เพื่อปรับใช้เนื้อหาในเวอร์ชันวันหยุดพิเศษหรือกิจกรรมที่เกี่ยวข้องกับกิจกรรม)

  • บูรณาการกับเครื่องมือสำหรับนักพัฒนา คุณสามารถสร้างตัวเลือกในเครื่องมือเพื่อปรับใช้โปรเจ็กต์เว็บแอปกับโฮสติ้ง Firebase ได้ด้วยการคลิกเพียงครั้งเดียว (เช่น คลิกปุ่มปรับใช้ภายใน IDE)

  • ปรับใช้อัตโนมัติเมื่อมีการสร้างเนื้อหาคงที่ เมื่อกระบวนการสร้างเนื้อหาสแตติกโดยทางโปรแกรม (เช่น เนื้อหาที่ผู้ใช้สร้างขึ้น เช่น วิกิหรือบทความข่าว) คุณสามารถปรับใช้เนื้อหาที่สร้างขึ้นเป็นไฟล์สแตติกแทนที่จะให้บริการแบบไดนามิก ซึ่งจะช่วยประหยัดพลังงานในการประมวลผลที่มีราคาแพงและให้บริการไฟล์ของคุณในรูปแบบที่ปรับขนาดได้มากขึ้น

ในขั้นแรกคู่มือนี้จะอธิบายวิธีการเปิดใช้งาน ตรวจสอบสิทธิ์ และอนุญาต API จากนั้น คู่มือนี้จะอธิบายตัวอย่างเพื่อสร้างเวอร์ชันโฮสติ้งของ Firebase เพื่ออัปโหลดไฟล์ที่จำเป็นไปยังเวอร์ชัน และสุดท้ายคือการปรับใช้เวอร์ชัน

คุณยังสามารถเรียนรู้เพิ่มเติมเกี่ยวกับ REST API นี้ได้จาก เอกสารอ้างอิง Hosting REST API ฉบับเต็ม

ก่อนที่คุณจะเริ่มต้น: เปิดใช้งาน REST API

คุณต้องเปิดใช้งาน Firebase Hosting REST API ในคอนโซล Google APIs:

  1. เปิด หน้า Firebase Hosting API ในคอนโซล Google API

  2. เมื่อได้รับแจ้ง ให้เลือกโปรเจ็กต์ Firebase ของคุณ

  3. คลิก เปิดใช้งาน ในหน้า Firebase Hosting API

ขั้นตอนที่ 1: รับโทเค็นการเข้าถึงเพื่อตรวจสอบสิทธิ์และอนุญาตคำขอ API

โปรเจ็กต์ Firebase รองรับ บัญชีบริการ ของ Google ซึ่งคุณสามารถใช้เรียก API ของเซิร์ฟเวอร์ Firebase จากเซิร์ฟเวอร์แอปของคุณหรือสภาพแวดล้อมที่เชื่อถือได้ หากคุณกำลังพัฒนาโค้ดในเครื่องหรือปรับใช้แอปพลิเคชันภายในองค์กร คุณสามารถใช้ข้อมูลประจำตัวที่ได้รับผ่านบัญชีบริการนี้เพื่ออนุญาตคำขอของเซิร์ฟเวอร์ได้

หากต้องการตรวจสอบสิทธิ์บัญชีบริการและอนุญาตให้เข้าถึงบริการ Firebase คุณต้องสร้างไฟล์คีย์ส่วนตัวในรูปแบบ JSON

หากต้องการสร้างไฟล์คีย์ส่วนตัวสำหรับบัญชีบริการของคุณ:

  1. ในคอนโซล Firebase ให้เปิด การตั้งค่า > บัญชีบริการ

  2. คลิก สร้างคีย์ส่วนตัวใหม่ จากนั้นยืนยันโดยคลิก สร้างคีย์ส่วนตัว

  3. จัดเก็บไฟล์ JSON ที่มีคีย์อย่างปลอดภัย

ใช้ข้อมูลรับรอง Firebase ของคุณร่วมกับ Google Auth Library สำหรับภาษาที่คุณต้องการเพื่อดึงโทเค็นการเข้าถึง OAuth 2.0 ที่มีอายุสั้น:

node.js

const {google} = require('googleapis');
function getAccessToken() {
  return new Promise(function(resolve, reject) {
    var key = require('./service-account.json');
    var jwtClient = new google.auth.JWT(
      key.client_email,
      null,
      key.private_key,
      SCOPES,
      null
    );
    jwtClient.authorize(function(err, tokens) {
      if (err) {
        reject(err);
        return;
      }
      resolve(tokens.access_token);
    });
  });
}

ในตัวอย่างนี้ ไลบรารีไคลเอ็นต์ Google API ตรวจสอบสิทธิ์คำขอด้วยโทเค็นเว็บ JSON หรือ JWT สำหรับข้อมูลเพิ่มเติม โปรดดู โทเค็นเว็บ JSON

หลาม

def _get_access_token():
  """Retrieve a valid access token that can be used to authorize requests.

  :return: Access token.
  """
  credentials = ServiceAccountCredentials.from_json_keyfile_name(
      'service-account.json', SCOPES)
  access_token_info = credentials.get_access_token()
  return access_token_info.access_token

ชวา

private static String getAccessToken() throws IOException {
  GoogleCredential googleCredential = GoogleCredential
      .fromStream(new FileInputStream("service-account.json"))
      .createScoped(Arrays.asList(SCOPES));
  googleCredential.refreshToken();
  return googleCredential.getAccessToken();
}

หลังจากที่โทเค็นการเข้าถึงของคุณหมดอายุ วิธีการรีเฟรชโทเค็นจะถูกเรียกโดยอัตโนมัติเพื่อดึงโทเค็นการเข้าถึงที่อัปเดต

ขั้นตอนที่ 2: ตรวจสอบให้แน่ใจว่าโครงการของคุณมีไซต์โฮสติ้งเริ่มต้น

ก่อนที่คุณจะปรับใช้กับ Firebase Hosting เป็นครั้งแรก โปรเจ็กต์ Firebase ของคุณต้องมี Hosting SITE เริ่มต้น

  1. ตรวจสอบว่าโปรเจ็กต์ของคุณมีไซต์โฮสติ้งเริ่มต้นอยู่แล้วหรือไม่โดยเรียกจุดสิ้นสุด sites.list

    ตัวอย่างเช่น:

    คำสั่ง cURL

    curl -H "Content-Type: application/json" \
           -H "Authorization: Bearer ACCESS_TOKEN" \
    
    https://firebasehosting.googleapis.com/v1beta1/projects/PROJECT_ID/sites
    

    คำขอ HTTPS ดิบ

    Host: firebasehosting.googleapis.com
    
    POST /v1beta1/projects/PROJECT_ID/sites HTTP/1.1
    Authorization: Bearer ACCESS_TOKEN
    Content-Type: application/json
    
    • หากไซต์ใดไซต์หนึ่งมี "type": "DEFAULT_SITE" แสดงว่าโปรเจ็กต์ของคุณมีไซต์โฮสติ้งเริ่มต้นอยู่แล้ว ข้ามส่วนที่เหลือของขั้นตอนนี้ และไปยังขั้นตอนถัดไป: สร้างเวอร์ชันใหม่สำหรับไซต์ของคุณ

    • หากคุณได้รับอาร์เรย์ว่าง แสดงว่าคุณไม่มีไซต์โฮสติ้งเริ่มต้น ดำเนินการส่วนที่เหลือของขั้นตอนนี้ให้เสร็จสิ้น

  2. ตัดสินใจเลือก SITE_ID สำหรับไซต์โฮสติ้งเริ่มต้นของคุณ โปรดคำนึงถึงสิ่งต่อไปนี้เมื่อตัดสินใจเลือก SITE_ID นี้ :

    • SITE_ID นี้ใช้เพื่อสร้างโดเมนย่อย Firebase เริ่มต้นของคุณ:
      SITE_ID .web.app และ SITE_ID .firebaseapp.com

    • SITE_ID มีข้อกำหนดดังต่อไปนี้:

      • ต้องเป็นป้ายกำกับชื่อโฮสต์ที่ถูกต้อง ซึ่งหมายความว่าต้องไม่มี . , _ ฯลฯ
      • ต้องมีอักขระไม่เกิน 30 ตัว
      • ต้องไม่ซ้ำกันทั่วโลกภายใน Firebase

    โปรดทราบว่าเรามักจะแนะนำให้ใช้รหัสโครงการของคุณเป็น SITE_ID สำหรับไซต์โฮสติ้งเริ่มต้นของคุณ เรียนรู้วิธีค้นหารหัสนี้ใน ทำความเข้าใจโปรเจ็กต์ Firebase

  3. สร้างไซต์โฮสติ้งเริ่มต้นของคุณโดยการเรียก sites.create ปลายทางโดยใช้ SITE_ID ที่คุณต้องการเป็นพารามิเตอร์ siteId

    ตัวอย่างเช่น:

    คำสั่ง cURL

    curl -H "Content-Type: application/json" \
           -H "Authorization: Bearer ACCESS_TOKEN" \
    
    https://firebasehosting.googleapis.com/v1beta1/projects/PROJECT_ID/sites?siteId=SITE_ID
    

    คำขอ HTTPS ดิบ

    Host: firebasehosting.googleapis.com
    
    POST /v1beta1/projects/PROJECT_ID/sites?siteId=SITE_ID
    Authorization: Bearer ACCESS_TOKEN
    Content-Type: application/json
    

    การเรียก API นี้ไปยัง sites.create ส่งคืน JSON ต่อไปนี้:

    {
      "name": "projects/PROJECT_ID/sites/SITE_ID",
      "defaultUrl": "https://SITE_ID.web.app",
      "type": "DEFAULT_SITE"
    }
    

ขั้นตอนที่ 3: สร้างเวอร์ชันใหม่สำหรับเว็บไซต์ของคุณ

การเรียก API ครั้งแรกของคุณคือการสร้าง Version ใหม่สำหรับเว็บไซต์ของคุณ ในช่วงท้ายของคู่มือนี้ คุณจะอัปโหลดไฟล์เป็นเวอร์ชันนี้ จากนั้นจึงปรับใช้กับไซต์ของคุณ

  1. กำหนด SITE_ID สำหรับไซต์ที่คุณต้องการปรับใช้

  2. เรียกใช้ เวอร์ชันสร้าง ปลายทางโดยใช้ SITE_ID ของคุณในการโทร

    (ไม่บังคับ) คุณยังส่ง ออบเจ็กต์การกำหนดค่า Firebase Hosting ในการเรียกได้ รวมถึงการตั้งค่าส่วนหัวที่แคชไฟล์ทั้งหมดตามระยะเวลาที่กำหนด

    ตัวอย่างเช่น:

    คำสั่ง cURL

    curl -H "Content-Type: application/json" \
           -H "Authorization: Bearer ACCESS_TOKEN" \
           -d '{
                 "config": {
                   "headers": [{
                     "glob": "**",
                     "headers": {
                       "Cache-Control": "max-age=1800"
                     }
                   }]
                 }
               }' \
    https://firebasehosting.googleapis.com/v1beta1/sites/SITE_ID/versions
    

    คำขอ HTTPS ดิบ

    Host: firebasehosting.googleapis.com
    
    POST /v1beta1/sites/SITE_ID/versions HTTP/1.1
    Authorization: Bearer ACCESS_TOKEN
    Content-Type: application/json
    Content-Length: 134
    
    {
      "config": {
        "headers": [{
          "glob": "**",
          "headers": {
            "Cache-Control": "max-age=1800"
          }
        }]
      }
    }
    

การเรียก API นี้ไปที่ versions.create ส่งคืน JSON ต่อไปนี้:

{
  "name": "sites/SITE_ID/versions/VERSION_ID",
  "status": "CREATED",
  "config": {
    "headers": [{
      "glob": "**",
      "headers": {
        "Cache-Control": "max-age=1800"
      }
    }]
  }
}

การตอบสนองนี้มีตัวระบุที่ไม่ซ้ำกันสำหรับเวอร์ชันใหม่ ในรูปแบบ: sites/ SITE_ID /versions/ VERSION_ID คุณจะต้องมีตัวระบุที่ไม่ซ้ำกันนี้ตลอดทั้งคู่มือนี้เพื่ออ้างอิงเวอร์ชันเฉพาะนี้

ขั้นตอนที่ 4: ระบุรายการไฟล์ที่คุณต้องการปรับใช้

เมื่อคุณมีตัวระบุเวอร์ชันใหม่แล้ว คุณต้องบอก Firebase Hosting ว่าไฟล์ใดที่คุณต้องการปรับใช้ในเวอร์ชันใหม่นี้ในที่สุด

โปรดทราบว่าโฮสติ้งจำกัดขนาดสูงสุดไว้ที่ 2 GB สำหรับแต่ละไฟล์

API นี้กำหนดให้คุณระบุไฟล์ด้วยแฮช SHA256 ดังนั้น ก่อนที่คุณจะสามารถทำการเรียก API ได้ คุณจะต้องคำนวณแฮชสำหรับไฟล์คงที่แต่ละไฟล์ก่อนโดย Gzipping ไฟล์ จากนั้นรับแฮช SHA256 ของไฟล์ที่บีบอัดใหม่แต่ละไฟล์

ดำเนินการต่อจากตัวอย่างของเรา สมมติว่าคุณต้องการปรับใช้สามไฟล์ในเวอร์ชันใหม่: file1 , file2 และ file3

  1. Gzip ไฟล์:

    gzip file1 && gzip file2 && gzip file3

    ตอนนี้คุณมีไฟล์บีบอัดสามไฟล์ file1.gz , file2.gz และ file3.gz

  2. รับแฮช SHA256 ของไฟล์บีบอัดแต่ละไฟล์:

    cat file1.gz | openssl dgst -sha256
    
    66d61f86bb684d0e35f94461c1f9cf4f07a4bb3407bfbd80e518bd44368ff8f4
    
    cat file2.gz | openssl dgst -sha256
    
    490423ebae5dcd6c2df695aea79f1f80555c62e535a2808c8115a6714863d083
    
    cat file3.gz | openssl dgst -sha256
    
    59cae17473d7dd339fe714f4c6c514ab4470757a4fe616dfdb4d81400addf315
    

    ตอนนี้คุณมีแฮช SHA256 สามไฟล์จากไฟล์บีบอัดทั้งสามไฟล์

  3. ส่งแฮชทั้งสามนี้ในคำขอ API ไปยังตำแหน่งข้อมูล versions.populateFiles แสดงรายการแฮชแต่ละรายการตามเส้นทางที่ต้องการสำหรับไฟล์ที่อัพโหลด (ในตัวอย่างนี้ /file1 , /file2 และ /file3 )

    ตัวอย่างเช่น:

    คำสั่ง cURL

    $ curl -H "Content-Type: application/json" \
             -H "Authorization: Bearer ACCESS_TOKEN" \
             -d '{
                   "files": {
                     "/file1": "66d61f86bb684d0e35f94461c1f9cf4f07a4bb3407bfbd80e518bd44368ff8f4",
                     "/file2": "490423ebae5dcd6c2df695aea79f1f80555c62e535a2808c8115a6714863d083",
                     "/file3": "59cae17473d7dd339fe714f4c6c514ab4470757a4fe616dfdb4d81400addf315"
                   }
                 }' \
    https://firebasehosting.googleapis.com/v1beta1/sites/SITE_ID/versions/VERSION_ID:populateFiles
    

    คำขอ HTTPS ดิบ

    Host: firebasehosting.googleapis.com
    
    POST /v1beta1/sites/SITE_ID/versions/VERSION_ID:populateFiles HTTP/1.1
    Authorization: Bearer ACCESS_TOKEN
    Content-Type: application/json
    Content-Length: 181
    
    {
      "files": {
        "/file1": "66d61f86bb684d0e35f94461c1f9cf4f07a4bb3407bfbd80e518bd44368ff8f4",
        "/file2": "490423ebae5dcd6c2df695aea79f1f80555c62e535a2808c8115a6714863d083",
        "/file3": "59cae17473d7dd339fe714f4c6c514ab4470757a4fe616dfdb4d81400addf315"
      }
    }
    

การเรียก API นี้ไปยัง versions.populateFiles ส่งคืน JSON ต่อไปนี้:

{
  "uploadRequiredHashes": [
    "490423ebae5dcd6c2df695aea79f1f80555c62e535a2808c8115a6714863d083",
    "59cae17473d7dd339fe714f4c6c514ab4470757a4fe616dfdb4d81400addf315"
  ],
  "uploadUrl": "https://upload-firebasehosting.googleapis.com/upload/sites/SITE_ID/versions/VERSION_ID/files"
}

คำตอบนี้รวมถึง:

  • แฮชของแต่ละไฟล์ ที่ต้องการอัปโหลด ตัวอย่างเช่น ในตัวอย่างนี้ file1 ได้รับการอัปโหลดแล้วในเวอร์ชันก่อนหน้า ดังนั้นแฮชของไฟล์จึงไม่รวมอยู่ในรายการ uploadRequiredHashes

  • uploadUrl ที่เฉพาะเจาะจงสำหรับเวอร์ชันใหม่

ในขั้นตอนถัดไปเพื่ออัปโหลดไฟล์ใหม่สองไฟล์ คุณจะต้องมีแฮชและ uploadURL จากการตอบกลับของ versions.populateFiles

ขั้นตอนที่ 5: อัปโหลดไฟล์ที่จำเป็น

คุณต้องอัปโหลดไฟล์ที่จำเป็นแต่ละไฟล์แยกกัน (ไฟล์เหล่านั้นซึ่งอยู่ในรายการ uploadRequiredHashes จากการตอบสนองของ versions.populateFiles ในขั้นตอนก่อนหน้า) สำหรับการอัปโหลดไฟล์เหล่านี้ คุณจะต้องมีแฮชของไฟล์และ uploadUrl จากขั้นตอนก่อนหน้า

  1. เพิ่ม เครื่องหมายทับ และ แฮชของไฟล์ ต่อท้าย uploadUrl เพื่อสร้าง URL เฉพาะไฟล์ในรูปแบบ: https://upload-firebasehosting.googleapis.com/upload/sites/ SITE_ID /versions/ VERSION_ID /files/ FILE_HASH

  2. อัปโหลดไฟล์ที่จำเป็นทั้งหมดทีละไฟล์ (ในตัวอย่างนี้ เฉพาะ file2.gz และ file3.gz ) ไปยัง URL เฉพาะไฟล์โดยใช้ชุดคำขอ

    ตัวอย่างเช่น หากต้องการอัปโหลดไฟล์บีบอัด file2.gz :

    คำสั่ง cURL

    curl -H "Authorization: Bearer ACCESS_TOKEN" \
           -H "Content-Type: application/octet-stream" \
           --data-binary @./file2.gz \
    https://upload-firebasehosting.googleapis.com/upload/sites/SITE_ID/versions/VERSION_ID/files/FILE_HASH
    

    คำขอ HTTPS ดิบ

    Host: upload-firebasehosting.googleapis.com
    
    POST /upload/sites/SITE_ID/versions/VERSION_ID/files/FILE_HASH HTTP/1.1
    Authorization: Bearer ACCESS_TOKEN
    Content-Type: application/octet-stream
    Content-Length: 500
    
    content-of-file2.gz
    

การอัปโหลดที่สำเร็จจะส่งคืนการตอบสนอง HTTPS 200 OK

ขั้นตอนที่ 6: อัปเดตสถานะของเวอร์ชันเป็น FINALIZED

หลังจากที่คุณอัปโหลดไฟล์ทั้งหมดที่แสดงอยู่ในการตอบกลับของ versions.populateFiles แล้ว คุณสามารถอัปเดตสถานะของเวอร์ชันของคุณเป็น FINALIZED ได้

เรียกจุดสิ้นสุด versions.patch ด้วยฟิลด์ status ในคำขอ API ของคุณที่ตั้งค่าเป็น FINALIZED

ตัวอย่างเช่น:

คำสั่ง cURL

curl -H "Content-Type: application/json" \
       -H "Authorization: Bearer ACCESS_TOKEN" \
       -X PATCH \
       -d '{"status": "FINALIZED"}' \
https://firebasehosting.googleapis.com/v1beta1/sites/SITE_ID/versions/VERSION_ID?update_mask=status

คำขอ HTTPS ดิบ

Host: firebasehosting.googleapis.com

PATCH /v1beta1/sites/SITE_ID/versions/VERSION_ID?update_mask=status HTTP/1.1
Authorization: Bearer ACCESS_TOKEN
Content-Type: application/json
Content-Length: 23

{"status": "FINALIZED"}

การเรียก API นี้ไปที่ versions.patch จะส่งคืน JSON ต่อไปนี้ ตรวจสอบว่า status ได้รับการอัปเดตเป็น FINALIZED แล้ว

{
  "name": "sites/SITE_ID/versions/VERSION_ID",
  "status": "FINALIZED",
  "config": {
    "headers": [{
      "glob": "**",
      "headers": {"Cache-Control": "max-age=1800"}
    }]
  },
  "createTime": "2018-12-02T13:41:56.905743Z",
  "createUser": {
    "email": "SERVICE_ACCOUNT_EMAIL@SITE_ID.iam.gserviceaccount.com"
  },
  "finalizeTime": "2018-12-02T14:56:13.047423Z",
  "finalizeUser": {
    "email": "USER_EMAIL@DOMAIN.tld"
  },
  "fileCount": "5",
  "versionBytes": "114951"
}

ขั้นตอนที่ 7: เผยแพร่เวอร์ชันสำหรับการปรับใช้

ตอนนี้คุณมีเวอร์ชันที่สรุปผลแล้ว ให้เผยแพร่เพื่อนำไปใช้งาน สำหรับขั้นตอนนี้ คุณต้องสร้าง Release ลีสของคุณซึ่งมีการกำหนดค่าโฮสติ้งและไฟล์เนื้อหาทั้งหมดสำหรับเวอร์ชันใหม่ของคุณ

เรียกปลายทาง releases.create เพื่อสร้างรุ่นของคุณ

ตัวอย่างเช่น:

คำสั่ง cURL

curl -H "Authorization: Bearer ACCESS_TOKEN" \
       -X POST
https://firebasehosting.googleapis.com/v1beta1/sites/SITE_ID/releases?versionName=sites/SITE_ID/versions/VERSION_ID

คำขอ HTTPS ดิบ

Host: firebasehosting.googleapis.com

POST /v1beta1/sites/SITE_ID/releases?versionName=sites/SITE_ID/versions/VERSION_ID HTTP/1.1
Authorization: Bearer ACCESS_TOKEN

การเรียก API นี้ไปที่ releases.create ส่งคืน JSON ต่อไปนี้:

{
  "name": "sites/SITE_ID/releases/RELEASE_ID",
  "version": {
    "name": "sites/SITE_ID/versions/VERSION_ID",
    "status": "FINALIZED",
    "config": {
    "headers": [{
      "glob": "**",
      "headers": {"Cache-Control": "max-age=1800"}
    }]
  }
  },
  "type": "DEPLOY",
  "releaseTime": "2018-12-02T15:14:37Z"
}

การกำหนดค่าโฮสติ้งและไฟล์ทั้งหมดสำหรับเวอร์ชันใหม่ควรถูกปรับใช้กับไซต์ของคุณแล้ว และคุณสามารถเข้าถึงไฟล์ของคุณโดยใช้ URL:

  • https:// SITE_ID .web.app/file1
  • https:// SITE_ID .web.app/file2
  • https:// SITE_ID .web.app/file3

ไฟล์เหล่านี้ยังสามารถเข้าถึงได้จาก URL ที่เชื่อมโยงกับโดเมน SITE_ID .firebaseapp.com ของคุณ

คุณยังสามารถดูรุ่นใหม่ของคุณแสดงอยู่ใน แดชบอร์ดโฮสติ้ง ของคอนโซล Firebase