想象一下,你正在开发一款热门的ios应用,需要实时向用户发送各种通知:账户审批通过、新消息提醒、活动更新等等。这些通知不仅要及时送达,还要确保安全可靠。apple push notification service (apns) 是实现这一目标的核心,但其集成过程对于许多laravel开发者来说,往往是一道难以逾越的坎。
在没有趁手的工具之前,直接与APNs打交道意味着你需要面对一系列繁琐且容易出错的步骤:
.p8
.pem
aps
alert
badge
sound
这些痛点让许多开发者望而却步,将宝贵的时间耗费在配置和调试上,而非核心业务逻辑的开发。
laravel-notification-channels/apn
好在,Composer 生态为我们提供了强大的解决方案。今天,我们要介绍的正是
laravel-notification-channels/apn
首先,通过Composer安装这个包,简单快捷:
<pre class="brush:php;toolbar:false;">composer require laravel-notification-channels/apn
安装完成后,你需要在
config/broadcasting.php
JWT Token 认证 (推荐)
<pre class="brush:php;toolbar:false;">// config/broadcasting.php
'connections' => [
'apn' => [
'key_id' => env('APN_KEY_ID'), // 从Apple开发者账号获取
'team_id' => env('APN_TEAM_ID'), // 从Apple开发者账号获取
'app_bundle_id' => env('APN_BUNDLE_ID'), // 你的应用Bundle ID
// 启用其中一个,根据你的环境选择
// 'private_key_path' => env('APN_PRIVATE_KEY_PATH'), // .p8 私钥文件路径
'private_key_content' => env('APN_PRIVATE_KEY_CONTENT'), // .p8 私钥文件内容
'private_key_secret' => env('APN_PRIVATE_KEY_SECRET'), // 私钥密码 (如果有)
'production' => env('APN_PRODUCTION', true), // true 为生产环境,false 为沙盒环境
],
],证书认证 (旧版)
<pre class="brush:php;toolbar:false;">// config/broadcasting.php
'connections' => [
'apn' => [
'app_bundle_id' => env('APN_BUNDLE_ID'),
'certificate_path' => env('APN_CERTIFICATE_PATH'), // .pem 证书文件路径
'certificate_secret' => env('APN_CERTIFICATE_SECRET'), // 证书密码 (如果有)
'production' => env('APN_PRODUCTION', true),
],
],重要提示: 这些配置项的值,特别是
key_id
team_id
.env
配置妥当后,发送APN通知就变得异常简单了。
laravel-notification-channels/apn
Illuminate\Notifications\Notification
toApn
<pre class="brush:php;toolbar:false;"><?php
namespace App\Notifications;
use Illuminate\Notifications\Notification;
use NotificationChannels\Apn\ApnChannel;
use NotificationChannels\Apn\ApnMessage; // 引入 ApnMessage
class AccountApproved extends Notification
{
public function via($notifiable)
{
return [ApnChannel::class]; // 指定使用 ApnChannel
}
public function toApn($notifiable)
{
return ApnMessage::create()
->badge(1) // 应用图标上的未读消息数
->title('账户审批') // 通知标题
->body("您的 {$notifiable->service} 账户已成功通过审批!") // 通知内容
->custom('url', 'https://example.com/account'); // 添加自定义数据
}
}别忘了在你的
notifiable
User
routeNotificationForApn()
<pre class="brush:php;toolbar:false;"><?php
namespace App\Models;
use Illuminate\Notifications\Notifiable;
use Illuminate\Database\Eloquent\Model;
class User extends Model
{
use Notifiable;
// ... 其他模型属性和方法
/**
* 获取用于APN通知的设备令牌。
*/
public function routeNotificationForApn()
{
// 假设你的用户模型中有一个 apn_token 字段存储了设备的APN Token
return $this->apn_token;
// 如果用户有多个设备,可以返回一个数组:
// return [$this->apn_token_iphone, $this->apn_token_ipad];
}
}发送VoIP通知:
如果你需要发送VoIP推送通知(例如,用于CallKit集成),这个包也提供了专门的
ApnVoipChannel
ApnVoipMessage
<pre class="brush:php;toolbar:false;">use NotificationChannels\Apn\ApnVoipChannel;
use NotificationChannels\Apn\ApnVoipMessage;
class IncomingCall extends Notification
{
public function via($notifiable)
{
return [ApnVoipChannel::class];
}
public function toApnVoip($notifiable)
{
return ApnVoipMessage::create()
->custom('uuid', 'some-call-uuid')
->custom('handle', 'caller-name');
}
}
// 模型中也需要对应的路由方法
public function routeNotificationForApnVoip()
{
return $this->apn_voip_token;
}laravel-notification-channels/apn
使用
laravel-notification-channels/apn
总而言之,
laravel-notification-channels/apn
以上就是如何解决Laravel中Apple推送通知的复杂性?使用laravel-notification-channels/apn让通知触手可及的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号