2017 © Pedro Peláez
 

library apn

Apple APN Push Notification Channel

image

laravel-notification-channels/apn

Apple APN Push Notification Channel

  • Thursday, July 5, 2018
  • by laravel-notification-channels
  • Repository
  • 7 Watchers
  • 40 Stars
  • 39,892 Installations
  • PHP
  • 0 Dependents
  • 0 Suggesters
  • 23 Forks
  • 3 Open issues
  • 10 Versions
  • 32 % Grown

The README.md

Laravel APN (Apple Push) Notification Channel

Latest Version on Packagist Software License Build Status StyleCI Quality Score Code Coverage Total Downloads, (*1)

This package makes it easy to send notifications using Apple Push (APN) with Laravel., (*2)

Contents

Installation

Install this package with Composer:, (*3)

composer require laravel-notification-channels/apn

Setting up the APN service

Before using the APN Service, enable Push Notifications in your app. Then create a APNS key under Certificates, Identifiers & Profiles to generate a Key ID and .p8 file., (*4)

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., (*5)

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 which will guide you how to obtain the values of the necessary parameters., (*6)

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, (*7)

See the Establishing a certificate-based connection to APNs which will guide you how to obtain the values of the necessary parameters., (*8)

See the pushok docs for more information about what arguments can be supplied to the client., (*9)

Usage

You can now send messages to APN by creating a ApnMessage:, (*10)

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., (*11)

In your notifiable model, make sure to include a routeNotificationForApn() method, which return one or an array of tokens., (*12)

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 client and it will be used instead of the default one., (*13)

$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)., (*14)

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., (*15)

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

Changelog

Please see CHANGELOG for more information what has changed recently., (*16)

Testing

bash $ composer test, (*17)

Security

If you discover any security related issues, please email info@fruitcake.nl instead of using the issue tracker., (*18)

Contributing

Please see CONTRIBUTING for details., (*19)

Credits

License

The MIT License (MIT). Please see License File for more information., (*20)

The Versions