wordpress 文章内链插件seo外链
2026/1/21 19:14:02 网站建设 项目流程
wordpress 文章内链插件,seo外链,信阳网站建设招聘,潍坊建设网站的公司电话Expo 中集成推送通知#xff1a;从零到上线的实战指南 你有没有遇到过这样的场景#xff1f; 用户下载了你的 App#xff0c;用了一次就再也没打开过。你想提醒他“别忘了还有未完成的任务”#xff0c;或者“你的订单已发货#xff0c;请注意查收”——但除了发邮件、短…Expo 中集成推送通知从零到上线的实战指南你有没有遇到过这样的场景用户下载了你的 App用了一次就再也没打开过。你想提醒他“别忘了还有未完成的任务”或者“你的订单已发货请注意查收”——但除了发邮件、短信似乎没有更直接的方式。这时候推送通知Push Notification就成了唤醒沉默用户的“最后一公里”。在 React Native 开发中尤其是使用Expo的项目里实现跨平台推送本可以很简单。但很多开发者却被卡在第一步拿不到 Token、收不到通知、真机测试失败……最终只能放弃或选择“脱壳”走原生路线。本文不讲理论堆砌而是带你手把手打通 Expo 推送通知的完整链路——从环境配置、权限申请、获取令牌到后端调用、真机验证、常见坑点排查全程基于最新 Expo SDK 和 EAS Build 实践确保你在 30 分钟内跑通第一条推送。为什么选 Expo 做推送一个对比就够说明问题能力项手动集成 FCM APNs传统 RN使用expo-notifications是否需要写原生代码是Java / Swift否配置文件修改多达 5 个以上如google-services.json,Info.plist无需手动改获取设备 Token 的代码量至少 2 套逻辑iOS/Android 分开处理一行函数调用后端发送接口两套 API分别对接 FCM 和 APNs一套 HTTPS 接口统一发送是否支持托管构建无 eject否✅ 完全支持看到没如果你不想为了一个功能就把整个项目“炸掉重练”又希望快速上线可用的通知系统Expo 是目前最轻量、最高效的解决方案。它把 iOS 的 APNs 和 Android 的 FCM 全部封装成一个 JS 接口你只需要关心一件事怎么拿到那个叫Expo Push Token的字符串并把它交给服务器。第一步装包 引入模块别跳这步很多人因为版本不对后面全白搭。npx expo install expo-notifications✅ 要求- Expo SDK ≥ 49推荐使用最新版- 已登录eas-cli并创建过项目- 使用npx expo而非旧版expo-cli安装完成后在任意组件中引入import * as Notifications from expo-notifications; import { useEffect } from react;第二步请求权限 获取推送令牌最关键一步这是整个流程的核心。Token 拿不到后面全白费。async function registerForPushNotifications() { // 1. 请求通知权限 const { status } await Notifications.requestPermissionsAsync(); if (status ! granted) { alert(请开启通知权限以接收重要提醒); return null; } // 2. 获取 Expo 托管的推送令牌 try { const tokenData await Notifications.getExpoPushTokenAsync({ projectId: process.env.EXPO_PUBLIC_PROJECT_ID, }); console.log(✅ 成功获取 Push Token:, tokenData.data); return tokenData.data; // 返回纯字符串 } catch (error) { console.error(❌ 获取 Token 失败:, error); return null; } }关键细节解析requestPermissionsAsync()会弹出系统级授权框iOS 弹窗 / Android 权限对话框必须由用户主动同意。getExpoPushTokenAsync()这个方法是“魔法之源”。它会自动判断平台iOS 还是 Android向 Expo 云端请求一个唯一的、可路由的推送地址。projectId非常重要必须与你在 expo.dev 上创建的 EAS 项目 ID 一致否则返回无效 token。 小技巧如何查看你的 Project ID打开app.json或app.config.js找到json extra: { eas: { projectId: xxxxxxxx-yyyy-zzzz-aaaa-1234567890ab } }把它写进.env文件env EXPO_PUBLIC_PROJECT_IDxxxxxxxx-yyyy-zzzz-aaaa-1234567890ab第三步监听通知事件让用户点击通知能跳转光收到通知还不够用户点了通知之后要能响应才行。我们用两个监听器来捕获不同状态下的行为useEffect(() { // 当前应用在前台时收到通知 const onReceive Notifications.addNotificationReceivedListener(notification { console.log( 收到通知前台:, notification); // 可在此播放声音、显示横幅等 }); // 用户点击通知无论后台还是关闭状态 const onPress Notifications.addNotificationResponseReceivedListener(response { const data response.notification.request.content.data; console.log( 用户点击通知携带数据:, data); // 示例根据类型跳转页面 if (data.type order_update) { navigation.navigate(OrderDetail, { id: data.orderId }); } }); return () { onReceive.remove(); onPress.remove(); }; }, [navigation]);场景说明应用状态是否触发onReceive是否触发onPress前台运行✅❌除非用户点击后台挂起❌✅完全关闭❌✅冷启动进入所以记住所有深链跳转逻辑都应放在onPress回调中处理。第四步配置 app.json —— 很多人都忽略了这一点即使代码写对了如果app.json配置缺失依然拿不到有效 Token。以下是关键字段清单{ expo: { name: MyApp, slug: my-app, owner: your-username, // expo.dev 账号 version: 1.0.0, ios: { bundleIdentifier: com.company.myapp }, android: { package: com.company.myapp }, extra: { eas: { projectId: xxxxxxxx-yyyy-zzzz-aaaa-1234567890ab } } } }注意事项owner字段必须是你在 expo.dev 注册的用户名slug必须唯一用于生成 Experience ID格式为owner/slugprojectId必须和 EAS 项目匹配否则服务端无法识别你的应用包名iOS bundleId / Android package建议统一命名避免混淆。第五步真机测试模拟器不能用⚠️ 再强调一遍iOS Simulator 和大多数 Android Emulator 都无法获取有效的 Push Token。原因很简单它们没有真实的设备标识APNs Device Token / FCM Registration Token而 Expo 的 Token 是基于这些底层信息生成的。正确做法构建开发客户端Dev Buildbash eas build --profile development --platform all下载.apk或通过 TestFlight 安装到真机在手机上打开 App触发注册逻辑查看控制台输出是否成功打印 Token。 提示可以用console.log React Native Debugger或者上传日志到 Sentry、LogRocket 等工具查看。第六步后端发送通知用 curl 测试第一条消息当你成功拿到类似这样的 TokenExponentPushToken[xxxxxxxxxxxxxxxxxxxxxx]就可以开始测试发送了。方法一使用 Expo 提供的在线工具推荐新手访问 https://expo.dev/notifications填入- Push Token- Title / Body- Data可选 JSON点击 Send立刻就能看到手机弹出通知。方法二自己发 HTTP 请求适合接入业务系统curl -H Content-Type: application/json \ -X POST https://exp.host/--/api/v2/push/send \ -d { to: ExponentPushToken[xxxxxxxxxxxxxxxxxxxxxx], title: 你好世界, body: 这是你的第一条 Expo 推送, data: { type: welcome, id: 1 }, sound: default, priority: high }响应示例{ data: { status: ok, id: uuid-v1-like-id } }如果返回错误比如Device not registered说明 Token 已失效或格式不对。常见问题与避坑指南实战经验总结❌ 问题 1getExpoPushTokenAsync返回空或报错 “Device not registered”可能原因- 在模拟器上运行最常见-projectId不匹配- 未登录eas-cli或网络不通解决办法- 改用真机测试 ✅- 检查app.json中的extra.eas.projectId- 运行npx eas whoami确保已登录- 尝试重启 Metro 服务❌ 问题 2Token 能拿到但通知就是收不到排查思路检查 Token 格式正确格式应为ExponentPushToken[abc123...]如果只是纯字母数字串说明你用了低级封装库如expo-device错误调用请确认使用的是expo-notifications。确认是否每次启动都重新注册设备重装 App 后旧 Token 会失效。最佳实践是在每次冷启动时都调用一次注册函数并将新 Token 同步到服务器。iOS 特别注意- 用户可能在设置中关闭了通知- 首次请求权限被拒后不会再弹窗需引导用户手动开启- iOS 有时延迟较高尤其在开发环境下耐心等几分钟。Android 厂商限制小米、华为、OPPO 等国产机型常有“后台冻结”策略导致进程被杀后无法接收通知。建议提示用户将 App 加入“电池优化白名单”。❌ 问题 3Android 收不到iOS 却正常除了上面提到的厂商限制还要检查android.package是否和构建时的包名完全一致是否使用了自定义 keystore如果是需在 Google Play Console 中上传对应的上传密钥 SHA-1是否开启了 FCM 自动集成EAS Build 会自动处理但 Dev Build 需要额外配置。最佳实践建议来自一线项目的经验每次启动都尝试刷新 Token不要只在首次安装时获取。设备、账户切换、重装都会导致 Token 变化。前端保存 Token 到本地存储如 AsyncStorage避免频繁请求权限和生成 Token。服务端做去重和更新机制同一用户多个设备 → 多个 Token同一设备重装 → 新 Token 替代旧 Token。敏感操作不要依赖通知送达推送不是 100% 可靠。重要消息应结合站内信、邮件等多重通道。合理使用通知频率避免骚扰用户被关闭权限比没做推送更糟糕。结语掌握这一招让你的应用“活”起来推送通知不是炫技而是提升用户留存的关键基础设施。而在 Expo 生态中得益于expo-notifications模块的设计我们终于可以在不 eject 的前提下用几行代码实现跨平台推送。回顾一下核心步骤安装expo-notifications请求权限并获取 Token监听通知点击事件配置app.json中的projectId真机测试 后端发送只要按这个流程走一遍你就能拥有一个稳定可用的推送通道。下一步你可以考虑- 实现本地定时提醒闹钟类功能- 结合 Firebase 或自有后端构建消息中心- 添加通知分类、声音、图标等个性化设置技术本身并不难难的是坚持跑通每一个环节。现在是时候动手试试了。如果你在集成过程中遇到了其他问题欢迎留言讨论。也欢迎分享你的应用场景我们一起探讨更高效的实现方式。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询