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

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

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

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

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

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

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

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

แสดง PWA ผ่าน HTTPS

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

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

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

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

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

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

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

Firebase UI รองรับผู้ให้บริการการลงชื่อเข้าใช้หลายราย เพิ่มขั้นตอนการตรวจสอบสิทธิ์ 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 จะแสดงเนื้อหาของคุณบน CDN ทั่วโลกและเข้ากันได้กับ HTTP/2 เมื่อโฮสต์เนื้อหาแบบคงที่ด้วย Firebase เราจะกำหนดค่าทั้งหมดนี้ให้คุณ คุณไม่ต้องดำเนินการใดๆ เพิ่มเติมเพื่อใช้ประโยชน์��ากบริการนี้

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

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

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

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

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

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

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

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

คุณสามารถโหลดการตรวจสอบสิทธิ์ Firebase ก่อนได้โดยใช้ตัวจัดการแพ็กเกจ เช่น Webpack

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

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

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

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

ผู้ใช้ของคุณต้องการทราบว่าคุณเปิดตัวฟีเจอร์ใหม่สำหรับแอปเมื่อใด และคุณต้องการ รักษาการมีส่วนร่วมของผู้ใช้ให้สูงอยู่เสมอ ตั้งค่า 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);
    });