relative / laravel-expo-push-notifications
Expo Push Notifications Driver for Laravel Notifications, PHP 7.4
Installs: 5 533
Dependents: 0
Suggesters: 0
Security: 0
Stars: 6
Watchers: 2
Forks: 6
Open Issues: 8
Requires
- php: >=7.4
- illuminate/support: ~7|~8
Requires (Dev)
- orchestra/testbench: ~5|~6
- phpunit/phpunit: ~8.5
This package is auto-updated.
Last update: 2024-12-29 06:27:56 UTC
README
An Expo Push Notifications driver for Laravel Notifications.
Automatically expires PushTokens if they fail due to DeviceNotRegistered
error, and won't use them again.
Stores data about Push Notification delivery status.
Installation
Via Composer
$ composer require relative/laravel-expo-push-notifications
Run migrations
$ php artisan migrate
Optional: Publish migrations & configuration
$ php artisan vendor:publish --provider="Relative\LaravelExpoPushNotifications\ExpoPushNotificationsServiceProvider"
If you use UUIDs for your model id
fields, publish the migrations and follow the instructions in the file to switch to string id
columns.
Usage
Setup your notifiable users
To get started, add the HasPushTokens
trait to your notifiable class(es), e.g. your App\User
model
<?php use Relative\LaravelExpoPushNotifications\Traits\HasPushTokens; class User { use Notifiable, HasPushTokens; // }
Register Push Tokens to your users
Your Expo app will be able to generate a Push Token and POST it to a controller method in your Laravel application, which can then register the token to that user, for example:
<?php class PushNotificationController extends \Illuminate\Routing\Controller { public function register(Request $request) { $token = $request->input('token'); $request->user()->pushTokens()->firstOrCreate( ['token' => $token], ['token' => $token], ); return response()->status(200); } }
Notify a user about something
Add ExpoPushNotifications
to your Notifiable
object
<?php use Illuminate\Bus\Queueable; use Relative\LaravelExpoPushNotifications\ExpoPushNotifications; use Relative\LaravelExpoPushNotifications\PushNotification; class NewOrder extends \Illuminate\Notifications\Notification { use Queueable; public $order; /** * Create a new notification instance. * * @param $order */ public function __construct($order) { $this->order = $order; } /** * Get the notification's delivery channels. * * @param mixed $notifiable * @return array */ public function via($notifiable) { return [ExpoPushNotifications::class]; } public function toExpoPushNotification($notifiable) { return (new PushNotification) ->title('New order received') ->body("Order #{$this->order->id} is ready for processing"); } }
The constructor of the PushNotification
class accepts an array of parameters matching the schema defined here:
https://docs.expo.io/push-notifications/sending-notifications/#message-request-format
Alternatively you can use the expressive API, in Laravel style as shown above.
The PushNotification
class has constants for the priority
and sound
parameters:
PushNotification::PRIORITY_HIGH;
PushNotification::PRIORITY_NORMAL;
PushNotification::PRIORITY_DEFAULT;
PushNotification::SOUND_DEFAULT;
PushNotification::SOUND_NONE;
Change log
Please see the changelog for more information on what has changed recently.
Testing
$ composer test
Contributing
Please see contributing.md for details and a todolist.
Security
If you discover any security related issues, please email author email instead of using the issue tracker.
Credits
License
MIT License. Please see the license file for more information.