📣 Glide Push Notifications (2025 Tutorial)

What’s Up Gliders!

In this video, I walk you through the process of setting up push notifications for your Glide App using OneSignal. We start by creating a free account on Netlify and uploading two essential files to spin up a “mini website”. Then, I guide you through configuring OneSignal, including creating a new app and customising the push prompt. Finally, I demonstrate how to set up the necessary columns in Glide to manage user notifications effectively.

There may be other (possibly better) methods, but this is a bare-bones illustration of how you can enable push notifications without too much hassle.

Improvements:
If you wanted to make this more robust and offer a better UX, you can (for example) modify the code for the mini website so it sends a post request to Glide to automatically mark “Push Notifications/Enabled” as true, thus removing the need for them to click “Done”. There are, of course, many other tweaks you can make to improve this setup (like redirecting back to Glide after successfully enabling notifications, adding links to notifications, etc)… But the goal with this video was to show the underlying structure of how you can enable notifications without getting too far into the weeds!

If you are on the Glide Free plan (or don’t have access to workflows/call api):
The only part of this tutorial that you’ll need a different method for is the triggering of the Push Notifications (Call API) and the “Open Link” workflow (as far as I know).

There are several work-arounds:

  1. For the 2-step “Open Link” workflow, you can just have them open the link, enable notifications, then close the tab. The only reason we have the work flow is to conditionally change the interface based on their status, but ultimately, as long as they have clicked that button, opened the link, and enabled notifications… You should be good to go.
  2. For the Call API workflow that actually triggers the notifications to send, you can try to use the native Glide “Send Email” action to send an email to a specific email address. To test this (it worked) I created an n8n scenario that watched my inbox for emails with a specific subject line, and when it found an email that matched it, it used code node extract the heading, content and emails from the email body, then used a HTTP node to send an API call to OneSignal, thus pushing the notification to your users. I’m sure there are other ways, perhaps some others from the community can find some work-arounds too!

Either way, below are the files you need for the mini website.

Enjoy! :popcorn:

:globe_with_meridians: 𝗠𝗶𝗻𝗶 𝗪𝗲𝗯𝘀𝗶𝘁𝗲 𝗙𝗶𝗹𝗲𝘀 :globe_with_meridians:

:scroll: 𝗖𝗼𝗱𝗲 𝗦𝗻𝗶𝗽𝗽𝗲𝘁𝘀 :scroll:

18 Likes

Nice one!

Would this handle deeplinks that open to the relevant screen in the installed app (not in browser)?

2 Likes

Thank you!

As for deeplinks, I haven’t tested it out… But my gut says it should be possible :thinking:

Android is apparently more reliable in this regard, because it recognises that the URL is “owned” by the PWA (Glide App) and therefor routes it to the installed app (if it exists). IOS is a little less reliable (I think)… but it’s still worth testing!

Some related links:

2 Likes

Thank you Soooooo much for this. I’m a Genuine noob, but Notifications are so important to my MVP, I followed your tute to the letter, and I’ve gone over the code 100 times. But I just cant get this to work. The differences that I have found is… when I click Enable, it brings up the netify site with the enable button, but if I click on my iPhone (latest phone and software) nothing happens, If I do on a desktop it subscribes but I don’t get a “done” or any indication to close the window it just says (see att) Onesignal confirms it has a new user but, I don’t see an indication of my email address. When I then test the push, all works from Glide end, but I don’t see any way in OneSignal to indicate if any data had been received; it just has a new user and that’s about it, it sends no data out again to that user.I know this is needle in a heystack but anything I should look for I might not have done?

1 Like

Hey!

If you want to use backend workflows, you won’t be able to use the JavaScript column. Here the changes to make it works without JavaScript:

  1. Change the joined list column separator: ”, “
  2. Instead of the JS column, create a template column and set the template to : ["elements"] then replace elements with the emails columns:

Result for more than 1 email:
image

For one email only:

This is reply for another post that concerns this actual thread.

@Laurence_Schuberth

Ok, first thing, I found out that by adding “Included_segments”, the call doesn’t fail anymore.

{
  "app_id": "appid",
  "target_channel": "push",
  "headings": {
    "en": "{{header}}"
  },
  "contents": {
    "en": "{{contents}}"
  },
  "included_segments": ["All"],
  "includes_aliases": {
    "external_id": {{emails}}
  }
}

Secondly, OneSignal doesn’t allow you to setup external ID anymore from the client. You need to use the API to do so. But I found a workaround.
In the index.html file of the netlify app, replace the addAlias line:

//OneSignal.User.addAlias("external_id", externalID);
OneSignal.User.addAlias("user_id", externalID);

By doing this, you will still be able to interact with the View user API route from OneSignal by refering the alias label as user_id:

https://api.onesignal.com/apps/{app_id}/users/by/{alias_label}/{alias_id}
Replace {app_id} by the app id of OneSignal
Replace {alias_label} by "user_id"
Replace {alias_id} by the email.

And good news, It also works with includes_aliases! So you can replace the code for the call API with this one:

{
  "app_id": "appid",
  "target_channel": "push",
  "headings": {
    "en": "{{header}}"
  },
  "contents": {
    "en": "{{contents}}"
  },
  "included_segments": ["All"],
  "includes_aliases": {
    "user_id": {{emails}}  // <=== "external_id" replaced with "user_id"
  }
}

It is now working perfectly fine for me!

Don’t hesitate to ping me if you need further help!

2 Likes

Update: @Laurence_Schuberth
I am a bit suprised, but I somehow add external Id on user creation with OneSignal.login(externalID) from the netlify app.

Here is my working index.html:

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
    <script
      src="https://cdn.onesignal.com/sdks/web/v16/OneSignalSDK.page.js"
      defer
    ></script>
    <script>
      window.OneSignalDeferred = window.OneSignalDeferred || [];
      OneSignalDeferred.push(async function (OneSignal) {
        const urlParams = new URLSearchParams(window.location.search);
        const appId = urlParams.get("appId");
        const externalID = urlParams.get("externalID");
        await OneSignal.init({
          appId: appId,
        });

        await OneSignal.login(externalID);
        console.log(OneSignal.User.onesignalId);

        OneSignal.User.PushSubscription.addEventListener("change", (event) => {
          if (event.current.optedIn) {
            if (externalID) {
                document.getElementById("success-display").textContent =
                "Done! You can now close this page.";
              document.getElementById("success-display").style.display =
                "block";

              document.querySelector(
                ".onesignal-customlink-container"
              ).style.display = "none";
            }
          }
        });
      });
    </script>
  </head>
  <body>
    <div class="onesignal-customlink-container"></div>

    <div
      id="success-display"
      style="
        display: none;
        margin-top: 20px;
        padding: 10px;
        background: #e8f5e8;
        border: 1px solid #4caf50;
        border-radius: 4px;
      "
    ></div>
  </body>
</html>

By the way, in the OneSignal Site Setup, enable the auto resubscribe.
image

2 Likes

@MaximeBaker OMG thank you so much for this. My coding is not my strong point, but I’ll dive in and see how I go, knowing that someone like you now has a working model is fantastic cause you’ve proved it works, so it’s just up to me to get it right. I’ll report back on my efforts. Thank you again so much :slight_smile:

2 Likes

Wow congrats! Thank you so much!

Ping me anytime!

2 Likes