This document discusses mobile app analytics and testing. It provides an overview of different approaches to developing mobile apps, mobile analytics tools, and considerations for deploying a mobile analytics solution. It also discusses challenges with testing mobile apps and different testing methods. Throughout the document, examples are given for tagging mobile apps with analytics SDKs and attendees are invited to share their experiences with mobile analytics and testing.
9. MOBILE ANALYTICS
WEB ANALYTICS
Javascript
<TAG> SDK
Web Analytics server
Mobile
App
Web
&
Mobile
Site
Cookie Device ID
Internet
Local offline
database
Real-time
Server Call
Web Analytics server
Internet
Server Call
June 15 CCT Consulting - @camillechaudet 9
11. Deploying a Mobile Analytics solution
Business
needs +
technical
constraints
Write tag plan
Deploy tag
plan + settings
Tests
STEP 1 STEP 2 STEP 3 STEP 4
June 15 CCT Consulting - @camillechaudet 11
13. Mobile Apps Tagging
AT Internet native tagging code
4
@"internal_search",
nil];
ATParams *tag = [[ATParams alloc] init];
NSString *xtcustom = [info JSONRepresentation];
[tag put:@"stc" andValue:xtcustom];
[tag xt_sendTag];
[tag release];
Le r辿sultat sera ceci : &stc={"pname":"my_label","vid":1234,"internal_search":{"kw" :"key1","resultPage" :1}}
iOS5 et ult辿rieurs
iOS 5 int竪gre nativement une librairie JSON , voir documentation ici :
http://developer.apple.com/library/ios/#documentation/Foundation/Reference/NSJSONSerialization_Class/Reference/R
eference.html
Note : il est aussi possible dutiliser un framework externe comme vu dans la partie pour iOS 4
Exemple simple :
//build an info object and convert to json
NSDictionary* info = [NSDictionary dictionaryWithObjectsAndKeys:
@"my_label",
@"pname",
[NSNumber numberWithInteger:1234],
@"vid",
[NSDictionary dictionaryWithObjectsAndKeys:
@"key1",
@"kw",
[NSNumber numberWithInteger:1],
@"resultPage",nil],
@"internal_search",
nil];
//convert object to data
NSError* error;
NSData* jsonData = [NSJSONSerialization dataWithJSONObject:info options:NSJSONWritingPrettyPrinted error:&error];
ATParams *tag = [[ATParams alloc] init];
NSString * xtcustom = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
[tag put:@"stc" andValue:xtcustom];
[tag xt_sendTag];
[tag release];
[xtcustom release];
Le r辿sultat sera ceci : : &stc={"pname":"my_label","vid":1234,"internal_search":{"kw" :"key1","resultPage" :1}}
iOS Android
4
@"internal_search",
nil];
ATParams *tag = [[ATParams alloc] init];
NSString *xtcustom = [info JSONRepresentation];
[tag put:@"stc" andValue:xtcustom];
[tag xt_sendTag];
[tag release];
Le r辿sultat sera ceci : &stc={"pname":"my_label","vid":1234,"internal_search":{"kw" :"key1","resultPage" :1}}
iOS5 et ult辿rieurs
iOS 5 int竪gre nativement une librairie JSON , voir documentation ici :
http://developer.apple.com/library/ios/#documentation/Foundation/Reference/NSJSONSerialization_Class/Reference/R
eference.html
Note : il est aussi possible dutiliser un framework externe comme vu dans la partie pour iOS 4
Exemple simple :
//build an info object and convert to json
NSDictionary* info = [NSDictionary dictionaryWithObjectsAndKeys:
@"my_label",
@"pname",
[NSNumber numberWithInteger:1234],
@"vid",
[NSDictionary dictionaryWithObjectsAndKeys:
@"key1",
@"kw",
[NSNumber numberWithInteger:1],
@"resultPage",nil],
@"internal_search",
nil];
//convert object to data
NSError* error;
NSData* jsonData = [NSJSONSerialization dataWithJSONObject:info options:NSJSONWritingPrettyPrinted error:&error];
ATParams *tag = [[ATParams alloc] init];
NSString * xtcustom = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
[tag put:@"stc" andValue:xtcustom];
[tag xt_sendTag];
[tag release];
[xtcustom release];
Le r辿sultat sera ceci : : &stc={"pname":"my_label","vid":1234,"internal_search":{"kw" :"key1","resultPage" :1}}
June 15 CCT Consulting - @camillechaudet 13
14. Our REX
≒ Chaos when there is no analytics skills : lot of screens and clicks are not
taggued
≒ Mobile analytics is easier than web analytics because screens and clicks
are technically the same (events)
≒ Less errors and less constraints (no javascript conflict, no click to
transform into virtual page, etc.)
June 15 CCT Consulting - @camillechaudet 14
18. Different ways to test
Real devices Emulators Crowdtesting
(beta testers)
June 15 CCT Consulting - @camillechaudet 18
19. Real devices testing
Wifi
STEP 1 : Connect the PC and the mobile device to
the same wifi network
June 15 CCT Consulting - @camillechaudet 19
20. Real devices testing
STEP 2 : Set proxy
Use the same IP adress
than your computer
June 15 CCT Consulting - @camillechaudet 20
21. Real devices testing
STEP 3 : Catch server calls with Charles Proxy/Fiddler
June 15 CCT Consulting - @camillechaudet 21
22. Issues faced during QA
≒ Too many or too few mobile devices to run tests
≒ Lack of time, especially to test non-regressions
≒ Don't know what/how to test
≒ Lack of tools to test
≒ Too many environments (DEV, INT, UAT, PRP, PROD)
≒ Lack of quality due to manual tests (risks of human errors)
≒ Lack of autonomy (need other people to run tests)
June 15 CCT Consulting - @camillechaudet 22
24. Attendees' REX
≒ Ask logs to developers to help debug
≒ Use Google Analytics first for real-time tests
≒ Some testing tools : Charles Proxy, Tag inspector, WASP, Hubscan,
ObservePoint, run a macro on browser consoles, Screaming Frog
≒ Set alerts on conversion rate drop by browser
June 15 CCT Consulting - @camillechaudet 24