Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/andreialecu/node-apn-http2
Communicate with Apple Push Notification Service via native Node.js v8.8.1+ HTTP2 module (node-apn drop-in)
https://github.com/andreialecu/node-apn-http2
apns apple http2 nodejs push-notifications
Last synced: 3 months ago
JSON representation
Communicate with Apple Push Notification Service via native Node.js v8.8.1+ HTTP2 module (node-apn drop-in)
- Host: GitHub
- URL: https://github.com/andreialecu/node-apn-http2
- Owner: andreialecu
- License: mit
- Created: 2017-10-31T14:58:42.000Z (about 7 years ago)
- Default Branch: master
- Last Pushed: 2021-06-24T20:24:38.000Z (over 3 years ago)
- Last Synced: 2024-10-15T04:46:13.992Z (3 months ago)
- Topics: apns, apple, http2, nodejs, push-notifications
- Language: TypeScript
- Size: 43.9 KB
- Stars: 27
- Watchers: 5
- Forks: 10
- Open Issues: 9
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
node-apn-http2
==============[![Current Version](https://img.shields.io/npm/v/node-apn-http2.svg?style=flat-square)](https://www.npmjs.org/package/node-apn-http2)
> A Node.js module for interfacing with the Apple Push Notification service using *NATIVE* node.js http2 API (requires node v8.8.1+)
This package is supposed to be drop-in compatible with [node-apn](https://github.com/node-apn/node-apn), however, only token based credentials are supported (p8).
### Installation
[yarn](https://yarnpkg.com) is the preferred installation method:
```bash
$ yarn add node-apn-http2
```### Load in the module
```javascript
var apn = require('node-apn-http2');
``````javascript
var options = {
token: {
key: "path/to/APNsAuthKey_XXXXXXXXXX.p8",
keyId: "key-id",
teamId: "developer-team-id"
},
production: false,
hideExperimentalHttp2Warning: true // the http2 module in node is experimental and will log
// ExperimentalWarning: The http2 module is an experimental API.
// to the console unless this is set to true
};var apnProvider = new apn.Provider(options);
```By default, the provider will connect to the sandbox unless the environment variable `NODE_ENV=production` is set.
### Sending a notification
To send a notification you will first need a device token from your app as a string```javascript
let deviceToken = "a9d0ed10e9cfd022a61cb08753f49c5a0b0dfb383697bf9f9d750a1003da19c7"
``````javascript
var note = new apn.Notification();note.expiry = Math.floor(Date.now() / 1000) + 3600; // Expires 1 hour from now.
note.badge = 3;
note.sound = "ping.aiff";
note.alert = "\uD83D\uDCE7 \u2709 You have a new message";
note.payload = {'messageFrom': 'John Appleseed'};
note.topic = "";
```Send the notification to the API with `send`, which returns a promise.
```javascript
apnProvider.send(note, deviceToken).then( (result) => {
// see documentation for an explanation of result
});
```This will result in the the following notification payload being sent to the device
```json
{"messageFrom":"John Appelseed","aps":{"badge":3,"sound":"ping.aiff","alert":"\uD83D\uDCE7 \u2709 You have a new message"}}
```You should only create one `Provider` per-process for each certificate/key pair you have. You do not need to create a new `Provider` for each notification. If you are only sending notifications to one app then there is no need for more than one `Provider`.
If you are constantly creating `Provider` instances in your app, make sure to call `Provider.shutdown()` when you are done with each provider to release its resources and memory.
## Troubleshooting
You are encouraged to read the extremely informative [Troubleshooting Push Notifications](http://developer.apple.com/library/ios/#technotes/tn2265/_index.html) Tech Note in the first instance, in case your query is answered there.
## History
### v1.2.0
- return potential error response body as object instead of string (fixes #4)
### v1.1.0
- add option to hide "ExperimentalWarning: The http2 module is an experimental API." message
### v1.0.1
- fix base64 encoded p8 token string not being correctly identified as a string
### v1.0.0
- returned promise from `.send()` is now compatible with the one that `node-apn` normally returned