How is your experience with the OutSystems Community?
8
Views
5
Comments
Solved by AI
Why the deeplink sent to email does not work?
Question
Application Type
Mobile

Hi there, 

I am trying to create deep link in email to call a screen in a mobile app:

com.outsystems.ibdeeplink://DeepLinkMob/TestMe 

but it does not work, saying:

com.outsystems.ibdeeplink's server ip address could not be found.

But it works if i run in  outsystems reactive web using Redirect to URL.

How to solve this?

thanks

2023-12-26 10-35-28
OutSystems Neo
Staff
Solution by AI
AI Generated

To implement the “short timeout” before a fallback, use setTimeout in the same JavaScript where you trigger the deep link.

Example for your redirect screen (Reactive/Web):

// 1. Try to open the mobile app
window.location = 'com.outsystems.ibdeeplink:///DeepLinkMob/TestMe?Code=' + $parameters.Code;

// 2. After N ms, go to fallback (e.g. store or web screen)
setTimeout(function () {
  window.location = 'https://yourserver.com/FallbackOrStore';
}, 3000); // 3000 ms = 3 seconds

Key points:

If you want the timeout to be configurable, pass the value from an input parameter or site setting and concatenate it into the JS instead of hard‑coding 3000.

This answer was AI-generated. Please read it carefully and use the forums for clarifications
2023-12-26 10-35-28
OutSystems Neo
Staff
AI Generated

You’re mixing two different things:

  • Deep link for the native mobile app (custom scheme)
  • Normal HTTP/HTTPS URL used in a browser / Reactive app

In an email, when you click com.outsystems.ibdeeplink://DeepLinkMob/TestMe, your device/email client is trying to resolve it like a web URL, so it looks for a server named com.outsystems.ibdeeplink and fails with “server IP address could not be found”. That’s why it works in Reactive (Redirect to URL) but not from the email.

For an OutSystems mobile app the deep link syntax is:

<app_identifier>:///<Module>/<Screen>?Param1=...&Param2=...

Notes:

  • app_identifier is the App Identifier you configured when generating the native app package, in lowercase.
  • There are three slashes after the scheme.

Example:

com.outsystems.ibdeeplink:///DeepLinkMob/TestMe

If the screen has an input parameter, for instance Code, you’d use:

com.outsystems.ibdeeplink:///DeepLinkMob/TestMe?Code=123

Deep-link syntax reference: How to define Mobile App deep links

2. Why it fails from email

Several email clients / mobile OSes do not automatically treat custom schemes (com.outsystems.ibdeeplink://) as clickable links, or they try to open them as normal URLs (hence the DNS error). This is a known limitation mentioned in similar forum threads. Deep link inside email

Also:

  • Deep links only work if the native app is installed. If not, nothing should happen by default.
  • Behavior differs between iOS and Android and even between email clients.

A common pattern is:

  1. In the email, don’t send com.outsystems.ibdeeplink://....

  2. Send a normal HTTPS link, e.g.:

    https://yourdomain.com/DeepLinkRedirect?code=...
    
  3. That link opens a web screen (Reactive/Web) which:

    • Detects the device (JS)

    • Attempts to open the deep link:

      window.location = 'com.outsystems.ibdeeplink:///DeepLinkMob/TestMe?Code=...';
      
    • If the app doesn’t open in a short timeout, redirect the user to a fallback URL (e.g. App Store / Play Store or a web version).

This “redirect page + JS” approach is what OutSystems also recommends and what community components implement (“Deeplink Web” / “Deferred deep linking”). Deep link inside email

4. Checklist

  • Confirm your App Identifier (in the native build config) matches com.outsystems.ibdeeplink and is lowercase. How to define Mobile App deep links
  • Use the three-slash format: com.outsystems.ibdeeplink:///DeepLinkMob/TestMe.
  • Test the deep link directly on the device (e.g., paste into mobile browser address bar) to validate it opens the correct screen.
  • In emails, use an HTTPS redirect page and from there open the deep link via JavaScript instead of placing the custom scheme URL directly into the email.

If you share which OS you’re testing on (iOS/Android) and the email client, I can outline a more specific JS snippet and fallback flow.

This answer was AI-generated. Please read it carefully and use the forums for clarifications
2025-01-09 14-56-57
IQ78
on what event should i put the window.location javascript code?
2023-12-26 10-35-28
OutSystems Neo
Staff
AI Generated

Put the window.location (deep‑link) JavaScript in a Client Action that runs on screen load, typically in the On Initialize (or On Ready) of the Reactive/Web screen that you open from the email.

Flow is:

  1. Email link

    • Points to a normal HTTPS URL of a Reactive/Web screen, e.g.
      https://yourserver.com/DeepLinkRedirect?Code=123
  2. DeepLinkRedirect Screen

    • Has a Client Action set on its On Initialize (or On Ready).

    • Inside that action you place a Run JavaScript node:

      window.location = 'com.outsystems.ibdeeplink:///DeepLinkMob/TestMe?Code=' + $parameters.Code;
      
    • Optionally, after a short timeout, redirect to a fallback URL (store/app download).

This way the email only opens a normal web page (which all clients support), and that page immediately runs the JavaScript to trigger the custom‑scheme deep link. Implement deeplink in react web application

This answer was AI-generated. Please read it carefully and use the forums for clarifications
2025-01-09 14-56-57
IQ78
how to count the short timeout?
2023-12-26 10-35-28
OutSystems Neo
Staff
Solution by AI
AI Generated

To implement the “short timeout” before a fallback, use setTimeout in the same JavaScript where you trigger the deep link.

Example for your redirect screen (Reactive/Web):

// 1. Try to open the mobile app
window.location = 'com.outsystems.ibdeeplink:///DeepLinkMob/TestMe?Code=' + $parameters.Code;

// 2. After N ms, go to fallback (e.g. store or web screen)
setTimeout(function () {
  window.location = 'https://yourserver.com/FallbackOrStore';
}, 3000); // 3000 ms = 3 seconds

Key points:

If you want the timeout to be configurable, pass the value from an input parameter or site setting and concatenate it into the JS instead of hard‑coding 3000.

This answer was AI-generated. Please read it carefully and use the forums for clarifications
Community GuidelinesBe kind and respectful, give credit to the original source of content, and search for duplicates before posting.