ibm-mfp-web-push
Version:
IBM MFP Web Push SDK
202 lines (180 loc) • 6.16 kB
Markdown
# IBM MFP Web Push SDK
#### IBM Mobile Foundation Platform brings to you extended support for Push Notifications - now on Web.
---
#### Installation Guide:
- Run `npm i ibm-mfp-web-push` at the root of your project.
- Register ServiceWorker with your web app. Copy `MFPPushServiceWorker.js` from `node_modules/ibm-mfp-web-push` to your public assets directory.
- Open your `index.html` file and copy paste the following code inside the head tag:
```
<script>
if (navigator.serviceWorker) {
navigator.serviceWorker.register(<PATH-TO-COPIED-SERVICE-WORKER-FILE>).then(function(reg) {
window.pushReg = reg;
if (reg.installing) {
console.info('Service worker installing');
} else if (reg.waiting) {
console.info('Service worker installed');
} else if (reg.active) {
console.info('Service worker active');
}
if (!(reg.showNotification)) {
console.info('Notifications aren\'t supported on service workers.');
}
// Check if push messaging is supported
if (!('PushManager' in window)) {
console.info("Push messaging isn't supported.");
}
if (Notification.permission === 'denied') {
console.info('The user has blocked notifications.');
}
}).catch(err => {
console.error(JSON.stringify(err));
});
} else {
console.info("Service workers aren't supported in this browser.");
}
</script>
```
- Create a `manifest.json` file under the same assets directory where you put `MFPPushServiceWorker.js` and copy the following into it:
```
{
"name": "<APP-NAME>",
"gcm_sender_id": "<YOUR-FCM-SENDER-ID-HERE>"
}
```
- Link the above created `manifest.json` to your `index.html` as follows:
```
<link rel="manifest" href="<PATH-TO-PUBLIC-ASSETS-DIRECTORY>/manifest.json">
```
That's it, you are good to start with Web Push APIs now.
---
#### Using IBM MFP Web Push SDK:
- `import MFPPush from 'ibm-mfp-web-push';`
- Initialize Web Push SDK:
```
var pushInitOptions = {
appId: "com.push.app",
serverUrl:"https://mfp-server-url.com",
safariWebsitePushId:"web.com.mfp-server-url"
};
MFPPush.initialize(pushInitOptions);
```
Here,
- `appId` - Application ID registered with MobileFirst Server
- `serverUrl` - the URL to your MobileFirst Server
- `safariWebsitePushId` - [optional] if Safari Platform needs to be supported.
- Register Device:
```
MFPPush.registerDevice().then(res => {
console.log("register");
alert("Successfully Registered Device...");
}).catch(err => {
console.log("register");
console.log("Registration Failed" + err);
});
```
- Un-registering Device:
```
MFPPush.unregisterDevice().then(res => {
console.log("register");
alert("Successfully Un-registered Device...");
}).catch(err => {
console.log("register");
console.log("Unregistration Failed" + err);
});
```
- Subscribing to a Tag:
```
MFPPush.subscribe("offers").then((res) => {
console.log("subscribe");
alert("Subscribed successfully...");
})
.catch((err) => {
console.log("subscribe");
console.log(JSON.stringify(err));
});
```
- Unsubscribing from a Tag:
```
MFPPush.unsubscribe("offers").then((res) => {
console.log("unsubscribe");
alert("You are now unsubscribed from 'offers'. Sorry to see you go! :(");
})
.catch((err) => {
console.log("unsubscribe");
console.log(JSON.stringify(err));
});
```
- Retrieve available Tags:
```
MFPPush.retrieveAvailableSubscriptions().then((res) => {
console.log("availableTags");
/**
* res.tags is an array of tags
*/
var result = "Available Tags are: \n\n";
for(var i in res.tags) {
result += "-> ";
result += res.tags[i].name + "\n";
}
alert(result)
})
.catch((err) => {
console.log("availableTags");
console.log(JSON.stringify(err));
});
```
- Retrieve active Subscriptions:
```
MFPPush.retrieveActiveSubscriptions().then((res) => {
console.log("currentSubscriptions");
/**
* res.subscriptions is an array of tags
*/
var result = "Current subscriptions: \n\n";
for(var i in res.subscriptions) {
result += "-> ";
result += res.subscriptions[i].tagName + "\n";
}
alert(result);
})
.catch((err) => {
console.log("currentSubscriptions");
console.log(JSON.stringify(err));
});
```
#### Setting up Proxy for IBM MFP Web Push SDK:
In your web app, you will need to write proxy configuration. An example for the same is given below:
Using nodejs, expressjs, http-proxy-middleware:
```
const proxy = require("http-proxy-middleware");
const express = require("express");
const path = require("path");
const app = express();
app.use(express.static(path.join(__dirname, "build")));
app.use(
proxy("/mfp/api/imfpush/", {
target:
"https://mfp-server-url.com/",
changeOrigin: true,
pathRewrite: function (path, req) {
console.log("Rewrite in /mfp/api/imfpush/: ", path);
return path.replace("/mfp/api", "");
},
})
);
app.use(
proxy("/mfp/api", {
target:
"https://mfp-server-url.com/",
changeOrigin: true,
pathRewrite: function (path, req) {
console.log("Rewrite in /mfp/api: ", path);
return path;
},
})
);
```
If you are using something else than what is shown in the above example, basically your proxy needs to interrupt calls as below:
1. From **/mfp/api** : forward these APIs as is to your MFP server url
2. From **/mfp/api/imfpush** : truncate the prefix "/mfp/api" and forward the API to your MFP server url