如何从Laravel后端向Expo应用发送推送通知
从Laravel向Expo应用发送推送通知实现方案
核心实现逻辑
无需单独对接苹果APNs、安卓FCM底层推送服务,Expo官方提供了统一的推送网关,你只需在Laravel侧将目标用户的Expo Push Token、通知内容组装为指定格式,向Expo推送网关发起POST请求即可完成推送,Expo会自动完成不同设备系统的推送分发工作。
具体实现步骤
- 前置准备
确保Expo端已完成通知权限申请,拿到格式为ExponentPushToken[xxxxxxxxxxxxxxxxxxxxxx]的合法Push Token,并将Token与对应应用用户绑定存储到Laravel的数据库中。 - 推送代码实现
直接使用Laravel自带的Http客户端即可完成请求,无需额外安装第三方扩展包,单用户推送示例代码如下:
批量推送时,只需将public function sendExpoPush(string $expoToken, string $title, string $content, array $customData = []): array { $requestData = [ 'to' => $expoToken, 'title' => $title, 'body' => $content, 'data' => $customData, // 可选参数,携带自定义业务数据,Expo端可捕获处理 'sound' => 'default', // 可选,设置通知提示音 'badge' => 1 // 可选,iOS端应用角标显示数量 ]; $response = \Illuminate\Support\Facades\Http::withHeaders([ 'Accept' => 'application/json', 'Content-Type' => 'application/json', ])->post('https://exp.host/--/api/v2/push/send', $requestData); return $response->json(); }to字段的值替换为最多100个Expo Token组成的数组即可,超过100个Token请拆分多批请求。 - 推送结果校验
接口返回结果中status字段为ok代表请求已被Expo网关接受,后续会下发到对应设备;若返回error,可通过message字段排查问题,常见错误包括Token格式无效、Token所属Expo项目与推送侧配置不匹配等。
常见问题排查
- 提示
InvalidCredentials错误时,校验Expo项目的bundle ID、package name配置是否和生成Token的应用配置完全一致 - 设备收不到通知时,先检查设备是否开启了对应应用的通知权限,再校验当前推送使用的Token是否对应用户设备生成的有效Token
内容的提问来源于stack exchange,提问作者Sami
相关产品推荐
相关产品推荐

