Laravel FCM推送通知发送失败问题求助
Laravel FCM推送失败排查方案
1. 先排查异常捕获逻辑
你代码里的$this->errorHandler->convertException($e)可能没正确抛出错误,先把catch块改成直接输出异常信息,才能看到推送过程中到底出了什么问题:
catch (Throwable $e) { dd($e->getMessage(), $e->getTraceAsString()); }
2. 验证设备令牌有效性
- 令牌可能因APP重装、系统更新失效,重新从设备端获取最新令牌再测试。
- 直接用Firebase控制台的「云消息传递」功能,给该令牌发送测试推送,排除令牌本身的问题。
3. 检查FCM配置是否正确
.env里必须配置正确的服务器密钥和发送者ID:
FCM_KEY=你的Firebase服务器密钥 FCM_SENDER_ID=你的Firebase发送者ID
服务器密钥要从Firebase控制台「项目设置 > 云消息传递」里获取,别用Web API密钥。
4. 修正通知类的令牌处理方式
Laravel通知的设计是通过$notifiable对象获取令牌,硬编码令牌容易出错。在对应模型(比如User)里添加方法:
public function routeNotificationForFcm() { return $this->device_token; // 假设模型里存了设备令牌字段 }
然后通知类里删掉setToken代码,让渠道自动从模型获取令牌:
return FcmMessage::create() ->setNotification(\NotificationChannels\Fcm\Resources\Notification::create() ->setTitle('Account Activated') ->setBody('Your account has been activated.')) ->setAndroid( AndroidConfig::create() ->setFcmOptions(AndroidFcmOptions::create()->setAnalyticsLabel('analytics')) ->setNotification(AndroidNotification::create()->setSound('default')));
5. 查看FCM响应日志
打开storage/logs/laravel.log,搜索fcm关键词,查看请求和响应详情,比如是否有invalid_token(令牌无效)、authentication_error(密钥错误)这类明确的错误码。
6. 确认设备端配置
- Android端要确保
google-services.json正确放在app目录,依赖包已正确引入。 - 设备必须开启APP的通知权限,且APP处于可接收推送的状态(前台/后台均可,别被后台杀死)。
内容的提问来源于stack exchange,提问作者Андрей Двойкин
相关产品推荐
相关产品推荐

