%PDF- %PDF-
| Direktori : /var/www/pjc/vendor/needim/noty/docs/ |
| Current File : /var/www/pjc/vendor/needim/noty/docs/push.md |
With v3.1.0-beta push notifications are supported with service worker implementation.
### Preparation Steps
* 1) Create a project on the [Firebase Developer Console](https://console.firebase.google.com/).
* 2) Go to **Project settings** (The cog near the top left corner), click the ' **Cloud Messaging**' tab.
* 3) Note that **Server Key** and **Sender ID**.
* 4) Create a copy of [manifest.json.template](https://github.com/needim/noty/blob/master/manifest.json.template) called **manifest.json** at root folder
* 5) Replace <your-sender-id> in your new manifest.json with your own Sender ID from the Firebase Developer Console project.
* 6) Create a copy of [service-worker.js.template](https://github.com/needim/noty/blob/master/service-worker.js.template) called **service-worker.js** at root folder
* 7) Link your manifest <link rel="manifest" href="../manifest.json">
##### Now half of the job is done.
### Let's create a Noty.Push instance
```javascript
const NotyPush = Noty.Push('/service-worker.js')
.on('onPermissionGranted', function () {
console.log('Perm: granted')
})
.on('onPermissionDenied', function () {
console.log('Perm: denied')
})
.on('onSubscriptionSuccess', function (subData) {
console.log('Subscription:', subData)
// (YOU NEED TO STORE THIS VALUES FOR LATER USE)
})
.on('onSubscriptionCancel', function (subData) {
console.log('Subscription: canceled')
})
.on('onWorkerSuccess', function () {
console.log('Worker: installed')
})
.on('onWorkerError', function (err) {
console.log('Worker: failed', err)
})
.on('onWorkerNotSupported', function (err) {
console.log('Worker: not supported', err)
})
```
### Let's Ask User's Permission
```javascript
NotyPush.requestSubscription()
```
Now the browser will ask permission. And if the user allows it, the service worker will be registered.
!> **You have to store subData onSubscriptionSuccess callback for later use.**
### Sending push notifications from backend (Node.js)
Now that we have subscription information, we can send notifications with [**web-push**](https://github.com/web-push-libs/web-push) library.
Let's install [**web-push**](https://github.com/web-push-libs/web-push) first.
```
$ npm install web-push
```
Create a JavaScript file called sendPushExample.js
```javascript
const webpush = require('web-push')
const vapidKeys = webpush.generateVAPIDKeys()
webpush.setGCMAPIKey('YOUR-SERVER-KEY-FROM-FIREBASE-CONSOLE')
webpush.setVapidDetails(
'mailto:your@email.com',
vapidKeys.publicKey,
vapidKeys.privateKey
)
// Use your previously saved subscription information
const pushSubscription = {
endpoint: '',
keys: {
auth: '',
p256dh: ''
}
}
// image & actions are optional
webpush.sendNotification(pushSubscription, JSON.stringify({
title: 'Noty title',
body: 'Noty body',
icon: 'https://your-icon0-url.png',
image: 'https://your-image-url.png',
url: 'http://ned.im/noty/?ref=webPushTest',
actions: [
{action: 'actionYes', 'title': 'Yes', 'icon': 'https://your-icon1-url.png'},
{action: 'actionNo', 'title': 'No', 'icon': 'https://your-icon2-url.png'}
]
}))
```
After that we can run
```
$ node sendPushExample.js
```
Notification should look like this for Chrome

### Checking user's current permission
```javascript
NotyPush.getPermissionStatus() === 'granted'
NotyPush.getPermissionStatus() === 'default'
NotyPush.getPermissionStatus() === 'denied'
// In some cases, you may need to check
// whether your service worker is running.
NotyPush.isSWRegistered() === true
// You may ask again for permission,
// If user's permission granted
// but service worker unregistered or not working.
```