Dead simple Microservice for push notifications on iOS and Android.
-
Download
git clone https://github.com/Jasonette/micropush.git
-
Set up
-
Get private keys
- iOS : Generate a p8 file from Apple developers website and paste the p8 file into micropush root folder
- Android : Sign up to Google Firebase and get your Firebase Cloud Messaging API key
-
Update
.env
file: Open the.env
file inside the root directory and make changes.- If supporting iOS
- update the
ios_p8
attribute value with the name of thep8
file you pasted (example:apns.p8
) - update both the
ios_keyid
andios_teamid
with corresponding values (Learn how to retrieve keyid and teamid)
- update the
- If supporting Android,
- update the
android_apikey
attribute with the api key we got from "Get private keys" step.
- update the
- If supporting iOS
-
-
Deploy
- Development: Just run
npm start
to run the server on localhost - Production: Push to heroku or wherever you want. That's it!
- Development: Just run
Sending a push is a simple as:
- making a POST request of
'Content-Type': 'application/json'
- to your Micropush server endpoint
- with a JSON payload that follows the convention described below:
The payload contains two attributes:
- type: Either
$push.android
or$push.ios
- options: options to send to micropush. Micropush will interpret this JSON depending on whether it's
$push.android
or$push.ios
.
Micropush will interpret the options
object based on the type
attribute. See below section for details.
In case of Android, the protocol is straight-forward. It completely follows the Firebase Cloud Messaging HTTP protocol: https://firebase.google.com/docs/cloud-messaging/http-server-ref
Here's an example (Notice that the options
object follows the FCM Downstream HTTP messages protocol :
{
"type": "$push.android",
"options": {
"to": "[DEVICE_TOKEN_GOES_HERE]",
"data": {
"href": {
"url": "https://news.ycombinator.com",
"view": "web"
}
},
"priority": "high",
"notification": {
"title": "android",
"sound": "default",
"body": "this is a message for android"
}
}
}
In case of iOS it's not interpreted literally. Instead there are 3 attributes:
- to: Must contain two sub-attributes "token" and "topic"
- token: Device token to send push to
- topic: Your app's bundle id
- notification: This part represents the aps payload you send to APNS.
- data: Custom JSON payload which is accessible as
userInfo
inside application:didReceiveRemoteNotification:
Here's an example JSON payload for iOS:
{
"type": "$push.ios",
"options": {
"to": {
"token": "[DEVICE_TOKEN_GOES_HERE]",
"topic": "[APP_BUNDLE_ID_GOES_HERE]"
},
"data": {
"href": {
"url": "https://news.ycombinator.com",
"view": "web"
}
},
"notification": {
"alert": "\uD83D\uDCE7 \u2709 You have a new message",
"sound": "default"
}
}
}
- Check out
/test
folder for console based examples. - Check out Micropusher to instantly try on the web