Announcing v4.0.0

  • SDK
  • iOS
  • Android

Goodbye Old Friend

Our 3 Series has been our workhorse. We released 3.0.0 in April 2014 and since then it has served millions of impressions on both iOS and Android (and will probably keep serving for a while). 3.0.0 was a milestone for us because it was the first version to contain our custom highly scalable voice recognition platform, XAPP Voice Recognizer (XVR).

3.0.0 will finally get to rest as today we release 4.0.0 with the following highlights:

By The Numbers

We wanted to concentrate on making 4.0.0 more robust and lean than the 3 series. We drastically increased the number of tests (on Android +287% and iOS +104%) which helped close some gaps we had in our code coverage.

iOS saw a 25% decrease in size and Android had only a slight increase even after adding a couple features.

These are metrics we track with every build and areas we will keep improving on.


Parameter 3 Series 4 Series % Change
Size 330.0 KB 331.55 KB 0.5%
Coverage 45% 87% 109%
Tests 142 550 287%


Parameter 3 Series 4 Series % Change
Size (armv7) 7.3 MB 5.5 MB -25%
Coverage 37% 60% 62%
Tests 257 525 104%

Streamlined API

The 3 Series API had the concept of a listening session. Every time the app started, this was considered a new listening session and the session required initialization. You had to wait for the session to complete initialization before an ad could be requested. The call to start the session turned out to be a major pain, requiring the integrator to take care of it was unnecessary. So, we handle it internally now.

On Android, the SDK initialization went from:

    public void onCreate(Bundle savedInstanceState) {


      xappAds = new XappAds();
      xappAds.start(<yourAPIKey>, <yourAPPKey>, userData /** or null */, location /** or null */, <yourContext>, <yourXappAdsListener>);


     * XappAds Listener Methods
    public void onXappAdsStarted () {
        //Request an ad once XappAds has been initialized
        AdRequest adRequest = new AdRequest();

to being removed completely. And on iOS from:

- (void)viewDidLoad {

    //Start XappAds
    [XappAds startWithAPIKey:myAPIKey


- (void)onXappAdsStarted {
    //now request an ad



- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // Override point for customization after application launch.

    //Start the session, no need to listen for a callback.
    [XAPP startSession];
    return YES;

Not only is this a reduction of code but also it removes a step in your ad request workflow.

Enhanced Action Workflows

On iOS, where opening URLs or starting new activities is prohibited in the background, we reevaluated our background work flows to ensure that whenever the user requests an action, we can provide it to them in a way that provides the best possible user experience.

On background calls for example, we went from a standard system confirmation dialog to an enhanced dialog that uses the companion image.

3 Series

4 Series

The image helps the user recall the offer they responded to in the background.

DAAST Support

The Digital Audio Ad Serving Template (DAAST) is a standard for communicating digital audio ad payloads. The standard defines the audio creative as well as any companion image creatives. It also contains information about ad interactions that require voice recognition.

Version 4 also marks our initial support of DAAST. We can parse payloads with audio files and companion banners and are the only SDK that supports for voice interactions.

    <ClickThrough method="voice" phrase="go to page">

Read more about DAAST over at the Interactive Advertising Bureau.

A photo of Michael Myers
Michael Myers

VP Product