Expo 推送通知完整教程:从权限到真机第一条通知

发布时间:2026/8/30 14:32:00

Expo 推送通知完整教程:从权限到真机第一条通知
Expo 推送通知完整教程从权限到真机第一条通知【免费下载链接】expoAn open-source framework for making universal native apps with React. Expo runs on Android, iOS, and the web.项目地址: https://gitcode.com/GitHub_Trending/ex/expo用户装了你的 App 之后很久没再打开你希望它能主动喊一声把人找回来——这正是推送通知要解决的问题。在 Expo 体系里这件事由expo-notifications库承担应用先向用户要权限再拿到一个设备专属的令牌服务端凭令牌把消息发下去最终由操作系统把横幅显示在屏幕上。这条链路里每一环都有对应的配置和代码下面按顺序拆开讲。 先把链路讲清楚权限、令牌、下发、本地处理整个过程分四步理解了它后面排错就不慌。第一步是权限。iOS 和 Android 都规定 App 不能默认弹通知必须先征求用户同意。所以代码里要先查询权限状态未授权就发起请求用户拒绝的话后面全部免谈。第二步是设备令牌。权限通过后App 向系统注册自己的推送通道系统返回一串唯一标识。在 Expo 里你拿到的是ExpoPushToken底层对应 Android 的 FCM 令牌和 iOS 的 APNs 令牌它相当于这台设备在推送网络里的门牌号。把这个令牌存到你的服务端以后发消息就发给它。第三步是消息下发。你把令牌和消息内容标题、正文、附加数据POST 给 Expo 推送服务的接口Expo 服务器再把消息转交给 FCM 或 APNs由厂商通道把消息推到设备。这一步是服务端行为和 App 本身跑不跑没关系。第四步是本地处理它取决于 App 当前处于什么状态。App 在前台时通知不会直接弹出来而是交给你注册的 JS 监听器由你决定怎么展示横幅、角标、还是完全自定义 UIApp 在后台或已被杀掉时则由操作系统直接弹横幅和通知中心条目App 本身不参与渲染。用户点击通知时无论哪种状态都会再触发一个响应监听器这是做深链跳转的入口。更细的状态行为表可以参考 通知类型与行为说明。 动手前的准备装依赖、配插件、备凭据下面四样东西在写第一行业务代码之前就要准备好缺一样都会在最意想不到的地方报错。1. 安装 JS 侧依赖。expo-notifications是通知 API 本体expo-device用来判断当前是真机还是模拟器expo-constants用来读取项目配置后面取projectId会用到npx expo install expo-notifications expo-device expo-constants2. 在app.json里注册插件。这一行让 Expo 在生成原生工程时自动写好通知相关的原生配置省掉手改 Android 和 iOS 工程的步骤{ expo: { plugins: [expo-notifications] } }3. Android 凭据FCM。Google 规定只有持 Firebase 项目凭据的 App 才能收 FCM 推送。你需要一个 Firebase 项目的google-services.json通过eas credentials上传到 Expo 项目。具体步骤见 FCM 凭据配置文档。4. iOS 凭据APNs 推送密钥。需要 Apple Developer 账号推送密钥push key由 EAS 在eas credentials流程里帮你生成和管理。如果凭据过期或丢失走同一流程重新生成即可。两个平台凭据的完整说明在 推送配置文档遇到开发模式能收、正式包收不到这类问题八成是这一节没做对。另外提一句如果只是想先看一个能跑的通知示例仓库里带了一个现成的apps/notification-tester/应用可以克隆下来跑一遍再回来写自己的代码git clone https://gitcode.com/GitHub_Trending/ex/expo 跑通第一条通知的最小步骤第 1 步构建开发包上真机。这里有个绕不开的限制——推送通知必须在真机上验证。模拟器没有真实的推送通道SDK 53 起 Expo Go 也不内置推送能力所以要用开发构建development build或正式构建别指望 Expo Go 能跑通。Android 本地开发构建可以这样起npx expo run:androidiOS 同理npx expo run:ios要发版就eas build。第 2 步拿令牌。这段代码做三件事确认是真机、拿到权限、换取ExpoPushToken。启动 App 时执行一次把返回的令牌存到后端即可。import * as Notifications from expo-notifications; import * as Device from expo-device; import Constants from expo-constants; async function registerForPushNotificationsAsync() { if (!Device.isDevice) { alert(必须在真机上测试推送); return; } const { status } await Notifications.getPermissionsAsync(); const finalStatus status granted ? status : (await Notifications.requestPermissionsAsync()).status; if (finalStatus ! granted) { alert(未获得通知权限); return; } const projectId Constants.expoConfig?.extra?.eas?.projectId ?? Constants.easConfig?.projectId; return (await Notifications.getExpoPushTokenAsync({ projectId })).data; }第 3 步发一条消息。拿到令牌后任何能发 HTTP 请求的地方都可以把它 POST 给 Expo 推送接口不需要自建推送服务器。这里顺手在 App 里写个按钮发给自己async function sendPushNotification(token) { const res await fetch(https://exp.host/--/api/v2/push/send, { method: POST, headers: { Content-Type: application/json }, body: JSON.stringify({ to: token, title: 你好, body: 第一条推送 }), }); console.log(await res.json()); // 返回 status确认消息已被接受 }返回的status: ok只说明 Expo 服务收到了不代表设备已显示真正的投递结果要看推送回执详见 发送通知文档。第 4 步验证。除了从 App 内部发你也可以用 Expo 的通知工具网页发测试消息方便把发和收分开调试。把设备切到后台等几秒横幅应该就会弹出来。⚠️ 真机上最容易卡住的几个地方现象在模拟器上死活收不到通知。原因模拟器的推送通道不完整且 Expo Go 从 SDK 53 起不支持推送。 解法用开发构建 真机。这不是代码问题不用改任何逻辑。现象getExpoPushTokenAsync迟迟不返回。原因iOS 上取令牌依赖设备与 APNs 服务器的注册设备没网、飞行模式、或网络环境异常时它会一直挂着Apple 明确说这不是错误状态。 解法先确认设备网络正常再重试App 侧不要把它当异常打断流程。现象开发时能收到eas build的正式包收不到。原因正式包用的是你项目的凭据而开发模式可能还在用 Expo 侧的默认配置。生产凭据没配好下发直接失败。 解法跑eas credentials补齐对应平台的推送凭据iOS 是 push keyAndroid 是 FCM然后重新构建。现象Android 上通知时灵时不灵。原因发送时的priority太低系统会按正常优先级处理可能被压缩。 解法在消息体里加priority: highAndroid 的即时展示概率最高。现象Android 小图标是一个灰色或白色方块。原因你提供的通知小图标不符合 Google 的硬性要求——必须是纯白图形加透明背景。 解法换一张纯白小图标资源这个限制和 Expo 无关是系统层面的。更多长尾问题比如 iOS 报No valid aps-environment entitlement都收录在 推送 FAQ。 三个常用的进阶用法点击通知跳转到对应页面。用户点通知时触发响应监听器把跳转参数放在消息的data字段里点击后从响应里读出来即可const sub Notifications.addNotificationResponseReceivedListener(response { const data response.notification.request.content.data; if (data?.screen) router.navigate(data.screen); }); return () sub.remove();控制 App 在前台时的展示行为。默认行为可以完全接管比如只弹横幅不响铃Notifications.setNotificationHandler({ handleNotification: async () ({ shouldShowBanner: true, shouldShowList: true, shouldPlaySound: false, shouldSetBadge: false, }), });自定义声音。把音频文件打进应用资源然后在发送的消息里指定sound字段iOS 用不带扩展名的文件名。想先听效果可以参考文档里的 自定义声音章节。监听器的完整参数和返回结构建议通读一遍 接收通知文档尤其是 App 被杀后靠点击通知冷启动的场景要尽早注册监听器。推送这条链路环环相扣权限、令牌、凭据、构建方式任何一环缺位都会表现为收不到。把上面四步走通后剩下要做的就是按 App 的实际需求去调展示和跳转逻辑。细节问题可以直接查 推送配置 和 FAQ 两篇官方文档。【免费下载链接】expoAn open-source framework for making universal native apps with React. Expo runs on Android, iOS, and the web.项目地址: https://gitcode.com/GitHub_Trending/ex/expo创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

Adapter+持续学习:恶意流量识别少样本增量更新的新思路

Adapter+持续学习:恶意流量识别少样本增量更新的新思路

2026/8/30 14:32:00

打开你的安全运营后台,昨天刚上线的新攻击检测模型,今天收到告警:某个老威胁家族的检出率从 93% 掉到了 71%。你以为是特征没对齐,排查了半天发现,问题出在“模型更新”本身。这不是运维失误,而是深度学习模…

Remotion 模板市场完整指南:发现、选择并使用社区视频模板

Remotion 模板市场完整指南:发现、选择并使用社区视频模板

2026/8/30 14:22:00

Remotion 模板市场完整指南:发现、选择并使用社区视频模板 【免费下载链接】remotion 🎥 Make videos programmatically with React 项目地址: https://gitcode.com/GitHub_Trending/re/remotion Remotion 是一款基于 React 的可编程视频创建工具…

本地智能体硬件成token入口:端云协同与推理技术实践

本地智能体硬件成token入口:端云协同与推理技术实践

2026/8/30 14:22:00

1. 从一条行业观点说起:Perplexity CEO 为什么押注本地智能体硬件最近看到一条消息,Perplexity CEO 在公开交流中提到,本地智能体硬件将成为前沿 token 的入口。这条判断在 AI 开发者和硬件工程师圈子里讨论度都不低,有人认为是在…

【研发类-架构设计Skills】cqrs-implementation 技能

【研发类-架构设计Skills】cqrs-implementation 技能

2026/8/30 15:22:04

实现命令查询职责分离(CQRS)以构建可扩展架构。在分离读写模型、优化查询性能或构建事件溯源系统时使用。 技能概述 cqrs-implementation 技能提供了实现CQRS(命令查询职责分离)模式的综合指南。CQRS是一种架构模式,通过分离读取和写入操作来优化性能、可扩展性和安全性。该技…

博途V16 HSP0205安装失败解决方案与1024×768 HMI适配实践

博途V16 HSP0205安装失败解决方案与1024×768 HMI适配实践

2026/8/30 15:22:04

简介:本资源是掌讯8219车机平台专用的官方ROM刷机包,面向汽车电子工程师、车机系统维护人员及具备一定刷机经验的车主用户,用于9.7英寸竖屏(1024768分辨率)设备的系统升级、故障恢复或功能增强。压缩包共18个文件&…

千问想学豆包?大模型API接入与产品化路径深度解析

千问想学豆包?大模型API接入与产品化路径深度解析

2026/8/30 15:22:04

最近有一个现象值得聊聊:千问App开始对部分功能探索收费,而豆包这边,从清理C盘指令到15秒视频生成,再到各类插件和开放API,始终维持“免费高频”的产品姿态。两款头部大模型产品,一个往“付费服务”方向试探…

南昌高三全年补习学校

南昌高三全年补习学校

2026/8/30 15:22:04

南昌高三全年补习学校哪家好?南昌金博教育封闭冲刺集训招生中 南昌金博教育是南昌本地一所专注于高三全年冲刺的封闭式补习学校,面向江西高三应届生及复读生,提供食宿一体、封闭管理和小班分层教学服务。对于孩子成绩中等偏下、亟需集中冲刺补…

南昌高三全年冲刺机构哪家好

南昌高三全年冲刺机构哪家好

2026/8/30 15:22:04

南昌高三全年冲刺机构哪家好?家长最该关注这三点 南昌金博教育是南昌本地一所专注于高三全年冲刺的全日制集训学校,采用封闭管理模式,面向江西地区高三应届生及复读生招生。距离2025年高考仅剩半年不到,许多家长开始焦急&#xff…

TVA-World生成式具身智能:概念、原理、应用(6)

TVA-World生成式具身智能:概念、原理、应用(6)

2026/8/30 15:12:03

前沿技术探索:TVA智能体(简称TVA)TVA智能体(亦称“AI智能体视觉”或“TVA视觉智能体”)是依托Transformer架构与“因式智能体”理论构建的通用视觉技术体系。它有机融合深度强化学习(DRL)、卷积…

备战数据库管理工程师校招:索引、事务、备份恢复核心考点解析

备战数据库管理工程师校招:索引、事务、备份恢复核心考点解析

2026/8/30 0:01:07

每年校招季我都会接触不少准备数据库方向笔试的同学,看到最多的状态就是:简历上写着“熟悉 MySQL”“了解索引优化”,一碰到数据库管理工程师的笔试卷,却在索引、事务、锁、备份恢复这些题目上翻车。网易这套 2018 校园招聘数据库…

数字电路时序基石:深入理解建立时间与保持时间

数字电路时序基石:深入理解建立时间与保持时间

2026/8/30 0:01:07

1. 这不是“背公式”的事:时间参数到底在约束什么你翻过数字电路教材,一定见过这两个词:建立时间(Setup Time)和保持时间(Hold Time)。它们常被并列写在触发器(Flip-Flop&#xff09…

蓝桥杯国赛超声波测距机:从单片机原理到嵌入式系统实战

蓝桥杯国赛超声波测距机:从单片机原理到嵌入式系统实战

2026/8/30 0:01:07

1. 项目缘起:从赛题到超声波测距机的诞生第八届蓝桥杯单片机设计与开发国赛的题目,我至今记忆犹新。它没有直接给出一个花哨的名字,而是用“超声波测距机”这个朴实无华的功能描述,精准地勾勒出了考核的核心。对于当时备赛的我而言…

备战数据库管理工程师校招:索引、事务、备份恢复核心考点解析

备战数据库管理工程师校招:索引、事务、备份恢复核心考点解析

2026/8/30 0:01:07

每年校招季我都会接触不少准备数据库方向笔试的同学,看到最多的状态就是:简历上写着“熟悉 MySQL”“了解索引优化”,一碰到数据库管理工程师的笔试卷,却在索引、事务、锁、备份恢复这些题目上翻车。网易这套 2018 校园招聘数据库…

数字电路时序基石:深入理解建立时间与保持时间

数字电路时序基石:深入理解建立时间与保持时间

2026/8/30 0:01:07

1. 这不是“背公式”的事:时间参数到底在约束什么你翻过数字电路教材,一定见过这两个词:建立时间(Setup Time)和保持时间(Hold Time)。它们常被并列写在触发器(Flip-Flop&#xff09…

蓝桥杯国赛超声波测距机:从单片机原理到嵌入式系统实战

蓝桥杯国赛超声波测距机:从单片机原理到嵌入式系统实战

2026/8/30 0:01:07

1. 项目缘起:从赛题到超声波测距机的诞生第八届蓝桥杯单片机设计与开发国赛的题目,我至今记忆犹新。它没有直接给出一个花哨的名字,而是用“超声波测距机”这个朴实无华的功能描述,精准地勾勒出了考核的核心。对于当时备赛的我而言…

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

2026/8/28 7:35:26

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…

导师推荐!2026最新AI论文工具测评与实用推荐

导师推荐!2026最新AI论文工具测评与实用推荐

2026/8/28 7:34:51

2026年真正好用的AI论文工具,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

告别游戏崩溃:XCOM 2模组管理器的智能革命

告别游戏崩溃:XCOM 2模组管理器的智能革命

2026/8/28 7:34:35

告别游戏崩溃:XCOM 2模组管理器的智能革命 【免费下载链接】xcom2-launcher The Alternative Mod Launcher (AML) is a replacement for the default game launchers from XCOM 2 and XCOM Chimera Squad. 项目地址: https://gitcode.com/gh_mirrors/xc/xcom2-lau…