You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 07:42:46