Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/tomloprod/ionic-push-php
ionic-push-php is a library that allows you to consume the Ionic Cloud API for sending push notifications (normal and scheduled), get a paginated list of sending push notifications, get information of registered devices, remove registered devices by token, ...
https://github.com/tomloprod/ionic-push-php
api curl ionic php push-notifications
Last synced: 17 days ago
JSON representation
ionic-push-php is a library that allows you to consume the Ionic Cloud API for sending push notifications (normal and scheduled), get a paginated list of sending push notifications, get information of registered devices, remove registered devices by token, ...
- Host: GitHub
- URL: https://github.com/tomloprod/ionic-push-php
- Owner: tomloprod
- License: mit
- Created: 2016-12-10T14:16:57.000Z (about 8 years ago)
- Default Branch: master
- Last Pushed: 2017-07-17T13:31:32.000Z (over 7 years ago)
- Last Synced: 2024-12-01T02:35:54.592Z (25 days ago)
- Topics: api, curl, ionic, php, push-notifications
- Language: PHP
- Homepage:
- Size: 109 KB
- Stars: 21
- Watchers: 4
- Forks: 8
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE.md
Awesome Lists containing this project
README
# ionic-push-php [![Release](https://img.shields.io/github/release/tomloprod/ionic-push-php.svg)](https://github.com/tomloprod/ionic-push-php) [![Join the chat at https://gitter.im/tomloprod/ionic-push-php](https://badges.gitter.im/tomloprod/ionic-push-php.svg)](https://gitter.im/tomloprod/ionic-push-php?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) [![License](https://img.shields.io/github/license/tomloprod/ionic-push-php.svg)](http://www.opensource.org/licenses/mit-license.php)
ionic-push-php is a library that allows you to consume the *Ionic Cloud API* for **sending push notifications** (*normal and scheduled*), get a paginated **list of sending push notifications**, get **information of registered devices**, **remove registered devices by token**, ...
Ionic official documentation: [Ionic HTTP API - Push](https://docs.ionic.io/api/endpoints/push.html).
## Requirements:
- PHP 5.1+
- cURL## Installation:
composer require tomloprod/ionic-push-php
## Configuration:
First, make sure you have your `$ionicAPIToken` and your `$ionicProfile`:
- (string) **$ionicAPIToken:** The API token that you must create in *Settings › API Keys* in the [Dashboard](https://apps.ionic.io).
- (string) **$ionicProfile:** The Security Profile tag found in *Settings › Certificates* in the [Dashboard](https://apps.ionic.io)> More information [here](https://github.com/tomloprod/ionic-push-php/issues/1).
If you don't know how to configure your ionic app, you can take a look here: [Setup Ionic Push](http://docs.ionic.io/services/push/#setup)
## Exceptions
This library could throw:
- RequestException
````php
echo $e;
echo $e->prettify();
echo $e->getCode();
echo $e->getMessage();
echo $e->getType();
echo $e->getLink();
````## How to use:
First, instance an object as follow:
```php
use Tomloprod\IonicApi\Push,
Tomloprod\IonicApi\Exception\RequestException;$ionicPushApi = new Push($ionicProfile, $ionicAPIToken);
```Then you can interact (*list, remove, create, ...*) with `device tokens`, `messages` and `notifications`.
Remember that all the interactions returns an **ApiResponse** object instance, except __notifications->deleteAll__ that returns an array of **ApiResponse**s.
### [Device Tokens]
**1) List tokens:**
```php
try {$response = $ionicPushApi->deviceTokens->paginatedList([
// Determines whether to include invalidated tokens (boolean)
'show_invalid' => 1,
// Only display tokens associated with the User ID (string)
'user_id' => $desiredUserId,
// Sets the number of items to return per page (integer)
'page_size' => 4,
// Sets the page number (integer)
'page' => 1
]);foreach($response->data as $deviceToken){
print_r($deviceToken);
}} catch(RequestException $e) {
echo $e;
}
```**2) List users associated with a device token:**
```php
try {$response = $ionicPushApi->deviceTokens->listAssociatedUsers($desiredDeviceToken, [
// Sets the number of items to return per page (integer)
'page_size' => 1,
// Sets the page number (integer)
'page' => 1,
]);// Do what you want with $response->data
} catch(RequestException $e) {
echo $e;
}
```**3) Associate a user with a device token:**
```php
try {$deviceToken = "c686...";
$userId = "a99ee...";
$ionicPushApi->deviceTokens->associateUser($deviceToken, $userId);// The user has been associated.
} catch(RequestException $e) {
echo $e;
}
```**4) Dissociate a user with a device token:**
```php
try {$deviceToken = "c686...";
$userId = "a99ee...";
$ionicPushApi->deviceTokens->dissociateUser($deviceToken, $userId);// The user has been dissociated.
} catch(RequestException $e) {
echo $e;
}
```**5) Create device token that was previously generated by a device platform:**
```php
try {$response = $ionicPushApi->deviceTokens->create([
// Device token (string)
'token' => $newToken,
// User ID. Associate the token with the User (string)
'user_id' => $uuid
]);// Do what you want with $response->data
} catch(RequestException $e) {
echo $e;
}
```**6) Retrieve device information related to the device token:**
```php
try {$response = $ionicPushApi->deviceTokens->retrieve($desiredDeviceToken);
// Do what you want with $response->data
} catch(RequestException $e) {
echo $e;
}
```**5) Update an specific token:**
```php
try {$isValid = true; // Determines whether the device token is valid (boolean)
$ionicPushApi->deviceTokens->update($desiredDeviceToken, ['valid' => $isValid]);// The device token has been updated.
} catch(RequestException $e) {
echo $e;
}
```**6) Delete a device related to the device token:**
```php
try {$ionicPushApi->deviceTokens->delete($desiredDeviceToken);
// The device token has been deleted.
} catch(RequestException $e) {
echo $e;
}
```### [Messages]
**1) Retrieve specific message:**
```php
try {
$response = $ionicPushApi->messages->retrieve($desiredMessageId);// Do what you want with $response->data
} catch(RequestException $e) {
echo $e;
}
```**2) Delete a message:**
```php
try {
$ionicPushApi->messages->delete($desiredMessageId);// The message has been deleted.
} catch(RequestException $e) {
echo $e;
}
```### [Notifications]
**1) List notifications:**
```phptry {
$response = $ionicPushApi->notifications->paginatedList([
// Sets the number of items to return per page (integer)
'page_size' => 1,
// Sets the page number (integer)
'page' => 1,
// You can also pass other fields like "message_total" or "overview" (string[])
'fields' => [
// Total number of messages tied to each notification.
'message_total',
// Get an overview of messages delivered and failed for each notification.
'overview'
]
]);// Do what you want with $response->data
} catch(RequestException $e) {
echo $e;
}
```**2) Retrieve specific notification:**
```php
try {$response = $ionicPushApi->notifications->retrieve($desiredNotificationId);
// Do what you want with $response->data
} catch(RequestException $e) {
echo $e;
}
```**3) Delete a notification:**
```php
try {
$ionicPushApi->notifications->delete($desiredNotificationId);// Notification has been deleted.
} catch(RequestException $e) {
echo $e;
}
```**4) Delete all notifications:**
```php
try {
?
$responses = $ionicPushApi->notifications->deleteAll();// Notifications have been deleted.
} catch(RequestException $e) {
echo $e;
}
```**5) List messages of a notification:**
```php
try {$response = $ionicPushApi->notifications->listMessages($desiredNotificationId, [
// Sets the number of items to return per page (integer)
'page_size' => 1,
// Sets the page number (integer)
'page' => 1
])// Do what you want with $response->data
} catch(RequestException $e) {
echo $e;
}
```**6) Send notifications:**
```php
/**
* ANDROID [OPTIONAL] CONFIG PARAMETERS
*/// Filename of the Icon to display with the notification (string)
$icon = "icon";// Filename or URI of an image file to display with the notification (string)
$image = "image";// Indicates whether each notification message results in a new entry on the notification center on Android.
// If not set, each request creates a new notification.
// If set, and a notification with the same tag is already being shown, the new notification replaces the existing one in notification center.
$tag = "yourTagIfYouNeedIt";// When this parameter is set to true, it indicates that the message should not be sent until the device becomes active. (boolean)
$delayWhileIdle = false;// Identifies a group of messages that can be collapsed, so that only the last message gets sent when delivery can be resumed. (string)
$collapseKey = "group1";/**
* IOS [OPTIONAL] CONFIG PARAMETERS
*/// Message Priority. A value of 10 will cause APNS to attempt immediate delivery.
// A value of 5 will attempt a delivery which is convenient for battery life. (integer)
$priority = 10;// The number to display as the badge of the app icon (integer)
$badge = 1;// Alert Title, only applicable for iWatch devices
$iWatchTitle = "Hi!";// Assign the previously defined configuration parameters to each platform, as well as the title and message:
$notificationConfig = [
'title' => 'Your notification title',
'message' => 'Your notification message. Bla, bla, bla, bla.',
'android' => [
'tag' => $tag,
'icon' => $icon,
'image' => $image,
'delay_while_idle' => $delayWhileIdle,
'collapse_key' => $collapseKey
],
'ios' => [
'priority' => $priority,
'badge' => $badge,
'title' => $iWatchTitle
]
];// [OPTIONAL] You can also pass custom data to the notification. Default => []
$notificationPayload = [
'myCustomField' => 'This is the content of my customField',
'anotherCustomField' => 'More custom content'
];// [OPTIONAL] And define, if you need it, a silent notification. Default => false
$silent = true;// [OPTIONAL] Or/and even a scheduled notification for an indicated datetime. Default => ''
$scheduled = '2016-12-10 10:30:10';// [OPTIONAL] Filename of audio file to play when a notification is received. Setting this to default will use the default device notification sound. Default => 'default'
$sound = 'default';// Configure notification:
$ionicPushApi->notifications->setConfig($notificationConfig, $notificationPayload, $silent, $scheduled, $sound);try {
// Send notification...
$response = $ionicPushApi->notifications->sendNotificationToAll(); // ...to all registered devices
// or
$response = $ionicPushApi->notifications->sendNotification([$desiredToken1, $desiredToken2, $desiredToken3]); // ...to some devices// Do what you want with $response->data
} catch(RequestException $e) {
echo $e;
}
```**7) Replace existing notification with new config:**
```php
// Identifier of the notification we want to replace.
$notificationToReplace = "a86feewx...";/**
* ANDROID [OPTIONAL] CONFIG PARAMETERS
*/// Filename of the Icon to display with the new notification (string)
$icon = "icon";// Filename or URI of an image file to display with the new notification (string)
$image = "image";// Indicates whether each notification message results in a new entry on the notification center on Android.
// If not set, each request creates a new notification.
// If set, and a notification with the same tag is already being shown, the new notification replaces the existing one in notification center.
$tag = "yourTagIfYouNeedIt";// When this parameter is set to true, it indicates that the message should not be sent until the device becomes active. (boolean)
$delayWhileIdle = false;// Identifies a group of messages that can be collapsed, so that only the last message gets sent when delivery can be resumed. (string)
$collapseKey = "group1";/**
* IOS [OPTIONAL] CONFIG PARAMETERS
*/// Message Priority. A value of 10 will cause APNS to attempt immediate delivery.
// A value of 5 will attempt a delivery which is convenient for battery life. (integer)
$priority = 10;// The number to display as the badge of the app icon (integer)
$badge = 1;// Alert Title, only applicable for iWatch devices
$iWatchTitle = "Hi!";// Assign the previously defined configuration parameters to each platform, as well as the title and message:
$notificationConfig = [
'title' => 'Your notification title',
'message' => 'Your notification message. Bla, bla, bla, bla.',
'android' => [
'tag' => $tag,
'icon' => $icon,
'image' => $image,
'delay_while_idle' => $delayWhileIdle,
'collapse_key' => $collapseKey
],
'ios' => [
'priority' => $priority,
'badge' => $badge,
'title' => $iWatchTitle
]
];// [OPTIONAL] You can also pass custom data to the new notification. Default => []
$notificationPayload = [
'myCustomField' => 'This is the content of my customField',
'anotherCustomField' => 'More custom content'
];// [OPTIONAL] And define, if you need it, a silent notification. Default => false
$silent = true;// [OPTIONAL] Or/and even a scheduled notification for an indicated datetime. Default => ''
$scheduled = '2016-12-10 10:30:10';// [OPTIONAL] Filename of audio file to play when a notification is received. Setting this to default will use the default device notification sound. Default => 'default'
$sound = 'default';// Configure new notification:
$ionicPushApi->notifications->setConfig($notificationConfig, $notificationPayload, $silent, $scheduled, $sound);try {
// Replace notification with new configuration
$response = $ionicPushApi->notifications->replace($notificationToReplace);// Do what you want with $response->data
} catch(RequestException $e) {
echo $e;
}
```## Contributing:
1. Fork it
1. Create your feature branch (git checkout -b my-new-feature)
1. Commit your changes (git commit -m 'Add some feature')
1. Push to the branch (git push origin my-new-feature)
1. Create new Pull Request