Journeys FAQs

Journeys Template & Design FAQs

1. Can I add a second line of text?
You can add a second line of text to your Journey either before or after by adding it to the CSS element:

Before

#branch-banner .branch-banner-description::before { display: block; content: 'Chat with other Fans'; }
After

#branch-banner .branch-banner-description::after { display: block; content: 'Watch in Dark Mode'; }

2. Can I use a custom font?

1. Go to Google Fonts and select a font. Find the embed URL for the font you selected.

2. Add to CSS EDITOR in your Journey template. For example:
@import url('https://fonts.googleapis.com/css2?family=Roboto&display=swap');

Note: The trailing semicolon on @import line is important. It's always good to have a fallback web font in case the google font fails to load.

3. Can I localize the text of my Journey?

Client-side

You can easily customize the Journey text dynamically client-side using setBranchViewData and by reading the browser's language.

javascript var lang_code; if (navigator.languages && navigator.languages.length>0) { lang_code = navigator.languages[0]; } else if (navigator.language) { lang_code = navigator.language; } // Change Journeys text if language is Spanish (ES) if (lang_code == 'es') { branch.setBranchViewData( { data: { "$journeys_title": 'Mi App', "$journeys_description": 'Mi descripción', "$journeys_button_get_has_app": 'Avrir', "$journeys_button_get_no_app": 'Ver', } } ); }

Server-side
Journeys provides limited server-side localization. Please reach out to your account manager to receive access.

Client-side Javascript Journeys Controls FAQs

1. Can I block a Journey from showing using Javascript?

You can prevent Journeys from showing on a certain page by inserting no_journeys with the value of true into the options during initialization.

<script type="text/javascript"> // load the Branch SDK file branch.init('BRANCH_KEY', { 'no_journeys': true } ); </script>

2. Can I close a Journey Programmatically?

Journeys include a close button the user can click, but you may want to close the Journey with a timeout, or via some other user interaction with your web app.
In this case, closing the Journey is very simple by calling:

javascript branch.closeJourney(function(err) { console.log(err); });

3. Can I trigger a Journey to show?

If you block or programmatically close a Journey via one of the calls above, then you can trigger a Journey to show by firing the following event:

Javascript branch.track('pageview');

Note: If a user has closed a Journey in the past, then firing the aforementioned event will not override a user's preference.

4. Is there a way to disable Journeys animations?

You can disable Journeys animations on a page by setting two flags - disable_entry_animation and disable_exit_animation - when you’re calling either init() or track() with Branch’s Web SDK.

Journeys animations can be disabled in order to reduce the amount of time it takes to load a Journey on a page. They can also be disabled in order to improve Journeys UX on single-page web apps, where Journeys animations can be jarring. When switching between multiple Journeys on a single-page web app, remember to use setBranchViewData() to change the link behind the CTA.

To disable animations during initialization, insert disable_entry_animation and/or disable_exit_animation, with values of true, into the options:

javascript branch.init(‘BRANCH_KEY’, { ‘disable_entry_animation’ : true, ‘disable_exit_animation’ : true } );

To disable animations using track(), insert disable_entry_animation and/or disable_exit_animation, with values of true, into the event metadata:

javascript branch.track( ‘pageview’, {}, { ‘disable_entry_animation’ : true, ‘disable_exit_animation’ : true } );

5. Is there a way to set up a listener function to listen to events?
You can easily listen to Journeys lifecycle events by registering listener functions like so:

javascript var listener = function(event, data) { console.log(event, data); } // Specify an event to listen for branch.addListener('willShowJourney', listener); // Listen for all events branch.addListener(listener);

| Listener Name | Description |
| --- | --- |
| willShowJourney | Journey is about to be shown. |
| didShowJourney | Journey's entrance animation has completed and it is being shown to the user. |
| willNotShowJourney | Journey will not be shown and no other events will be emitted. |
| didClickJourneyCTA | User clicked on Journey's CTA button. |
| didClickJourneyClose | User clicked on Journey's close button. |
| willCloseJourney | Journey close animation has started. |
| didCloseJourney | Journey's close animation has completed and it is no longer visible to the user. |

Audience Filters FAQs

1. What are the limitations to has_app?
Several pieces of Journeys functionality rely on Branch’s understanding of whether an end-user has a customer’s app installed (indicated in Branch’s system using the has_app flag). For example, the CTA text on a Journey will only switch from “install” to “open” if Branch believes the app is installed on that user’s device.

Unfortunately, Branch does not - and cannot - know with 100% accuracy whether a given user actually has the app installed, since the operating systems (e.g. iOS, Android) do not make this information available to developers. We’ve developed our own methods for gleaning this information and while our methods are quite accurate, there are nevertheless opportunities for both false positives and false negatives. While these limitations shouldn’t discourage you from using features that rely on “has_app”, keep them in mind when designing your Journeys.

Several complicating factors are:
Install vs. Open: If a user installs an app but doesn’t open it, we won’t know that they have the app installed. Uninstalls: We won’t necessarily know if a user uninstalls an app, which could result in a false positive.

Apple’s Intelligent Tracking Prevention: As a result of ITP, we’re less accurate on Safari on iOS than on all other browsers. Time to update: Latency in our system occasionally means that for a given user, in the moments (or minutes) following an install, Journeys may not know that the install has occurred.

2. Can we force a Journey to auto-open the app for users that have it installed?
Yes! You can use Journeys to auto-open the app for users who have it installed by selecting the CTA in the template editor:

While the auto-open setting in the template editor will work on iOS Chrome and Android, there are some specific cases to be aware of:

The Web SDK’s auto-open can cause unexpected user experiences if used on web pages inside webviews in your own app, so it’s best to avoid that if possible. Auto-open will only work on Android Chrome from a link click; redirecting from a manually inserted URL will not auto-open the app.
* Because auto-open is powered by URI schemes and these can lead to error messages on iOS Safari for users without your app, this is not enabled on iOS by default.

If you would like the app to open automatically on iOS Safari as well, you'll need to use a setting called $uri_redirect_mode. Since Branch has a massive pool of cookies tied to device identifiers, we know if your app is installed when the user clicks a link. We use this intelligence to determine when to use URI schemes. You can reach out to Support to enable this behavior across all your links, or set it just for Journeys in the web SDK:

<script type="text/javascript"> // load the Branch web lib (function(b,r,a,n,c,h,_,s,d,k){if(!b[n]||!b[n]._q){for(;s<_.length;)c(h,_[s++]);d=r.createElement(a);d.async=1;d.src="build.min.js";k=r.getElementsByTagName(a)[0];k.parentNode.insertBefore(d,k);b[n]=h}})(window,document,"script","branch",function(b,r){b[r]=function(){b._q.push([r,arguments])}},{_q:[],_v:1},"addListener applyCode banner closeBanner creditHistory credits data deepview deepviewCta first getCode init link logout redeem referrals removeListener sendSMS setBranchViewData setIdentity track validateCode".split(" "), 0); // init Branch and pass in your preference to open the app branch.init('BRANCH_KEY'); // Trigger your Journeys banner to use the correct redirect mode branch.setBranchViewData({ '$uri_redirect_mode': 1 }); </script>
Or, set it for individual templates by adding deep link data $uri_redirect_mode:1:

Read our blog to learn more about the challenges of URI schemes on iOS and the URI redirect mode feature.

Scheduling FAQs

1. When does my scheduled Journey become active or stopped?
There can be up to a 5-minute delay between a scheduled time and your Journey becoming active or stopped.

2. How do I set an end date for a Journey with a recurring schedule?
This is not supported by scheduling at this time. To do this, set a start and stop time for your Journey and add your repeat rules. When you want the Journey to stop for good, stop it from the action menu or go to Edit Schedule > Delete.

Referring Link Data FAQs

1. Is there a way to preserve or discard referring link data?

By default, when users arrive on a page running Journeys via a Branch link and make_new_link is not set to true, then any interaction with the Journey (click/install/re-open) will be attributed to the referring Branch link, rather than to the Journey. If make_new_link is set to true, the same events will be attributed to the Journey, instead.

This can help you collect data on how the referring links are contributing to app growth/engagement, even when users aren’t installing from those links directly. For example, if a user clicked a Branch link on Facebook, landed on your website, and installed from a Journey, this would allow you to attribute the install to the link on Facebook. If the original link was also configured to deep link into your app, that deep link would be preserved, too.

Branch will pass the referring link into Journeys by default. In order to discard referring link data, include the make_new_link flag, with a value of true, into the options during initialization:

javascript branch.init( 'BRANCH_KEY', { 'make_new_link' : true } );

Updated 7 days ago

Journeys FAQs


Suggested Edits are limited on API Reference Pages

You can only suggest edits to Markdown body content, but not to the API spec.