Apple APN 推送通知通道

v5.4.0 2024-08-13 09:38 UTC

README

Latest Version on Packagist Software License Build Status StyleCI Quality Score Code Coverage Total Downloads

此包使您能够使用 Laravel 通过 Apple Push (APN) 发送通知变得容易。

内容

安装

使用 Composer 安装此包

composer require laravel-notification-channels/apn

设置 APN 服务

在开始使用 APN 服务之前,请在您的应用中启用推送通知。然后在证书、标识符和配置文件下创建 APNS 密钥以生成密钥 ID 和 .p8 文件。

收集您的密钥 ID、团队 ID(显示在 Apple 开发者页面右上角)以及应用包标识符,并在 config/broadcasting.php 中按需进行配置。

JWT 令牌认证

'connections' => [
    'apn' => [
        'key_id' => env('APN_KEY_ID'),
        'team_id' => env('APN_TEAM_ID'),
        'app_bundle_id' => env('APN_BUNDLE_ID'),
        // Enable either `private_key_path` or `private_key_content` depending on your environment
        // 'private_key_path' => env('APN_PRIVATE_KEY'),
        'private_key_content' => env('APN_PRIVATE_KEY'),
        'private_key_secret' => env('APN_PRIVATE_SECRET'),
        'production' => env('APN_PRODUCTION', true),
    ],
],

请参阅建立基于令牌的 APNs 连接,它将指导您如何获取必要参数的值。

使用证书 (.pem) 认证

'connections' => [
    'apn' => [
        'app_bundle_id' => env('APN_BUNDLE_ID'),
        'certificate_path' => env('APN_CERTIFICATE_PATH'),
        'certificate_secret' => env('APN_CERTIFICATE_SECRET'),
        'production' => env('APN_PRODUCTION', true),
    ],
],

如果您使用基于证书的 APNs 进行连接,则不需要 key_idteam_id。您可以参考使用证书发送推送通知

请参阅建立基于证书的 APNs 连接,它将指导您如何获取必要参数的值。

有关客户端可以提供的参数的更多信息,请参阅pushok 文档

用法

现在,您可以通过创建一个 ApnMessage 来向 APN 发送消息。

use NotificationChannels\Apn\ApnChannel;
use NotificationChannels\Apn\ApnMessage;
use Illuminate\Notifications\Notification;

class AccountApproved extends Notification
{
    public function via($notifiable)
    {
        return [ApnChannel::class];
    }

    public function toApn($notifiable)
    {
        return ApnMessage::create()
            ->badge(1)
            ->title('Account approved')
            ->body("Your {$notifiable->service} account was approved!");
    }
}

要查看创建消息时可用的方法,请参阅 ApnMessage 源代码

在您的 notifiable 模型中,确保包含一个 routeNotificationForApn() 方法,该方法返回一个或多个令牌。

public function routeNotificationForApn()
{
    return $this->apn_token;
}

按消息配置

如果您需要为消息提供自定义配置,可以提供 Pushok 客户端的一个实例,并将其用于默认客户端。

$customClient = new Pushok\Client(Pushok\AuthProvider\Token::create($options));

return ApnMessage::create()
    ->title('Account approved')
    ->body("Your {$notifiable->service} account was approved!")
    ->via($customClient)

VoIP 推送通知

发送 VoIP 推送通知非常相似。您只需使用 ApnVoipChannel 通道和 ApnVoipMessage(它与常规的 ApnMessage 具有相同的 API)。

use NotificationChannels\Apn\ApnVoipChannel;
use NotificationChannels\Apn\ApnVoipMessage;
use Illuminate\Notifications\Notification;

class AccountApproved extends Notification
{
    public function via($notifiable)
    {
        return [ApnVoipChannel::class];
    }

    public function toApnVoip($notifiable)
    {
        return ApnVoipMessage::create()
            ->badge(1);
    }
}

在您的 notifiable 模型中,确保包含一个 routeNotificationForApnVoip() 方法,该方法返回一个或多个令牌。

public function routeNotificationForApnVoip()
{
    return $this->apn_voip_token;
}

变更日志

有关最近更改的更多信息,请参阅 变更日志

测试

$ composer test

安全性

如果您发现任何安全问题,请通过电子邮件info@fruitcake.nl而不是使用问题跟踪器。

贡献

有关详细信息,请参阅贡献

鸣谢

许可

MIT 许可证 (MIT)。有关更多信息,请参阅 许可文件