ใช้ Firebase ใน Progressive Web App (PWA)

Progressive Web App (PWA) เป็นเว็บแอปที่เป็นไปตาม หลักเกณฑ์ต่างๆ เพื่อให้ผู้ใช้ได้รับประสบการณ์การใช้งานที่น่าเชื่อถือ รวดเร็ว และน่าสนใจ

Firebase มีบริการมากมายที่ช่วยให้คุณเพิ่ม Progressive ได้อย่างมีประสิทธิภาพ ลงในแอปให้เป็นไปตามแนวทางปฏิบัติแนะนำหลายๆ ด้านของ PWA ได้แก่

แนวทางปฏิบัติแนะนำสำหรับ PWA บริการ Firebase จะช่วยคุณได้อย่างไร
ปลอดภัยหายห่วง
  • Firebase Hosting จัดสรร SSL ใบรับรองแบบไม่มีค่าใช้จ่ายสำหรับโดเมนที่กำหนดเองและ Firebase เริ่มต้น โดเมนย่อย
  • Firebase Authentication ช่วยให้คุณลงชื่อเข้าใช้สำหรับผู้ใช้ได้ ข้ามอุปกรณ์ได้อย่างปลอดภัย
  • FirebaseUI ใช้แนวทางปฏิบัติแนะนำสำหรับ ขั้นตอนการตรวจสอบสิทธิ์
ความเร็วในการโหลด
  • Firebase Hosting รองรับ HTTP/2 และแคชได้ ทั้งเนื้อหาแบบคงที่และแบบไดนามิกใน CDN ทั่วโลก
  • Firebase JavaScript SDK เป็นโมดูลย่อย และคุณสามารถ นำเข้าไลบรารีแบบไดนามิกเมื่อจำเป็น
ความยืดหยุ่นของเครือข่าย
  • เมื่อใช้ Cloud Firestore คุณจะจัดเก็บและเข้าถึง ข้อมูลแบบเรียลไทม์และออฟไลน์
  • Firebase Authentication รักษาการตรวจสอบสิทธิ์ของผู้ใช้ไว้ แม้ในขณะออฟไลน์
ดึงดูดผู้ใช้
  • Firebase Cloud Messaging ช่วยให้คุณส่งพุชได้ ข้อความไปยังผู้ใช้ของคุณ อุปกรณ์
  • คุณสามารถใช้ Cloud Functions for Firebase เพื่อดําเนินการอัตโนมัติ ข้อความเพื่อการมีส่วนร่วมซ้ำโดยอิงตามเหตุการณ์ระบบคลาวด์

หน้านี้นำเสนอภาพรวมเกี่ยวกับวิธีที่แพลตฟอร์ม Firebase จะช่วยคุณสร้าง PWA ที่ทันสมัยและมีประสิทธิภาพสูงโดยใช้ข้ามเบราว์เซอร์ของเรา Firebase JavaScript SDK

ไปที่ คู่มือเริ่มต้นใช้งาน เพื่อเพิ่ม Firebase ไปยังเว็บแอป

ปลอดภัย มั่นใจได้

ตั้งแต่การให้บริการเว็บไซต์ไปจนถึงการใช้ขั้นตอนการตรวจสอบสิทธิ์ ว่า PWA มีเวิร์กโฟลว์ที่ปลอดภัยและเชื่อถือได้

แสดง PWA ผ่าน HTTPS

บริการโฮสติ้งผู้ดำเนินการ

HTTPS ช่วยปกป้องความสมบูรณ์ของเว็บไซต์และปกป้องความเป็นส่วนตัว และ ความปลอดภัยของผู้ใช้ PWA ต้องแสดงผ่าน HTTPS

Firebase Hosting โดยค่าเริ่มต้น แสดงเนื้อหาของแอปผ่าน HTTPS คุณสามารถแสดงเนื้อหาได้โดยไม่มีค่าใช้จ่าย โดเมนย่อยของ Firebase หรือของคุณเอง custom domain บริการโฮสติ้งจะจัดสรรใบรับรอง SSL สำหรับโดเมนที่กำหนดเอง โดยอัตโนมัติและไม่มีค่าใช้จ่าย

เข้าชม คู่มือเริ่มต้นใช้งานสำหรับ Firebase Hosting เพื่อดูวิธีโฮสต์ PWA บนแพลตฟอร์ม Firebase

มีขั้นตอนการตรวจสอบสิทธิ์ที่ปลอดภัย

ขั้นตอนการตรวจสอบสิทธิ์ที่ปรับเปลี่ยนตามอุปกรณ์แบบดร็อปอิน

FirebaseUI จะระบุ ขั้นตอนการตรวจสอบสิทธิ์ที่ปรับเปลี่ยนตามอุปกรณ์แบบดรอปอินตาม Firebase Authentication อนุญาต เพื่อผสานรวมขั้นตอนการลงชื่อเข้าใช้ที่ซับซ้อนและปลอดภัยโดยไม่ต้องลงแรงมาก FirebaseUI จะปรับตามขนาดหน้าจออุปกรณ์ของผู้ใช้โดยอัตโนมัติ และทำตามแนวทางปฏิบัติแนะนำสำหรับขั้นตอนการตรวจสอบสิทธิ์

FirebaseUI รองรับผู้ให้บริการการลงชื่อเข้าใช้หลายราย เพิ่ม ขั้นตอนการตรวจสอบสิทธิ์ FirebaseUI ในแอปโดยใช้โค้ดเพียงไม่กี่บรรทัด ที่กำหนดค่าสำหรับผู้ให้บริการการลงชื่อเข้าใช้:

// FirebaseUI config.
var uiConfig = {
  signInSuccessUrl: 'URL',  // the URL to direct to upon success
  signInOptions: [
    firebase.auth.GoogleAuthProvider.PROVIDER_ID,
    firebase.auth.EmailAuthProvider.PROVIDER_ID
  ]
};

// Initialize the FirebaseUI widget using Firebase.
var ui = new firebaseui.auth.AuthUI(firebase.auth());
ui.start('#firebaseui-auth-container', uiConfig);

ไปที่เว็บไซต์ เอกสารของเราใน GitHub เพื่อ เรียนรู้เพิ่มเติมเกี่ยวกับตัวเลือกการกำหนดค่าต่างๆ ที่ FirebaseUI

ลงชื่อเข้าใช้ในอุปกรณ์ต่างๆ

ลงชื่อเข้าใช้อุปกรณ์ทุกเครื่อง

โดยการใช้ FirebaseUI เพื่อ ผสานรวม ลงชื่อเข้าใช้ด้วยการแตะเพียงครั้งเดียว แอปของคุณสามารถให้ผู้ใช้ลงชื่อเข้าใช้โดยอัตโนมัติ แม้แต่ในอุปกรณ์อื่นๆ ที่ผู้ใช้ ตั้งค่าด้วยข้อมูลเข้าสู่ระบบ สำหรับลงชื่อเข้าใช้

เปิดใช้การลงชื่อเข้าใช้แบบแตะครั้งเดียวโดยใช้ FirebaseUI โดยการเปลี่ยน 1 บรรทัดของ การกำหนดค่า:

// FirebaseUI config.
var uiConfig = {
  signInSuccessUrl: 'URL',  // the URL to direct to upon success
  authMethod: 'https://accounts.google.com',
  signInOptions: firebase.auth.GoogleAuthProvider.PROVIDER_ID,
  // Enable one-tap sign-in.
  credentialHelper: firebaseui.auth.CredentialHelper.GOOGLE_YOLO
};

ไปที่เว็บไซต์ เอกสารของเราใน GitHub เพื่อ เรียนรู้เพิ่มเติมเกี่ยวกับตัวเลือกการกำหนดค่าต่างๆ ที่ FirebaseUI

โหลดเร็ว

การมีประสิทธิภาพที่ยอดเยี่ยมจะช่วยปรับปรุงประสบการณ์ของผู้ใช้ ช่วยรักษาผู้ใช้ และ ช่วยเพิ่ม Conversion ประสิทธิภาพการทำงานที่ดีเยี่ยม เช่น "เวลาในการแก้ไข" ต่ำ การแสดงผลที่มีความหมายครั้งแรก" และ "เวลาในการโต้ตอบ" ถือเป็นข้อกำหนดที่สำคัญสำหรับ PWA

แสดงเนื้อหาแบบคงที่อย่างมีประสิทธิภาพ

บริการโฮสติ้งผู้ดำเนินการ

Firebase Hosting ให้บริการ เนื้อหา ผ่าน CDN ทั่วโลกและ เข้ากันได้กับ HTTP/2 เมื่อคุณโฮสต์เนื้อหาแบบคงที่กับ Firebase เราจะกำหนดค่า ทั้งหมดนี้สำหรับคุณ คุณไม่จำเป็นต้องดำเนินการใดๆ เพิ่มเติมเพื่อใช้ประโยชน์จาก ของบริการนี้

แคชเนื้อหาแบบไดนามิกของคุณ

เมื่อใช้ Firebase Hosting เว็บแอปของคุณสามารถแสดงเนื้อหาแบบไดนามิกที่ ฝั่งเซิร์ฟเวอร์โดย Cloud Functions หรือ Cloud Run แอปที่สร้างโดยใช้คอนเทนเนอร์ การใช้ คุณสามารถแคชเนื้อหาแบบไดนามิกของคุณบน CDN ทั่วโลกที่มีประสิทธิภาพด้วยโค้ดเพียงบรรทัดเดียว ได้แก่

res.set('Cache-Control', 'public, max-age=300, s-maxage=600');

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

ไปที่เอกสารประกอบของเราเพื่อดูวิธีที่คุณ สามารถแสดงเนื้อหาแบบไดนามิก (ขับเคลื่อนโดย Cloud Functions หรือ Cloud Run) และเปิดใช้การแคช CDN ด้วย Firebase Hosting

โหลดบริการเมื่อจำเป็นเท่านั้น

SDK JavaScript Firebase รายการสามารถ นำเข้าบางส่วน เพื่อให้การดาวน์โหลดเริ่มต้นมีขนาดน้อยที่สุด ใช้ประโยชน์จาก SDK แบบแยกนี้เพื่อ นำเข้าบริการ Firebase ที่แอปของคุณต้องใช้เมื่อจำเป็นเท่านั้น

เช่น หากต้องการเพิ่มความเร็วในการแสดงผลเริ่มต้นของแอป แอปจะโหลดครั้งแรกได้ Firebase Authentication จากนั้นเมื่อแอปของคุณ คุณโหลดบริการ Firebase อื่นๆ ได้ เช่น Cloud Firestore

เมื่อใช้ตัวจัดการแพ็กเกจ เช่น Webpack คุณอาจโหลด Firebase Authentication ก่อนได้:

import firebase from 'firebase/app';
import 'firebase/auth';

// Load Firebase project configuration.
const app = firebase.initializeApp(firebaseConfig);

จากนั้นเมื่อต้องการเข้าถึงชั้นข้อมูล ให้โหลด Cloud Firestore ไลบรารีที่ใช้ การนำเข้าแบบไดนามิก:

import('firebase/firestore').then(() => {
  const firestore = app.firestore();
  // Use Cloud Firestore ...
});

ความยืดหยุ่นของเครือข่าย

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

เข้าถึงข้อมูลแอปของคุณแบบออฟไลน์

Cloud Firestore รองรับ ความต่อเนื่องของข้อมูลแบบออฟไลน์ ซึ่งทำให้ชั้นข้อมูลของแอปทำงานแบบออฟไลน์ได้อย่างโปร่งใส รวมกับ Service Worker ไปยัง แคชเนื้อหาแบบคงที่ของคุณ PWA ของคุณจะทำงานแบบออฟไลน์ได้อย่างสมบูรณ์ คุณเปิดใช้ความต่อเนื่องของข้อมูลแบบออฟไลน์ได้ ด้วยโค้ดเพียงบรรทัดเดียว:

firebase.firestore().enablePersistence().then(() => {
  const firestore = app.firestore();
  // Use Cloud Firestore ...
});

รักษาสถานะการตรวจสอบสิทธิ์แบบออฟไลน์

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

firebase.auth().onAuthStateChanged((user) => {
  if (user) {
    // User is signed-in ...
  } else {
    // User is signed out ...
  }
});

ไปที่เอกสารประกอบของเราเพื่อเริ่มต้นใช้งาน Cloud Firestore และ Firebase Authentication

ดึงดูดผู้ใช้

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

แสดงข้อความ Push ต่อผู้ใช้ของคุณ

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

ทำให้ผู้ใช้กลับมามีส่วนร่วมอีกครั้งโดยอัตโนมัติ

การใช้ Cloud Functions for Firebase ส่งข้อความเพื่อการมีส่วนร่วมอีกครั้งของผู้ใช้โดยอิงจากเหตุการณ์ระบบคลาวด์ เช่น การเขียนข้อมูลไปยัง Cloud Firestore หรือ การลบบัญชีผู้ใช้ นอกจากนี้ คุณยังส่งข้อความ Push ไปยังผู้ใช้ได้ด้วย เมื่อผู้ใช้รายนั้นมีผู้ติดตามรายใหม่

// Send push notification when user gets a new follower.
exports.sendNotification = functions.database.ref('/followers/{userUID}/{followerUID}')
    .onWrite((change, context) => {
      const userUID = context.params.userUID;
      const followerUID = context.params.followerUID;

      const tokens = getUserDeviceTokens(userUID);
      const name = getUserDisplayName(followerUID);

      // Notification details.
      const payload = {
        notification: {
          title: 'You have a new follower!',
          body: `${name} is now following you.`
        }
      };
      return admin.messaging().sendToDevice(tokens, payload);
    });