Quick Links
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.
Android
Parameter | 3 Series | 4 Series | % Change |
---|---|---|---|
Size | 330.0 KB | 331.55 KB | 0.5% |
Coverage | 45% | 87% | 109% |
Tests | 142 | 550 | 287% |
iOS
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:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.<yourLayout>);
xappAds = new XappAds();
xappAds.start(<yourAPIKey>, <yourAPPKey>, userData /** or null */, location /** or null */, <yourContext>, <yourXappAdsListener>);
}
/**
* XappAds Listener Methods
*/
@Override
public void onXappAdsStarted () {
//Request an ad once XappAds has been initialized
AdRequest adRequest = new AdRequest();
xappAds.requestAd(adRequest);
}
to being removed completely. And on iOS from:
- (void)viewDidLoad {
//Start XappAds
[XappAds startWithAPIKey:myAPIKey
withApplicationKey:myApplicationKey
withAdsDelegate:self
withUserData:nil];
}
- (void)onXappAdsStarted {
//now request an ad
}
to
- (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
<AdInteractions>
<ClickThrough method="voice" phrase="go to page">
<![CDATA[http://developer.xappmedia.com]]>
</ClickThrough>
</AdInteractions>
Read more about DAAST over at the Interactive Advertising Bureau.