Symfony Notifier+OneSignal推送报错:无可用传输支持给定消息
解决Symfony结合OneSignal推送通知的报错问题
报错原因是配置类型不匹配和服务注入错误,按以下步骤修复:
1. 修正Notifier配置的传输类型
你当前在notifier.yaml中将OneSignal配置为短信传输(texter_transports),但OneSignal是推送服务,需要配置到推送传输(push_transports)下:
framework: notifier: push_transports: onesignal: '%env(ONESIGNAL_DSN)%'
2. 替换控制器中的注入服务
TexterInterface是用于发送短信的服务,无法处理PushMessage推送消息。需要替换为NotifierInterface或PushSenderInterface:
方式一:使用NotifierInterface
use Symfony\Component\Notifier\NotifierInterface; use Symfony\Component\Notifier\Recipient\Recipient; #[Route('/test', name: 'test')] public function test(Request $request, NotifierInterface $notifier) { $push = new PushMessage('Test', 'Content'); // 传入OneSignal用户的player ID或外部用户ID $recipient = new Recipient('', 'onesignal-user-player-id'); $notifier->send($push, $recipient); return new Response('OK'); }
方式二:使用PushSenderInterface
use Symfony\Component\Notifier\Sender\PushSenderInterface; use Symfony\Component\Notifier\Recipient\Recipient; #[Route('/test', name: 'test')] public function test(Request $request, PushSenderInterface $pushSender) { $push = new PushMessage('Test', 'Content'); $recipient = new Recipient('', 'onesignal-user-player-id'); $pushSender->send($push, $recipient); return new Response('OK'); }
3. 重要注意事项
OneSignal推送必须指定接收者,Recipient的第二个参数需要传入目标用户的OneSignal标识(player ID、external ID等),否则无法完成推送。
内容的提问来源于stack exchange,提问作者Dimitar Kalinov
相关产品推荐
相关产品推荐

