SDK
SDK is a set of tools that you can use to manage resources on PushPushGo application. For the full SDK API documentation check the API section.
To start using SDK you need to have a PushPushGo account. If you don’t have it, you should register first.
- 1.
- 2.Create a project
Properties that you need to configure SDK are:
isHTTPS
- whether your project is usinghttps
orhttp
protocol
Once you have a project in the application you can setup the SDK client.
- 1.Add script tag to head section of your html file
index.html
<head>
<script src="https://cdn.pushpushgo.com/scripts/sdk.js"></script>
</head>
2. Put
sw.js
file under root path of your service, with the projectId
value from the applicationsw.js
importScripts('https://cdn.pushpushgo.com/$projectId/worker.js');
If you already have the
sw.js
file in your service, add the above content to itIf you put
sw.js
file in other path than root, specify it on client initialization with additional param swPath: '$serviceWorkerPath'
3. Initialize the client
const config = {
projectId: $projectId,
vapidPublicKey: $vapidPublicKey,
isHTTPS: $isHTTPS,
endpoint: 'https://api.pushpushgo.com',
swPath?: $serviceWorkerPath,
websitePushId?: $websitePushId,
};
const client = new ppg.sdk.Client(config);
With the SDK client configured, except from basic subscription to web push notifications, you can use it to create your own component for subscribing to web push notifications, segment your subscribers with tags, link them with your CRM database by setting custom id, or send data for automation purposes.
- 1.Initialize SDK client
- 2.Use it to add web push registry functionality to button elements
subscribe.js
index.html
sw.js
let client;
function getClient() {
if (!client) {
const config = {
projectId: $projectId,
isHTTPS: $isHTTPS,
vapidPublicKey: $vapidPublicKey,
endpoint: 'https://api.pushpushgo.com',
};
client = new ppg.sdk.Client(config);
}
return client;
}
function subscribeButtonClickedHandler(event) {
event.preventDefault();
client
.register()
.then(subscriberId => {
setState(`user subscribed with id: ${subscriberId}`, false)
});
}
function unsubscribeButtonClickedHandler(event) {
event.preventDefault();
client
.unsubscribe()
.then(() => {
setState('user unsubscribed', true)
});
}
function setState(status, canSubscribe) {
const li = document.createElement('li');
li.innerText = status;
document.querySelector('#state').appendChild(li);
document.querySelector('#unsubscribe').disabled = canSubscribe;
document.querySelector('#subscribe').disabled = !canSubscribe;
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Subscribe button demo</title>
<script src="https://cdn.pushpushgo.com/scripts/sdk.js"></script>
<script type="application/javascript" src="subscribe.js"></script>
</head>
<body>
<ul id="state">
<li>checking push notifications state...</li>
</ul>
<button id="subscribe" disabled="disabled">click to subscribe</button>
<button id="unsubscribe" disabled="disabled">click to unsubscribe</button>
</body>
<script>
window.addEventListener('load', function() {
const unsubscribeButton = document.querySelector('#unsubscribe');
const subscribeButton = document.querySelector('#subscribe');
subscribeButton.addEventListener('click', subscribeButtonClickedHandler);
unsubscribeButton.addEventListener('click', unsubscribeButtonClickedHandler);
getClient()
.isPushSupport()
.then(() => client.isSubscribed())
.then(() => client.getId())
.then(subscriberId => {
setState('push notifications are supported');
if (!subscriberId) {
setState('activate subscribe button', true);
} else {
setState('user already subscribed with id: ' + subscriberId, false);
}
})
.catch((err) => {
setState('ops, sth went wrong, check console')
console.log(err)
setState('push notifications are not supported')
});
});
</script>
</html>
importScripts('https://cdn.pushpushgo.com/$projectId/worker.js');
3. To test if the subscription was successful, you can send a transactional web push notification via API
subscriberId
- from demo
curl --request POST \
--url https://api.pushpushgo.com/project/$projectId/send/push \
--header 'accept: application/json' \
--header 'x-token: $x-token \
--header 'content-type: application/json' \
-d '{"to": $subscriberId, "message": {"title": "sdk example title", "body": "test sdk subscription example", "icon": "https://via.placeholder.com/150/150", "redirectLink": "https://www.google.com/"}}'
You can link web push
subscriberId
with your own identifier by setting the customId
with client.setCustomId()
subscribe.js
index.html
sw.js
let client;
function getClient() {
if (!client) {
const config = {
projectId: $projectId,
isHTTPS: $isHTTPS,
vapidPublicKey: $vapidPublicKey,
endpoint: 'https://api.pushpushgo.com',
};
client = new ppg.sdk.Client(config);
}
return client;
}
function subscribe() {
getClient()
.isPushSupport()
.then(() => client.isSubscribed())
.then(isSubscribed => {
if (!isSubscribed) {
return client.register();
} else {
return client.getId();
}
})
.catch(() => console.log('push is not supported'));
}
function setState(status) {
const li = document.createElement('li');
li.innerText = status;
document.querySelector('#state').appendChild(li);
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Set customId demo</title>
<script src="https://cdn.pushpushgo.com/scripts/sdk.js"></script>
<script type="application/javascript" src="subscribe.js"></script>
</head>
<body>
<div id="crmId">SomeIdentifier</div>
<ul id="state">
<li>checking push notifications state...</li>
</ul>
</body>
<script>
window.addEventListener('load', function() {
const crmId = document.querySelector('#crmId').innerText;
subscribe()
.then(() => client
.setCustomId(crmId)
.then(() => setState('subscriber customId set to' + crmId))
.catch((err) => {
setState('ops, sth went wrong, check console')
console.error(err)
});
});
</script>
</html>
importScripts('https://cdn.pushpushgo.com/$projectId/worker.js');
subscribe.js
index.html
sw.js
let client;
function getClient() {
if (!client) {
const config = {
projectId: $projectId,
isHTTPS: $isHTTPS,
vapidPublicKey: $vapidPublicKey,
endpoint: 'https://api.pushpushgo.com',
};
client = new ppg.sdk.Client(config);
}
return client;
}
function subscribe() {
getClient()
.isPushSupport()
.then(() => client.isSubscribed())
.then(isSubscribed => {
if (!isSubscribed) {
return client.register();
} else {
return client.getId();
}
})
.catch(() => console.log('push is not supported'));
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Add subscriber tags</title>
<script src="https://cdn.pushpushgo.com/scripts/sdk.js"></script>
<script type="application/javascript" src="subscribe.js"></script>
</head>
<body>
</body>
<script>
window.addEventListener('load', function() {
subscribe()
.then(() => Promise.all([
client.appendTags(['Demo tag', 'Other demo tag']),
client.appendTags(['label:tag']),
]))
.then(() => client.send());
});
</script>
</html>
importScripts('https://cdn.pushpushgo.com/$projectId/worker.js');
When you have automation configured in the app.pushpushgo, you will need to feed it with data, by sending a beacon by
client.send()
. Assume you have a selector with a name basket
defined in the application, and you need to set it's value for the automation. In addition lets operate on tags that might be used in automation conditions and set the Custom ID.subscribe.js
index.html
sw.js
let client;
function getClient() {
if (!client) {
const config = {
projectId: $projectId,
isHTTPS: $isHTTPS,
vapidPublicKey: $vapidPublicKey,
endpoint: 'https://api.pushpushgo.com',
};
client = new ppg.sdk.Client(config);
}
return client;
}
function subscribe() {
getClient()
.isPushSupport()
.then(() => client.isSubscribed())
.then(isSubscribed => {
if (!isSubscribed) {
return client.register();
} else {
return client.getId();
}
})
.catch(() => console.log('push is not supported'));
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Set automation data</title>
<script src="https://cdn.pushpushgo.com/scripts/sdk.js"></script>
<script type="application/javascript" src="subscribe.js"></script>
</head>
<body>
</body>
<script>
window.addEventListener('load', function() {
subscribe()
.then(() => Promise.all([
client.setSelector('basket', 19),
client.appendTags(['Some condition tag', 'Other demo tag']),
client.addTagsToRemove(['label:tag']),
client.setCustomId('SomeIdentifier')
]))
.then(() => client.send());
});
</script>
</html>
importScripts('https://cdn.pushpushgo.com/$projectId/worker.js');
Last modified 1yr ago