使用 Laravel 的 AWS SNS 推送通知

Posted

技术标签:

【中文标题】使用 Laravel 的 AWS SNS 推送通知【英文标题】:AWS SNS Push Notification using Laravel 【发布时间】:2021-11-18 11:12:04 【问题描述】:

我搜索了 AWS 文档并浪费了几个小时,但找不到使用 Laravel 8 发送推送通知的代码。有人可以帮忙使用 Laravel 发送 AWS SNS 推送通知吗?

【问题讨论】:

【参考方案1】:

我找到了解决办法

首先需要添加这个composer包

"aws/aws-sdk-php"

生成端点 ARN 的代码

$platformApplicationArn = config('services.sns.android_arn');

$client = new SnsClient([
        'version'     => '2010-03-31',
        'region'      => config('services.sns.region'),
        'credentials' => new Credentials(
            config('services.sns.key'),
            config('services.sns.secret')
        ),
    ]);

    $result = $client->createPlatformEndpoint(array(
        'PlatformApplicationArn' => $platformApplicationArn,
        'Token'                  => $deviceToken,
    ));

    $endPointArn = isset($result['EndpointArn']) ? $result['EndpointArn'] : '';

发送推送通知代码

    $client = new SnsClient([
            'version'     => '2010-03-31',
            'region'      => config('services.sns.region'),
            'credentials' => new Credentials(
                config('services.sns.key'),
                config('services.sns.secret')
            ),
        ]);

    $fcmPayload = json_encode(
            [
                'notification' => 
                    [
                        'title' => 'Test Notification',
                        'body'  => 'Hi from RB',
                        'sound' => 'default',
                    ],
            ]
        );

    $message = json_encode(['GCM' => $fcmPayload]);

    $client->publish([
          'TargetArn'        => $userDeviceToken->endpoint_arn,
          'Message'          => $message,
          'MessageStructure' => 'json',
    ]);

【讨论】:

以上是关于使用 Laravel 的 AWS SNS 推送通知的主要内容,如果未能解决你的问题,请参考以下文章

AWS SNS 移动推送通知

AWS SNS 推送通知说明

使用 AWS SNS 向特定 APNS 令牌发送推送通知

AWS - SNS 端点为 iOS 自行禁用 - Apple 设备(推送通知失败)

设置 AWS SNS 以向 iOS 设备发送推送通知

如果禁用 SNS 端点,为啥 SNS 无法发送推送通知?