UNPKG

ibm-mfp-web-push

Version:

IBM MFP Web Push SDK

202 lines (180 loc) 6.16 kB
# 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