Web Push Notification

Send web push notification with ease and zero cost on scale.

Prerequisites

Taak SDK JS

We use Taak SDK JS as client side library. Full source code is available at here

npm i taak-sdk


Check permission

Following code is for React library, but basically must work in both TypeScript and JavaScript projects.

Check if permission given
  const checkIfPermissionGiven = async () => {
    const res: TaakResponse = await taakSdkClient.checkIfPermissionGiven(true)
    if (res.status) {
      if (res.data === 'denied') {
        presentToast({
          message: `Permission denied, you need to unblock ${window.location.origin} in your browser to receive notifications.`,
          duration: 3000,
          color: 'danger'
        })
      } else {
        presentToast({ message: res.error, color: 'danger', duration: 3000 })
      }
      setWebPushEnabled(false)
    }
  }

WebPushToggle.tsx

Subscribe

Check if subscribed
  const checkIfSubscribed = async () => {
    setInprogress(true)
    const res: TaakResponse = await taakSdkClient.checkIfSubscribed(true)
    if (res.status) {
      presentToast({ message: res.error, color: 'danger', duration: 3000 })
    } else {
      await subscribe(res.data)
    }
    setInprogress(false)
  }

WebPushSubscribeButton.tsx

Subscribe
  const subscribe = async (subscription: PushSubscription) => {
    const subscriptionObject = JSON.parse(JSON.stringify(subscription))
    const cmd: WebPushSubscribeCommand = {
      userId,
      deviceId: `${osName}::${browserName}::${browserVersion}`,
      endpoint: subscription.endpoint,
      key: subscriptionObject.keys.p256dh,
      auth: subscriptionObject.keys.auth,
    }
    const res: TaakResponse = await taakSdkClient.subscribeWebPush(cmd)
    if (res.status === 201) {
      presentToast({ message: 'Success subscription', color: 'success', duration: 3000 })
      onSuccess(res.data)
    }
    else
      presentToast({ message: 'Error subscribing ' + res.status, color: 'danger', duration: 3000 })
  }

WebPushSubscribeButton.tsx

Send

Send web push
  const sendTest = async (item: WebPushDTO) => {
    setSending(true)
    const cmd: WebPushSendCommand = {
      payload: 'Hello World',
      publicId: item.publicId,
    }
    const res: TaakResponse = await taakSdkClient.sendWebPush(cmd)
    presentToast({ message: `Success sending push with status ${res.status}`, duration: 3000 })
    setSending(false)
  }

WebPushSubscriptionList.tsx

List

Subscription list
  const fetchItems = async () => {
    setInprogress(true)
    const res: TaakResponse = await taakSdkClient.getWebPushesByUserId(userId)
    if (res.status === 200)
      setItems(res.data)
    setInprogress(false)
  }

WebPushSubscriptionList.tsx

Delete

Delete an subscription
  const deleteItem = async (item: WebPushDTO) => {
    setDeleting(true)
    const res: TaakResponse = await taakSdkClient.deleteWebPush(item.publicId)
    if (res.status === 204) {
      presentToast({ message: 'Success deleting subscription', duration: 3000 })
      await fetchItems()
    }
    setDeleting(false)
  }

WebPushSubscriptionList.tsx

Test suite

index.test.ts

Products - Series

This series guides you through our products

×

Subscribe

The latest tutorials sent straight to your inbox.