Technical reference
Entry point for the technical team that is going to integrate with Reskyt.
The push API is the public Reskyt API currently available.
| API | What for | Authentication |
|---|---|---|
| Push notifications | Send notifications from your systems | x-api-key |
If you need to integrate another way, it is usually solved from the web or through a module. See integrations and SDKs.
Detecting that you are inside the app
Section titled “Detecting that you are inside the app”Every request that leaves the app includes the rktwebview identifier in the
user agent. It is the reference check.
const isReskytApp = navigator.userAgent.includes('rktwebview');There is also the is_app cookie, which is 1 whenever the code is running
inside the app.
Custom User Agent
Section titled “Custom User Agent”In addition to the rktwebview identifier, which is always sent, you can add a
tag of your own to the user agent to tell platforms apart in your analytics or
in your backend, of the form clientname_app_IOS or clientname_app_ANDROID.
It is configured in Settings › Parameters › App › Custom User Agent.
const ua = navigator.userAgent;const isIOSApp = ua.includes('_app_IOS');Cookies
Section titled “Cookies”| Cookie | Persistence | What it is for |
|---|---|---|
uuid_app | Until the app is uninstalled | Identifier of the app installation on that device. It lets you link the device with a user profile in your database and keep the login persistent. |
token_md5 | Until the app is uninstalled | Push token of the device. It exists only if the user accepted notifications. |
is_app | Session | It is 1 whenever the code is running inside the app. |
function getCookie(name) { return document.cookie .split('; ') .find((row) => row.startsWith(name + '=')) ?.split('=')[1];}localStorage
Section titled “localStorage”install_date
Section titled “install_date”Installation date of the app, stored as JSON:
{ "value": 1749133186, "expire": ""}value is a Unix timestamp in seconds. The expire field is for internal use
and does not affect the installation date. It is useful for knowing how long a
user has been on the app, for example for onboarding, reactivation campaigns or
surveys after X days.
const raw = localStorage.getItem('install_date');const installedAt = raw ? new Date(JSON.parse(raw).value * 1000) : null;window variables
Section titled “window variables”| Variable | Value | Notes |
|---|---|---|
firstCall | 1 | Indicates the user’s entry into the app. It does not detect the first launch after installing: it resets on every session. |
window.ReskytLayout.device.getHashedInstallationId()
Section titled “window.ReskytLayout.device.getHashedInstallationId()”Returns the hashed installation ID of the device, which is the value sent in the
deviceId field of the push API.
The recommended flow is to first check that the user agent contains
rktwebview, call the method during login or sign-up, store the returned value
and associate it with the corresponding user in your systems. From then on that
identifier is the one used to target sends.
if (navigator.userAgent.includes('rktwebview')) { const hashedInstallationId = window.ReskytLayout.device.getHashedInstallationId(); // Store it associated with the user in your database.}UTM parameters
Section titled “UTM parameters”The app can add UTM parameters to the URLs it opens, so that your analytics can tell app traffic apart from web traffic. They are configured in Settings › Parameters › App › UTM.
| Parameter | Typical value |
|---|---|
utm_source | app.reskyt.com when the app is opened directly, push.reskyt.com when the session comes from a notification |
utm_medium | referral by default |
Deeplink behaviour
Section titled “Deeplink behaviour”When a deeplink opens the app that is already installed, all queryParams are propagated as they are to the WebView.
If the link does not carry utm_source or utm_medium, the system fills them
in:
utm_mediumtakes the source platform (Google, Instagram…), withexternal_appas the default value if it cannot be determined.utm_sourcetakes the valuedeeplink.
Where to go next
Section titled “Where to go next”Integrations and SDKs explains the available integration routes and what each one involves in the publication cycle. The module catalogue lists what is already integrated.
Deep links covers Universal Links on iOS and App Links on Android. Authentication and sessions explains where the boundary of responsibilities lies in login.