James Boone, Author at Branch https://www.branch.io/resources/author/jamesboone/ Unifying user experience and attribution across devices and channels Fri, 20 Jun 2025 08:33:15 +0000 en-US hourly 1 Why New Features in Roku OS11 Matter for App Publishers https://www.branch.io/resources/blog/why-new-features-in-roku-os11-matter-for-app-publishers/ Mon, 04 Apr 2022 22:56:09 +0000 https://blog.branch.io/?p=6817 Released on March 22, 2022, Roku OS11’s latest version introduces a handful of new, helpful features. Major tech blogs have already explored how OS11 improves the consumer experience. We want to highlight how publishers can use these features to improve both their apps and their streaming content.  Measurement vs. attribution Before we dive into OS11,... Read more »

The post Why New Features in Roku OS11 Matter for App Publishers appeared first on Branch.

]]>
Released on March 22, 2022, Roku OS11’s latest version introduces a handful of new, helpful features. Major tech blogs have already explored how OS11 improves the consumer experience. We want to highlight how publishers can use these features to improve both their apps and their streaming content. 

Measurement vs. attribution

Before we dive into OS11, it is important we define two terms: “measurement” and “attribution.” Though often used interchangeably, “measurement” is commonly aligned with the term “analytics.” This term implies reporting on deltas, aggregated metrics, and useful cohorts displayed in charts or pivot tables. Branch’s “attribution” is the unique ability to identify where a user comes from, associate that to an app install, and track all subsequent events over time. Branch’s attribution is vital to marketers needing to know where they should be allocating advertising dollars and/or which campaigns are driving the desired results. 

The shift to OTT

With the 2021 privacy changes introduced by Apple — and more recently the planned changes introduced by Google — we are seeing a lot of customers shift budgets to find the best mix. The over-the-top (OTT) streaming video space is one area where budgets are landing. Connected TV (CTV) dominates OTT, and Roku dominates CTV, but streaming isn’t just happening on TVs. It’s capturing viewers on all internet-connected devices. 

58% of people globally (3.1B) use the internet to stream TV shows and movies,1 while 92% of the time spent streaming is on mobile, tablet, or TV.2 

Mobile devices account for a significant percentage of OTT activity, especially outside North America. Branch has a suite of products that can be used to improve the cross-platform, cross-device conversion metrics you are after. A lot of this blog will explore Roku OS11 features and how OTT can be measured with Branch’s native Roku SDK. Still, it’s important to know that the journey from mobile to TV to mobile is very fluid. If you’re looking to run mobile ad campaigns across all screen types (not just mobile), skip down to the Roku OneView section to learn more.

How Roku OS works

For those of you who might be new to Roku OS, don’t skip this section; it’s a high-level overview. For all others, feel free to skip a couple paragraphs to learn how you can leverage some of the newest features.

Roku OS is written in a Roku-specific programming language called BrightScript with a visualization framework called SceneGraph. You know, a bytecode-interpreted scripting language optimized for embedded devices. If that made sense to you, you’re probably better off reading the docs. For those of you who just thought to themselves, “What!?!” this visual might help.

XML elements of ROKU scene graph

Main takeaway: Roku OS is easy to use and designed to optimize media playback with minimal programmer effort. This is over-simplifying, but it’s basically a bunch of boxes inside other boxes that have text and images connected to a video server to play something.

With that solid foundation set, let’s get to some of the exciting new features in Roku OS11! Streaming publishers should consider implementing Photo Streams, audio improvements, better developer debugging, improved dialogs, and easier developer access to features.

Custom dialog improvements

The next three features are all new but specifically for the same custom dialog. One of the most important aspects of testing new features is performance measurement. Branch’s native Roku SDK provides you with the ability to track events. This means, if you added them within each of these new features, you could track conversion or incrementality.

Here’s the simple one line of code needed to enable tracking of any event using Branch’s SDK:

m.branchSdkObj.logEvent("Example Custom Event Name")

Branch also has a feature-equal S2S solution instead of the SDK to accommodate all customer requirements.

Multi-style text items

Within custom dialogs, Roku OS11 now allows you to bold text, use different fonts, multiple colors, and insert emojis.

Example of custom dialogs within Roku OS11

It should go without saying why this is a cool feature. Being able to use on-brand text or colors can make a huge difference in influencing people. For example, Disney’s classic font or Netflix’s signature red color draws instant brand recognition. Used in the right way, this can be a powerful feature to help communicate and connect with viewers.

Side card area

Not only does the custom dialog shown above allow for text customization, it also has a new dialog for images and notes. One use for this feature might be to display call-to-action dialogues such as “more info” or “show summary” in a cleaner-looking way. I’m sure you can think of other uses, as well.

call-to-action dialogues in a side card area
Action card item

Customizing call-to-action dialogs can result in a huge win if leveraged correctly. Imagine you had multiple streaming channels, and you wanted to make subscribing to each one an individual option or plan. 

Example of action card item prompting viewers to subscribe

 

This subscription window can now use multiple pricing options with radio buttons. It can also allow viewers to choose products from pricing packages using checkboxes. It can even ​​add a “more info” arrow icon in the content area to further persuade potential subscribers. 

While this is valuable new functionality, it’s important to also understand where your users are coming from in the first place. Are you promoting a subscription for your Roku app via an ad network? Branch provides you with the ad network’s name, campaign, creative, placement, ad spend, and much more. Tracking clicks, installs, subscriptions, and the promotion’s generated revenue is also possible. With this information, you get insight into valuable metrics (like CPM, CPC, CPI, CPE, LTV, ROI, ROAS, and many more) to determine your campaign’s impact. When you integrate Branch’s native Roku SDK, you get attribution straight out of the box. 

Attribution of users using Branch's native Roku SDK
Muted video preview feature

While this is a new ability that might seem minor, we’re interested to see how people use it. You can now play video previews without any sound. Roku explains it well: 

“This can be useful for implementing a video preview feature in a channel.” 

If a picture is worth a thousand words, then maybe you don’t need audio?

Check whether the TV screen is on/off

This is maybe one of the coolest features your users won’t know they needed until now. Here’s an example. Dan Carlin, well-known for his amazing history podcast, Hardcore History, has recently added sound-only episodes to his YouTube channel. Users have nothing to visually watch but will spend hours listening. Now, they can turn the TV screen off and continue to listen without the red YouTube logo burning into their $3,500 75” OLED TVs. 

Voice control has enabled a lot of new functionality but has also introduced challenges for CTV. Without a screen, you can’t display traditional TV ads. With no ads, there’s no revenue. You can, however, play audio-based ads. But again, you have to understand the impact. Unlike some TV measurement solutions, Branch doesn’t need a screen to track impressions. Branch has 1000+ ad partnership integrations and tracking impressions for attribution built in as a core capability. Ask your ad partner if they have audio-only ad placements or use a programmatic ad partner that buys audio ad placements. If so, all you’d need to do next is enable the ad partner in your Branch account. Right away, you should be ready to track the performance of that ad, even if the TV screen is turned off! 

Hey, Alexa…watch out! This effectively turns the TV into a monetizable, home entertainment voice-controlled sound bar to stream audio content. Here is Roku’s supporting article to learn more about how it works. 

Time-based subtitle support feature

Have you ever watched a YouTube video where the automated closed-caption (CC) subtitles were completely wrong? Automated voice-to-text translation sometimes just doesn’t do the job. With time-based support, you can effectively script out the audio based on the streaming timestamps. Here’s an example of what it could look like in practice:

<p id="subtitle" begin="00:00:30.416" end="00:00:35.558" cc_location="bottom" >
In 1992, a shipping container<br/>fell overboard</p>

This could also help with other scenarios such as when someone is hard to understand. Or when they might be speaking out of view from the recorded camera angle. Or when non-verbal messages appear on screen — like writing or road signs.

Roku OneView

OneView is an advertising platform owned and operated by Roku. Branch is fully integrated with OneView, enabling clients to run and attribute ads. Customers are able to fine-tune their addressable audience for more impactful ads with some of the industry’s best targeting data. This includes geographic, demographic, and user-interest-based filters. OneView and Branch, when used together, provide clients with ads that are trackable across mobile, web, OTT, and CTV devices. 

When an ad impression, click, or tap is followed by a conversion or install of the ad-promoted app, Branch assigns attribution. This attribution is assigned to OneView and all subsequent in-app events tracked by Branch for that user. If you’re looking to run app install campaigns and you want to advertise on mobile and TV screens, then Roku OneView with Branch is the solution for you. Reach out to your Branch representative or request a demo to learn more.

How does it all fit together?

Branch has helped 100,000 apps create better experiences for their users. It’s our hope that highlighting these Roku OS11 features will inspire you to improve the experience for your users, as well.

Branch is an integrated partner for both the Roku Ad Manager and the Roku OneView platform. If you’re looking to understand where your users are coming from and what they are doing after they have installed your app, we are here to help. To learn more, explore our OTT and CTV offerings, or request a demo.

Here’s a list of all the blogs and release notes Roku has shared for OS11 if you prefer reading from the source: Roku blog 1, 2, 3, and Developer release notes.

1https://www.uscreen.tv/blog/ott-apps-usage-statistics/
2https://pages.conviva.com/rs/138-XJA-134/images/RPT_Conviva_SoS_Q4_2021.pdf

Branch provides the industry’s leading mobile linking and measurement platforms, offering solutions that unify user experience and attribution across devices and channels. Branch has been selected by over 100,000 apps since 2014 including Adobe, BuzzFeed, Yelp, and many more, improving experiences for more than 3 billion monthly users across the globe. Learn more about Branch or contact sales today.

Contact sales

The post Why New Features in Roku OS11 Matter for App Publishers appeared first on Branch.

]]>
How to Get the Most Out of Journeys: Advanced Use Cases, Part 1 https://www.branch.io/resources/blog/how-to-get-the-most-out-of-journeys-advanced-use-cases-part-1/ Thu, 30 Dec 2021 16:59:49 +0000 https://blog.branch.io/?p=6495 This is the first in a five-part series that will help you bring advanced customization to these banners.

The post How to Get the Most Out of Journeys: Advanced Use Cases, Part 1 appeared first on Branch.

]]>
Journeys is a product which provides our customers with customizable and targeted browser banners, interstitials, and pop-ups to drive app installs from the web. Unlike native iOS and Android browser app banners, Journeys connects with user intent. Some typical scenarios include showing editable Journeys banners when a user has visited a website a specified number of times, if the user has added a product to their shopping cart, or if the user has come from a specific website. There are hundreds of other possible configurations you can create using our filters, which are available within the Branch dashboard. 

This is the first in a five-part series that will help you bring advanced customization to these banners. Throughout this series, I’ll be showing you different examples of how to create advanced solutions using Journeys.

In this blog we will be talking about building a Journeys solution to only display once a user has scrolled below the main page content, and disappear when the user scrolls back up to the top of the site. I’ll go over why you might want to use a solution like this, but if you want to jump straight to the code example, you can skip to the end of the article to get started on adding it to your site.

image showing a user's journey, clicking on a Branch Journey's banner on mobile desktop, then downloading an app and being deep linked into specific app contents
 
Let’s start with some context

It might be tough to decide which Journey solutions to use in a given case. A full page interstitial might be too direct and scare the user away, but a smaller floating button might not be enough to get the user’s attention. To make the decision even more challenging, Google has added their own guidelines for what they think is ideal, going as far as mentioning that using some banners or interstitials could result in SEO penalties. Below are some examples they show for what is considered intrusive (and unacceptable) and what is not intrusive (and acceptable), based on the amount of content covered up.

side-by-side graphic of two phones, one not displaying an intrusive interstitial banner and the other displaying an intrusive interstitial banner

 

Why Journeys can help with performance metrics

Here are three questions that, if you find yourself asking, might justify you using Journeys’ scroll-below-the-fold solution.

  • How can I improve my webpage’s SEO?

Showing a banner only once a user has scrolled down below the fold can improve your SEO. This gives the user time to read the content on the page without interruption, and also the opportunity to show the user relevant information at the right time. By contrast, banners that don’t load cleanly can hurt your page’s SEO, as search engines “disapprove” of content features that loads slowly or cause layout shift.

  • Why does my banner have a low click through-rate?

Low click-through rates can be caused by many things including users that come to your page by accident, or with lower intent. If you show a banner right when the page loads it might result in what seems like a lower-performing banner because users are bouncing immediately. This bouncing will drive the view-to-click conversion rate down and could be falsely associated with the banner’s performance. 

It’s key to isolate potential reasons when trying to understand page performance. 

  • Why does my website have a high bounce rate?

What happens when you know your users are interested, but they don’t stay on the page long enough to become engaged? First you need to ask if there’s too much happening when the user lands on the page. Studies have shown that too many interactions will reduce the time users spend on a page. 

Showing a Journeys banner only after they have scrolled partially down the page can reduce clutter and help the user get to the right content. 

Journeys Use Case Example: Below the Fold

Before we get started, one thing to note: the use case below assumes you are currently using our Journeys product and have it set up properly. If not, it’s easy to do — just head over to our support portal and get started. It shouldn’t take long to set up.

So, are you ready to give this solution a go? Let’s get started! Just follow the three simple steps below. We’ve even added commentary on each line of code to provide a detailed explanation of what it is actually doing.

Step 1

Make sure you have installed the Branch Web SDK.

Step 2

Add the Javascript snippet below onto your website:

var scrollDistance = 400;
var scrolledPastThreshold = false;
var journeyShowing = false;

window.onscroll = function() {
  var distanceScrolled = document.documentElement.scrollTop;
  if ((distanceScrolled - scrollDistance) > 1) {
    scrolledPastThreshold = true;
    if (scrolledPastThreshold && !journeyShowing) {
      document.getElementById("branch-banner-iframe").style.height = "100vh";
      journeyShowing = true;
    }
  } else if ((distanceScrolled - scrollDistance) < 1) {
    scrolledPastThreshold = false;
    if (!scrolledPastThreshold && journeyShowing) {
      document.getElementById("branch-banner-iframe").style.height = "0vh";
      journeyShowing = false;
    }
  }
}

The first three lines create the global variables that get used in this solution:

var scrollDistance = 400;            // how far (in px) to scroll before showing Journey
var scrolledPastThreshold = false;   // true/false value to track if user scrolled
                                     // past scrollDistance value or not
var journeyShowing = false;          // true/false value to track if the journey is  
                                     // showing or not

The next section is the first half of the two-part function which displays the Journey when the user travels past the configured distance to be scrolled.

window.onscroll = function() {       // built in Javascript event function that fires each 
                                     // time a page is scrolled down or up by a pixel
  var distanceScrolled = document.documentElement.scrollTop;    // when user is at the 
                                                                // top of page the value is zero
  if ((distanceScrolled - scrollDistance) > 1) {     // When user is at the top of the 
                             // page: 0 - 400 = -400 → if statement evaluates false
                             // page: 402 - 400 = 2  → if statement evaluates true
    scrolledPastThreshold = true;
    if (scrolledPastThreshold && !journeyShowing) {
      document.getElementById("branch-banner-iframe").style.height = "100vh";
                                     // modify the Journey’s css to show it on the site
      journeyShowing = true;         // Journey is now showing, save state
    }

The rest of the snippet is the final half of the two-part function which hides the Journey when the user scrolls back up above the configured distance to be scrolled.

  } else if ((distanceScrolled - scrollDistance) < 1) {    // if the statement on line 7 
                     // isn’t true, code then checks this if statement
                     // Below fold: 500 - 400 = 100 → if statement evaluates false
                     // Above fold: 398 - 400 = -2  → if statement evaluates true
    scrolledPastThreshold = false;    // user scrolled past threshold, save state
    if (!scrolledPastThreshold && journeyShowing) {    // user scrolled above fold and
                                                       // Journey is showing
      document.getElementById("branch-banner-iframe").style.height = "0vh";
                                // modify the Journey’s css to hide it from the site
      journeyShowing = false;   // Journey is now hiding, save state
    }
  }
}
Step 3

The last piece to this solution is done in the dashboard. Navigate to the Journey you have created for this solution. Then change the “Height” to ‘0vh’, shown below on Line 6. This will prevent the Journey from showing at page load. This is a required step for the solution to work.

If you need help setting up your Journey, head on over to our Using Branch setup guide

screenshot showing style customization of Branch journeys product

Now you should be all set, you’ve just created a ‘Below the Fold’ Journeys banner — you can see how it works below!

Once you’ve implemented our Journeys example, please let us know! We have a special surprise for the first few customers who implement this on their website. Reach out to us and show us your solution!

gif of a mobile webpage with a customized below-the-fold banner

 

Branch is here to support you

At Branch, we love to support and help our customers grow. No matter how much we develop our products, we know we’re only scratching the surface of what is possible. We intentionally added flexibility to ensure the product’s full potential is unlocked, allowing you to come up with your own awesome solutions! Our Journeys ‘Below-the-Fold’ use case is a perfect example.

Learn more about how to capture web visitors and convert them into loyal app users with Journeys here.

The post How to Get the Most Out of Journeys: Advanced Use Cases, Part 1 appeared first on Branch.

]]>