# Laravel APN (Apple Push) Notification Channel
(opens new window) (opens new window) (opens new window) (opens new window) (opens new window) (opens new window) (opens new window)
This package makes it easy to send notifications using Apple Push (APN) with Laravel.
# Contents
# Installation
Install this package with Composer:
composer require laravel-notification-channels/apn
# Setting up the APN service
Before using the APN Service, enable Push Notifications in your app (opens new window). Then create a APNS key under Certificates, Identifiers & Profiles (opens new window) to generate a Key ID and .p8 file.
Collect your Key ID, as well as your Team ID (displayed at the top right of the Apple Developer page) and app bundle ID and configure as necessary in config/broadcasting.php
.
# JWT Token Authentication
'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),
],
],
See the Establishing a token-based connection to APNs (opens new window) which will guide you how to obtain the values of the necessary parameters.
# Using Certificate (.pem) Authentication
'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),
],
],
If you are connecting with certificate based APNs, key_id
and team_id
are not needed. You can refer to Send a Push Notification Using a Certificate (opens new window)
See the Establishing a certificate-based connection to APNs (opens new window) which will guide you how to obtain the values of the necessary parameters.
See the pushok
docs (opens new window) for more information about what arguments can be supplied to the client.
# Usage
You can now send messages to APN by creating a ApnMessage:
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!");
}
}
To see more of the methods available to you when creating a message please see the ApnMessage
source (opens new window).
In your notifiable
model, make sure to include a routeNotificationForApn()
method, which return one or an array of tokens.
public function routeNotificationForApn()
{
return $this->apn_token;
}
# Per-message configuration
If you need to provide a custom configuration for a message you can provide an instance of a Pushok (opens new window) client and it will be used instead of the default one.
$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 push notifications
Sending VoIP push notifications is very similar. You just need to use the ApnVoipChannel
channel with ApnVoipMessage
(which has the same API as a regular ApnMessage
).
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);
}
}
In your notifiable
model, make sure to include a routeNotificationForApnVoip()
method, which return one or an array of tokens.
public function routeNotificationForApnVoip()
{
return $this->apn_voip_token;
}
# Changelog
Please see CHANGELOG (opens new window) for more information what has changed recently.
# Testing
$ composer test
# Security
If you discover any security related issues, please email info@fruitcake.nl instead of using the issue tracker.
# Contributing
Please see CONTRIBUTING (opens new window) for details.
# Credits
# License
The MIT License (MIT). Please see License File (opens new window) for more information.