alymosul / exponent-server-sdk-php
Server-side library for working with Expo push notifications using PHP
Installs: 1 091 112
Dependents: 9
Suggesters: 0
Security: 0
Stars: 149
Watchers: 4
Forks: 77
Open Issues: 7
Requires
- php: >=7.0
- ext-curl: *
- ext-json: *
README
Server-side library for working with Expo push notifications using PHP
Usage
- Require the package in your project
composer require alymosul/exponent-server-sdk-php
- In a php file
require_once __DIR__.'/vendor/autoload.php'; $channelName = 'news'; $recipient= 'ExponentPushToken[unique]'; // You can quickly bootup an expo instance $expo = \ExponentPhpSDK\Expo::normalSetup(); // Subscribe the recipient to the server $expo->subscribe($channelName, $recipient); // Build the notification data $notification = ['body' => 'Hello World!']; // Notify an interest with a notification $expo->notify([$channelName], $notification);
Data can be added to notifications by providing it as a JSON object. For example:
// Build the notification data $notification = ['body' => 'Hello World!', 'data'=> json_encode(array('someData' => 'goes here'))];
Channel name
You can use channels to send a notification to only one user, or to a group of users:
One recipient
In order to target one recipient (and avoid sending a notification to the wrong recipient), use a channel name specific to each user:
$channelName = 'user_528491'; $recipient = 'ExponentPushToken[unique]'; // … // Subscribe the recipient to the server $expo->subscribe($channelName, $recipient); // … // Notify an interest with a notification, only one recipient will receive it $expo->notify([$channelName], $notification);
Several recipients
Declare a channel name that will be shared between the recipients:
$channelName = 'group_4815'; $recipient1 = 'ExponentPushToken[unique1]'; $recipient2 = 'ExponentPushToken[unique2]'; // … // Subscribe the recipients to the server $expo->subscribe($channelName, $recipient1); $expo->subscribe($channelName, $recipient2); // … // Notify an interest with a notification, the 2 recipients will receive it $expo->notify([$channelName], $notification);
// Build the notification data $notification = ['body' => 'Hello World!', 'data'=> json_encode(array('someData' => 'goes here'))];
Additional security
If you set up enhanced security in your Expo Dashboard (as described here), you will need to attach an authorization token to each push request:
// ... // Bootup an expo instance $expo = \ExponentPhpSDK\Expo::normalSetup(); // Fetch your access token from where you stored it $accessToken = 'your_expo_access_token'; // The access token will be attached to every push request you make hereafter $expo->setAccessToken($accessToken); // Notify an interest with a notification $expo->notify([$channelName], $notification);
TODO
- Need to create tests
Laravel driver
- There's an expo notifications driver built for laravel apps that's ready to use, you can find it here.. https://github.com/Alymosul/laravel-exponent-push-notifications