This package provides helper methods to send mobile push notifications with the Amazon (AWS) SNS API.
SNS Push is a simple SNS SDK wrapper with a collection of methods to aid in interacting with the AWS SNS API. It works directly with Laravel or can be used as a standalone PHP package.
Supports | Version |
---|---|
PHP | 7.2 |
Platforms | ios/android |
You need to use Composer to install SNS Push into your project:
composer require onsetsoftware/sns-push
You should include the Composer autoload.php
file if not already loaded:
require __DIR__ . '/vendor/autoload.php';
Instantiate the SNSPush class with the following required config values:
- account_id
- access_key
- secret_key
- platform_applications
Also configurable:
- region [default: eu-west-1]
- api_version [default: 2010-03-31]
- scheme [default: https]
<?php
use SNSPush\SNSPush;
$sns = new SNSPush([
'account_id' => '<aws-account-id>', // Required
'access_key' => '<aws-iam-user-access-key>', // Required
'secret_key' => '<aws-iam-user-secret-key>', // Required
'scheme' => 'http', // Defaults to https
'platform_applications' => [ // application endpoints - Required
'ios' => '<application-endpoint-arn>',
'android' => '<application-endpoint-arn>'
]
]);
If you are a Laravel user, you can make use of the included service provider. Just add SNSPushServiceProvider
in your config/app.php
:
<?php
[
//...
'providers' => [
/*
* Package Service Providers...
*/
SNSPush\SNSPushServiceProvider::class,
]
];
Add 'sns' config keys to the config/services.php
<?php
[
//...
'sns' => [
'account_id' => env('SNS_ACCOUNT_ID', ''),
'access_key' => env('SNS_ACCESS_KEY', ''),
'secret_key' => env('SNS_SECRET_KEY', ''),
'scheme' => env('SNS_SCHEME', 'https'),
'region' => env('SNS_REGION', 'eu-west-1'),
'platform_applications' => [
'ios' => '<application-endpoint-arn>',
'android' => '<application-endpoint-arn>'
]
]
];
Add a device to a platform application (ios/android) by passing the device token and application key to addDevice()
.
<?php
/**
* @param string $token the raw device token
* @param string $platform ( ios | android )
*
* @return ARN the ARN endpoint for the device
*/
$sns->addDevice('<device-token>', '<platform-id>');
Remove a device from AWS SNS by passing the Endpoint ARN to removeDevice()
.
<?php
$sns->removeDevice('<endpoint-arn>');
Subscribe a device to a Topic by passing the Endpoint Arn and Topic Arn to subscribeDeviceToTopic()
.
<?php
/**
* @return SubscriptionARN
*/
$sns->subscribeDeviceToTopic('<device-endpoint-arn>', '<topic-arn>');
Remove a device from a Topic by passing the Subscription Arn to removeDeviceFromTopic()
.
<?php
$sns->removeDeviceFromTopic('<subscription-arn>');
SNS Push supports sending notifications to both Topic Endpoint or directly to an Endpoint ARN (Device).
Messages must implement SNSPush\Messages\MessageInterface
. There are a number of utility classes which format push notifications correctly for the various endpoint types.
<?php
use SNSPush\Messages\IOsMessage;
$message = new IOsMessage();
$message->setTitle('Message Title')
->setBody('Message body')
->setBadge(5)
->setSound('sound.caf')
->setPayload(
[
'custom-key' => 'value',
]
);
The package includes two classes to help format messages for use with the Phonegap Plugin Push Cordova package.
PhoneGapPluginPushIOSMessage::class;
PhoneGapPluginPushAndroidMessage::class;
For the full api, please consult the source of each of the message types
Simply pass an object implementing SNSPush\Messages\MessageInterface
, along with the endpoint ARN. The Endpoint platform must match the message type.
<?php
$sns->sendPushNotificationToDevice(
'<endpoint-arn>',
$message
);
First you should form your SNSPush\Messages\TopicMessage
by passing an array of the Message objects for the enpoints you need to address. Then pass the TopicMessage
to the sendPushNotificationToTopic
method.
<?php
$iosMessage = new IOsMessage();
$androidMessage = new AndroidMessage();
$message = new TopicMessage([$iosMessage, $androidMessage]);
/**
* @param TopicARN $arm
* @param TopicMessage $message
*/
$sns->send->sendPushNotificationToTopic(
'<topic-arn>',
$message
);
This package builds on the work done by ReduGroup.
MIT License © On Set Software Ltd