【Expo Android 推播整合 04】 裝置註冊:請求通知權限與通知種類介紹

更新 發佈閱讀 9 分鐘

上一篇中,我們完成了:

  • 初始化 Firebase 與 Azure Notification Hub
  • 成功從 Firebase 取得 FCM token
  • 註冊裝置至 Azure Notification Hub(使用 FCM v1 註冊格式)

這篇我們的目標是:

  • 如何顯示 前景通知
  • 如何 請求 Android 13+ 的通知權限
  • 如何處理 通知點擊事件(背景與關閉狀態)
  • 打包 APK

先來認識手機中的 App 通知類型!

App 通知行為分類

vocus|新世代的創作平台

請求 Android 13 通知權限

從 Android 13(API 33)開始,需要向使用者明確請求 POST_NOTIFICATIONS 權限。

import { PermissionsAndroid, Platform } from 'react-native'

async function requestAndroidNotificationPermission() {
if (Platform.OS === 'android' && Platform.Version >= 33) {
const granted = await PermissionsAndroid.request(
PermissionsAndroid.PERMISSIONS.POST_NOTIFICATIONS
)
return granted === PermissionsAndroid.RESULTS.GRANTED
}
return true
}

顯示前景通知(App 開啟中)

當 App 正在使用中,通知不會由系統自動顯示。我們必須手動接收並彈出提醒。你也可以改用 Toast 或 Modal 呈現。

import messaging from '@react-native-firebase/messaging'
import { Alert } from 'react-native'

messaging().onMessage(async (remoteMessage) => {
Alert.alert('前景通知', remoteMessage.notification?.title || '收到通知')
})

背景狀態通知點擊

messaging().onNotificationOpenedApp((remoteMessage) => {
const messaage = remoteMessage?.data?.messaage
if (typeof messaage === 'string') {
Alert.alert('來自背景通知訊息:', messaage)
}
})

關閉狀態通知點擊

const initialMsg = await messaging().getInitialNotification()
const url = initialMsg?.data?.messaage
if (typeof messaage === 'string') {
Alert.alert('來自關閉通知訊息:', messaage)
}

完整程式碼

import { useEffect, useRef, useState } from 'react';
import { StyleSheet, PermissionsAndroid, Platform, Alert } from 'react-native';
import messaging from '@react-native-firebase/messaging';
import registerDeviceToAzure from '@/hooks/useAzureRegistration';

// 清理資源和取消事件監聽器
const cleanupFns = useRef<(() => void)[]>([])

export default function HomeScreen() {
useEffect(() => {
const setupPush = async () => {
try {
const granted = await requestAndroidNotificationPermission()
if (!granted) {
Alert.alert('未授權通知權限')
return
}

const authStatus = await messaging().requestPermission()
const enabled =
authStatus === messaging.AuthorizationStatus.AUTHORIZED ||
authStatus === messaging.AuthorizationStatus.PROVISIONAL

if (!enabled) {
Alert.alert('FCM 權限未啟用')
return
}

const token = await messaging().getToken()
await registerDeviceToAzure(token)

const unsub1 = messaging().onMessage(async (remoteMessage) => {
Alert.alert('前景通知', remoteMessage.notification?.title || '收到通知')
})

const unsub2 = messaging().onNotificationOpenedApp((remoteMessage) => {
const url = remoteMessage?.data?.url
if (typeof url === 'string') {
Alert.alert('背景點通知跳轉:', url)
}
})

const initialMsg = await messaging().getInitialNotification()
const url = initialMsg?.data?.url
if (typeof url === 'string') {
Alert.alert('關閉狀態點通知跳轉:', url)
}

cleanupFns.current = [unsub1, unsub2]
} catch (err) {
Alert.alert('推播初始化錯誤', JSON.stringify(err))
}
}

setupPush()

return () => {
cleanupFns.current.forEach((unsub) => unsub())
}
}, [])

return ( ...);
}


我們已經完成裝置註冊與 App 端的通知顯示了 🎉

因為我們之前已經有使用 prebuild 生成 android 資料夾,接著只要在終端機執行

./gradlew assembleRelease

打包成功後,release APK 會放在 release 資料夾中

專案資料夾/android/app/build/outputs/apk/release

將 app-release.apk 放進手機完成安裝,就可以使用 Azure 做測試發送囉~

vocus|新世代的創作平台

相同文章發布於我的部落格

留言
avatar-img
Ann Chou的沙龍
19會員
32內容數
從藝術領域轉職到前端工程師,喜歡書寫學習歷程和技術文件,掌握經驗與隨時提取的感覺很好。
Ann Chou的沙龍的其他內容
2025/05/22
這篇文章說明如何在 Expo 專案中,透過 Firebase Cloud Messaging(FCM)與 Azure Notification Hub 整合推播通知。內容涵蓋取得 FCM token、生成 SAS token,以及使用 REST API 將裝置註冊至 Azure 通知中樞的完整流程。
2025/05/22
這篇文章說明如何在 Expo 專案中,透過 Firebase Cloud Messaging(FCM)與 Azure Notification Hub 整合推播通知。內容涵蓋取得 FCM token、生成 SAS token,以及使用 REST API 將裝置註冊至 Azure 通知中樞的完整流程。
2025/04/27
這篇文章說明如何在 Windows 電腦上設定 Android 推播通知,包含使用 Expo 串接 Firebase 和 Azure 的步驟。文章涵蓋 Firebase 和 Azure 的設定,以及 Android Studio 和 JDK 的配置。
2025/04/27
這篇文章說明如何在 Windows 電腦上設定 Android 推播通知,包含使用 Expo 串接 Firebase 和 Azure 的步驟。文章涵蓋 Firebase 和 Azure 的設定,以及 Android Studio 和 JDK 的配置。
2025/04/20
介紹在 React Native / Expo 中實作推播通知的方式,並比較使用 Expo Notifications 與整合 Firebase Cloud Messaging(FCM)或 Azure Notification Hubs 的差異。
2025/04/20
介紹在 React Native / Expo 中實作推播通知的方式,並比較使用 Expo Notifications 與整合 Firebase Cloud Messaging(FCM)或 Azure Notification Hubs 的差異。
看更多
你可能也想看
Thumbnail
背景:從冷門配角到市場主線,算力與電力被重新定價   小P從2008進入股市,每一個時期的投資亮點都不同,記得2009蘋果手機剛上市,當時蘋果只要在媒體上提到哪一間供應鏈,隔天股價就有驚人的表現,當時光學鏡頭非常熱門,因為手機第一次搭上鏡頭可以拍照,也造就傳統相機廠的殞落,如今手機已經全面普及,題
Thumbnail
背景:從冷門配角到市場主線,算力與電力被重新定價   小P從2008進入股市,每一個時期的投資亮點都不同,記得2009蘋果手機剛上市,當時蘋果只要在媒體上提到哪一間供應鏈,隔天股價就有驚人的表現,當時光學鏡頭非常熱門,因為手機第一次搭上鏡頭可以拍照,也造就傳統相機廠的殞落,如今手機已經全面普及,題
Thumbnail
本課程學習如何提取共同屬性,透過 Style 樣式包,套用至每個按鈕。來提升佈局的可讀性和好維護性。
Thumbnail
本課程學習如何提取共同屬性,透過 Style 樣式包,套用至每個按鈕。來提升佈局的可讀性和好維護性。
Thumbnail
公告佈達看似簡單,但如何做好才是關鍵。 只有透過適時而有效的公告,才能確保重要訊息的及時傳達,促進員工的共識和配合 最終提升整體的運營效率,為企業持續發展注入動力!
Thumbnail
公告佈達看似簡單,但如何做好才是關鍵。 只有透過適時而有效的公告,才能確保重要訊息的及時傳達,促進員工的共識和配合 最終提升整體的運營效率,為企業持續發展注入動力!
Thumbnail
本課程學習如何在 Kotlin 程式碼檔案中,設定 ImageView 圖片元件,顯示本地端圖片。
Thumbnail
本課程學習如何在 Kotlin 程式碼檔案中,設定 ImageView 圖片元件,顯示本地端圖片。
Thumbnail
需求情境: 為了讓多人使用 App,必須有驗證程序,以識別特定使用者,存取各自擁有的資源。 解決方案: 引用 google 所提供的雲端服務平台 Firebase,其中有多種驗證功能可選用。基於個人對 google 的偏愛,決定先採用 google signin 的方法,實作 login lo
Thumbnail
需求情境: 為了讓多人使用 App,必須有驗證程序,以識別特定使用者,存取各自擁有的資源。 解決方案: 引用 google 所提供的雲端服務平台 Firebase,其中有多種驗證功能可選用。基於個人對 google 的偏愛,決定先採用 google signin 的方法,實作 login lo
Thumbnail
這是一場修復文化與重建精神的儀式,觀眾不需要完全看懂《遊林驚夢:巧遇Hagay》,但你能感受心與土地團聚的渴望,也不急著在此處釐清或定義什麼,但你的在場感受,就是一條線索,關於如何找著自己的路徑、自己的聲音。
Thumbnail
這是一場修復文化與重建精神的儀式,觀眾不需要完全看懂《遊林驚夢:巧遇Hagay》,但你能感受心與土地團聚的渴望,也不急著在此處釐清或定義什麼,但你的在場感受,就是一條線索,關於如何找著自己的路徑、自己的聲音。
Thumbnail
上次完成到基本的CRUD及權限控制,後面花了點時間把排序、分頁、圖表總覽的部分做完,其他細節是佈署上線,一般在公司內有專屬的部門處理,僅了解一下流程。
Thumbnail
上次完成到基本的CRUD及權限控制,後面花了點時間把排序、分頁、圖表總覽的部分做完,其他細節是佈署上線,一般在公司內有專屬的部門處理,僅了解一下流程。
Thumbnail
在這篇教學中,我們將學習如何使用 Google Apps Script 來連結 LINE Notify,以便於你的應用程式或自動化工作流程中發送通知。LINE Notify 是 LINE 提供的服務,可以讓你透過 LINE 帳號來發送自訂的通知訊息。
Thumbnail
在這篇教學中,我們將學習如何使用 Google Apps Script 來連結 LINE Notify,以便於你的應用程式或自動化工作流程中發送通知。LINE Notify 是 LINE 提供的服務,可以讓你透過 LINE 帳號來發送自訂的通知訊息。
Thumbnail
本課程學習如何使用 Intent 簡單跳頁,切換兩個 Activity。
Thumbnail
本課程學習如何使用 Intent 簡單跳頁,切換兩個 Activity。
Thumbnail
本文章將介紹如何在LINE Notify上設定及使用權杖(access token)來進行通知功能。透過此API,可以使用curl或JAVA CODE來讓結果顯示在Line上面,達到及時的通知效果。
Thumbnail
本文章將介紹如何在LINE Notify上設定及使用權杖(access token)來進行通知功能。透過此API,可以使用curl或JAVA CODE來讓結果顯示在Line上面,達到及時的通知效果。
Thumbnail
5 月將於臺北表演藝術中心映演的「2026 北藝嚴選」《海妲・蓋柏樂》,由臺灣劇團「晃晃跨幅町」製作,本文將以從舞台符號、聲音與表演調度切入,討論海妲・蓋柏樂在父權社會結構下的困境,並結合榮格心理學與馮.法蘭茲對「阿尼姆斯」與「永恆少年」原型的分析,理解女人何以走向精神性的操控、毀滅與死亡。
Thumbnail
5 月將於臺北表演藝術中心映演的「2026 北藝嚴選」《海妲・蓋柏樂》,由臺灣劇團「晃晃跨幅町」製作,本文將以從舞台符號、聲音與表演調度切入,討論海妲・蓋柏樂在父權社會結構下的困境,並結合榮格心理學與馮.法蘭茲對「阿尼姆斯」與「永恆少年」原型的分析,理解女人何以走向精神性的操控、毀滅與死亡。
Thumbnail
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
Thumbnail
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News