SlideShare uma empresa Scribd logo
1 de 34
Knowing is Understanding

      A road trip through Google
    analytics for Windows Phone
Who is
Tom Janssens
Who is?
•   Name: Tom Janssens

•   Independent consultant
•   Starting indie game developer

•   www: http://www.blugri.com
•   Facebook: http://www.facebook.com/blugri
•   Twitter: @blugri
Google
 Analytics
Account Setup
Google Analytics – Account setup
•   Accounts
•   Web Properties
•   Profiles
•   Filters

•   Advanced Segments
•   Dashboards
Google Analytics – Account
structure
Google Analytics – Accounts
•   You can only start 20 accounts
•   Given access to unlimited accounts
Google Analytics – Web
Properties
•   An account can have only 50 properties
•   Web Property = tracking code
Google Analytics – Profiles
and Filters
•   Limited to 50 profiles (over all properties)
•   Filters incoming data
•   Filters executed in order of definition
•   Always keep a profile with all raw data
Google Analytics – Advanced
Segments
•   Isolate and analyse your analytics data
•   Default or Custom Advanced Segments
Google Analytics – Dashboards
•   Sticky to login
•   Configuration sharing
•   Widgets added via filters
•   Export and Email
Google Analytics – Dashboards
Google Analytics –
Multiple apps
•   Use advances segments
•   Or filter on e.g.
    –   Page title
Google Analytics –
Going live
•   Go to marketplace   •   Or scan QR-code
•   Search “sudoku”
•   Search this icon




•   Download and
    start!
Microsoft Silverlight
Analytics Framework
      For Windows Phone
MSAF
•   Web analytics Framework
•   Supports
    – Silverlight, WPF and Windows Phone
    – Offline scenarios
    – Pageview and event tracking
    – …

•   Extensible
•   Get it from http://msaf.codeplex.com/
MSAF
The code
      C#
Adding it to your application
•   Add the code to your App.xaml
<Application.ApplicationLifetimeObjects>
        <!--Required object that handles lifetime events for the application-->
        <shell:PhoneApplicationService
            Launching="Application_Launching" Closing="Application_Closing"
            Activated="Application_Activated" Deactivated="Application_Deactivated"/>

        <Analytics:AnalyticsService x:Name="analyticsService" WebPropertyId="UA-12345678-9"
AutomaticPageTrackingEnabled="True" />
    </Application.ApplicationLifetimeObjects>
Adding it to your application
•   And to App.xaml.cs
<pre class="brush: csharp;">
public partial class App : Application
    {
        private AnalyticsTracker _tracker;
        public AnalyticsTracker Tracker
        {
            get
            {
                if (_tracker == null)
                {
                    AnalyticsService service = null;
                    foreach (var obj in this.ApplicationLifetimeObjects)
                    {
                        if (typeof(AnalyticsService).Equals(obj.GetType()))
                        {
                             service = obj as AnalyticsService;
                             break;
                        }
                    }
                    _tracker = new AnalyticsTracker(service);
                }
                return _tracker;
            }
        }
    }
Application properties
•   Google Analytics: 5 custom variables
public class AnalyticsService : IApplicationService
{                                                         Key 1:   ProductID
    private readonly IApplicationService _innerService;
    private readonly GoogleAnalytics _googleAnalytics;

    public AnalyticsService()                             Key 2:   User defined
    {
        _googleAnalytics = new GoogleAnalytics();
        _googleAnalytics.CustomVariables.Add(
            new PropertyValue
            {
                                                          Key 3:   User defined
                PropertyName = "Device ID",
                Value = AnalyticsProperties.DeviceId
            });
        ...                                               Key 4:   User defined
    }
}

                                                          Key 5:   User defined
Reading the manifest
public class PhoneHelper
{
    const string AppManifestName = "WMAppManifest.xml";
    const string AppNodeName = "App";

    public static string GetAppAttribute(string attributeName)
    {
        try
        {
            var settings = new XmlReaderSettings { XmlResolver = new XmlXapResolver() };

            using (var rdr = XmlReader.Create(AppManifestName, settings))
            {
                rdr.ReadToDescendant(AppNodeName);
                if (!rdr.IsStartElement())
                {
                    throw new FormatException(AppManifestName + " is missing " + AppNodeName);
                }
                return rdr.GetAttribute(attributeName);
            }
        }
        catch (Exception)
        {
            return "";
        }
    }
}
Pageview Tracking
public class AnalyticsService : IApplicationService
{
    private readonly IApplicationService _innerService;
    private readonly GoogleAnalytics _googleAnalytics;

    public AnalyticsService()
    {
        _googleAnalytics = new GoogleAnalytics();
        _googleAnalytics.CustomVariables.Add(
            new PropertyValue
            {
                PropertyName = "Device ID",
                Value = AnalyticsProperties.DeviceId
            });
        ...
        _innerService = new WebAnalyticsService
            {
                IsPageTrackingEnabled = true,
                Services = { _googleAnalytics, }
            };
    }
}
Pageview Tracking
•   Basic tracking
    – For apps with many pages
    – Shows in analytics as pagename.xaml?p1=v1

•   Realtime analytics
Event Tracking
public class AnalyticsTracker
{
    private AnalyticsService _service;

    public AnalyticsTracker(AnalyticsService service)
    {
        CompositionInitializer.SatisfyImports(this);

        _service = service;
    }

    [Import("Log")]
    public Action<AnalyticsEvent> Log { get; set; }

    public void Track(string category, string name, string actionValue)
    {
        Log(new AnalyticsEvent
            {
                Category = category,
                Name = name,
                ObjectName = actionValue
            });
    }
}
Event Tracking
used for pageviews
public void TrackPageView(string pageViewName)
{
    // Avoid double tracking
    if (_service != null && !_service.AutomaticPageTrackingEnabled)
    {
        Log(new AnalyticsEvent
        {
            ActionValue = pageViewName,
            HitType = Microsoft.WebAnalytics.Data.HitType.PageView,
            Name = "CurrentScreenChanged",
            NavigationState = pageViewName,
            ObjectType = pageViewName,
            AppName = Analytics.AnalyticsProperties.ApplicationTitle
            });
        }
    }
}
References
•   Google.WebAnalytics
•   Microsoft.WebAnalytics
•   Microsoft.WebAnalytics.Behaviors
•   Microsoft.WebAnalytics.Navigation
•   Microsoft.SilverlightMediaFramework.Compat
    ibility.Phone
    –   Replaces:
         •   System.ComponentModel.Composition
         •   System.ComponentModel.Composition.Initialization
•   System.Windows.Interactivity
Tracking
  options
Useful tracks
Useful trackings
•   Reviews and Sharing
    – Event Tracking
    – Get insights where to place your share /
      review buttons
Useful trackings
•   Version Tracking
    – Updates vs new downloads
    – Sticky users vs user growth
    – Store current version in isolated storage
Useful trackings
string installedVersion = AppSettingsAndStatistics.Instance.ApplicationVersion;
string currentVersion = Analytics.AnalyticsProperties.ApplicationVersion;

if (installedVersion == null)
{
    AppSettingsAndStatistics.Instance.ApplicationVersion = currentVersion;

    ((Sudoku.App)App.Current).Tracker.Track("Installation”, "New",
       string.Format("new version: {0}”,
                Analytics.AnalyticsProperties.ApplicationVersion));
}
else if (!installedVersion.Equals(currentVersion))
 {
   AppSettingsAndStatistics.Instance.ApplicationVersion = currentVersion;

    ((Sudoku.App)App.Current).Tracker.Track("Installation", "Update",
       string.Format("old version: {0} - new version: {1}",
                installedVersion,
                currentVersion));
}
Useful trackings
•   Application events
    –   Game modes
        •   Game controls
        •   Levels played / Difficulty
    – Use of Hints, Tips, …
    – Advertising
        •   Providers
        •   Number of ads displayed, clicked
    –   …
Resources
     Links
Links
•   https://www.google.com/ads/agencyedge/

•   http://msaf.codeplex.com/

•   http://www.windowsphonegeek.com/news/
    analyze-the-use-of-a-wp7-app-with-
    google-analytics-and-microsoft-silverlight-
    analytics-framework-msaf

Mais conteúdo relacionado

Mais procurados

PredictionIO - Building Applications That Predict User Behavior Through Big D...
PredictionIO - Building Applications That Predict User Behavior Through Big D...PredictionIO - Building Applications That Predict User Behavior Through Big D...
PredictionIO - Building Applications That Predict User Behavior Through Big D...predictionio
 
Paul Lammertsma: Account manager & sync
Paul Lammertsma: Account manager & syncPaul Lammertsma: Account manager & sync
Paul Lammertsma: Account manager & syncmdevtalk
 
Testing Android apps based on Dagger and RxJava
Testing Android apps based on Dagger and RxJavaTesting Android apps based on Dagger and RxJava
Testing Android apps based on Dagger and RxJavaFabio Collini
 
Apache Struts 2 Advance
Apache Struts 2 AdvanceApache Struts 2 Advance
Apache Struts 2 AdvanceEmprovise
 
Intro to Retrofit 2 and RxJava2
Intro to Retrofit 2 and RxJava2Intro to Retrofit 2 and RxJava2
Intro to Retrofit 2 and RxJava2Fabio Collini
 
PredictionIO - Scalable Machine Learning Architecture
PredictionIO - Scalable Machine Learning ArchitecturePredictionIO - Scalable Machine Learning Architecture
PredictionIO - Scalable Machine Learning Architecturepredictionio
 
Logging tracing and metrics in .NET Core and Azure - dotnetdays 2020
Logging tracing and metrics in .NET Core and Azure - dotnetdays 2020Logging tracing and metrics in .NET Core and Azure - dotnetdays 2020
Logging tracing and metrics in .NET Core and Azure - dotnetdays 2020Alex Thissen
 
Advanced Dagger talk from 360andev
Advanced Dagger talk from 360andevAdvanced Dagger talk from 360andev
Advanced Dagger talk from 360andevMike Nakhimovich
 

Mais procurados (8)

PredictionIO - Building Applications That Predict User Behavior Through Big D...
PredictionIO - Building Applications That Predict User Behavior Through Big D...PredictionIO - Building Applications That Predict User Behavior Through Big D...
PredictionIO - Building Applications That Predict User Behavior Through Big D...
 
Paul Lammertsma: Account manager & sync
Paul Lammertsma: Account manager & syncPaul Lammertsma: Account manager & sync
Paul Lammertsma: Account manager & sync
 
Testing Android apps based on Dagger and RxJava
Testing Android apps based on Dagger and RxJavaTesting Android apps based on Dagger and RxJava
Testing Android apps based on Dagger and RxJava
 
Apache Struts 2 Advance
Apache Struts 2 AdvanceApache Struts 2 Advance
Apache Struts 2 Advance
 
Intro to Retrofit 2 and RxJava2
Intro to Retrofit 2 and RxJava2Intro to Retrofit 2 and RxJava2
Intro to Retrofit 2 and RxJava2
 
PredictionIO - Scalable Machine Learning Architecture
PredictionIO - Scalable Machine Learning ArchitecturePredictionIO - Scalable Machine Learning Architecture
PredictionIO - Scalable Machine Learning Architecture
 
Logging tracing and metrics in .NET Core and Azure - dotnetdays 2020
Logging tracing and metrics in .NET Core and Azure - dotnetdays 2020Logging tracing and metrics in .NET Core and Azure - dotnetdays 2020
Logging tracing and metrics in .NET Core and Azure - dotnetdays 2020
 
Advanced Dagger talk from 360andev
Advanced Dagger talk from 360andevAdvanced Dagger talk from 360andev
Advanced Dagger talk from 360andev
 

Destaque

Open Police Design Principles - Open Belgium 2016
Open Police Design Principles - Open Belgium 2016Open Police Design Principles - Open Belgium 2016
Open Police Design Principles - Open Belgium 2016Timble
 
CMO Event - Assessing customer satisfaction and harnessing the marketing oppo...
CMO Event - Assessing customer satisfaction and harnessing the marketing oppo...CMO Event - Assessing customer satisfaction and harnessing the marketing oppo...
CMO Event - Assessing customer satisfaction and harnessing the marketing oppo...Global Business Intel
 
Marketing Strategy Assessing &amp; Estimating Market Demand
Marketing Strategy Assessing &amp; Estimating Market DemandMarketing Strategy Assessing &amp; Estimating Market Demand
Marketing Strategy Assessing &amp; Estimating Market DemandMostafa Ewees
 
Management - Planning (6)
Management - Planning (6)Management - Planning (6)
Management - Planning (6)Gary Bye
 
Assessing Your Sales & Marketing Processes
Assessing Your Sales & Marketing ProcessesAssessing Your Sales & Marketing Processes
Assessing Your Sales & Marketing ProcessesMisty Hibbler Khan
 
Management - Assessing (5)
Management - Assessing (5)Management - Assessing (5)
Management - Assessing (5)Gary Bye
 
Front-end on Steroids
Front-end on SteroidsFront-end on Steroids
Front-end on SteroidsTimble
 

Destaque (9)

Open Police Design Principles - Open Belgium 2016
Open Police Design Principles - Open Belgium 2016Open Police Design Principles - Open Belgium 2016
Open Police Design Principles - Open Belgium 2016
 
CMO Event - Assessing customer satisfaction and harnessing the marketing oppo...
CMO Event - Assessing customer satisfaction and harnessing the marketing oppo...CMO Event - Assessing customer satisfaction and harnessing the marketing oppo...
CMO Event - Assessing customer satisfaction and harnessing the marketing oppo...
 
Marketing Strategy Assessing &amp; Estimating Market Demand
Marketing Strategy Assessing &amp; Estimating Market DemandMarketing Strategy Assessing &amp; Estimating Market Demand
Marketing Strategy Assessing &amp; Estimating Market Demand
 
Management - Planning (6)
Management - Planning (6)Management - Planning (6)
Management - Planning (6)
 
PWHN 5/11/10 Presentation
PWHN 5/11/10 PresentationPWHN 5/11/10 Presentation
PWHN 5/11/10 Presentation
 
V4: Sub‐basin management and governance of rainwater and small reservoirs
V4: Sub‐basin management and governance of rainwater and small reservoirsV4: Sub‐basin management and governance of rainwater and small reservoirs
V4: Sub‐basin management and governance of rainwater and small reservoirs
 
Assessing Your Sales & Marketing Processes
Assessing Your Sales & Marketing ProcessesAssessing Your Sales & Marketing Processes
Assessing Your Sales & Marketing Processes
 
Management - Assessing (5)
Management - Assessing (5)Management - Assessing (5)
Management - Assessing (5)
 
Front-end on Steroids
Front-end on SteroidsFront-end on Steroids
Front-end on Steroids
 

Semelhante a Google Analytics Setup for Windows Phone App

Cómo tener analíticas en tu app y no volverte loco
Cómo tener analíticas en tu app y no volverte locoCómo tener analíticas en tu app y no volverte loco
Cómo tener analíticas en tu app y no volverte locoGemma Del Olmo
 
Google Analytics intro - Best practices for WCM
Google Analytics intro - Best practices for WCMGoogle Analytics intro - Best practices for WCM
Google Analytics intro - Best practices for WCMAmplexor
 
Integrating Google Analytics in Android apps
Integrating Google Analytics in Android appsIntegrating Google Analytics in Android apps
Integrating Google Analytics in Android appsFranklin van Velthuizen
 
AnDevCon - Tracking User Behavior Creatively
AnDevCon - Tracking User Behavior CreativelyAnDevCon - Tracking User Behavior Creatively
AnDevCon - Tracking User Behavior CreativelyKiana Tennyson
 
第一次用Parse就深入淺出
第一次用Parse就深入淺出第一次用Parse就深入淺出
第一次用Parse就深入淺出Ymow Wu
 
Apache Eagle: 来自eBay的分布式实时Hadoop数据安全引擎
Apache Eagle: 来自eBay的分布式实时Hadoop数据安全引擎Apache Eagle: 来自eBay的分布式实时Hadoop数据安全引擎
Apache Eagle: 来自eBay的分布式实时Hadoop数据安全引擎Qingwen zhao
 
20200815 inversions
20200815 inversions20200815 inversions
20200815 inversionsChiwon Song
 
Windows Store app using XAML and C#: Enterprise Product Development
Windows Store app using XAML and C#: Enterprise Product Development Windows Store app using XAML and C#: Enterprise Product Development
Windows Store app using XAML and C#: Enterprise Product Development Mahmoud Hamed Mahmoud
 
Opticon 2015 - Getting Started with the Optimizely Developer Platform
Opticon 2015 - Getting Started with the Optimizely Developer PlatformOpticon 2015 - Getting Started with the Optimizely Developer Platform
Opticon 2015 - Getting Started with the Optimizely Developer PlatformOptimizely
 
Educate 2017: Customizing Assessments: Why extending the APIs is easier than ...
Educate 2017: Customizing Assessments: Why extending the APIs is easier than ...Educate 2017: Customizing Assessments: Why extending the APIs is easier than ...
Educate 2017: Customizing Assessments: Why extending the APIs is easier than ...Learnosity
 
Testing android apps with espresso
Testing android apps with espressoTesting android apps with espresso
Testing android apps with espressoÉdipo Souza
 
Google analytics
Google analyticsGoogle analytics
Google analyticsSean Tsai
 
Android Support Library: Using ActionBarCompat
Android Support Library: Using ActionBarCompatAndroid Support Library: Using ActionBarCompat
Android Support Library: Using ActionBarCompatcbeyls
 
Application Frameworks: The new kids on the block
Application Frameworks: The new kids on the blockApplication Frameworks: The new kids on the block
Application Frameworks: The new kids on the blockRichard Lord
 
PredictionIO – A Machine Learning Server in Scala – SF Scala
PredictionIO – A Machine Learning Server in Scala – SF ScalaPredictionIO – A Machine Learning Server in Scala – SF Scala
PredictionIO – A Machine Learning Server in Scala – SF Scalapredictionio
 
[Srijan Wednesday Webinars] Ruling Drupal 8 with #d8rules
[Srijan Wednesday Webinars] Ruling Drupal 8 with #d8rules[Srijan Wednesday Webinars] Ruling Drupal 8 with #d8rules
[Srijan Wednesday Webinars] Ruling Drupal 8 with #d8rulesSrijan Technologies
 

Semelhante a Google Analytics Setup for Windows Phone App (20)

Cómo tener analíticas en tu app y no volverte loco
Cómo tener analíticas en tu app y no volverte locoCómo tener analíticas en tu app y no volverte loco
Cómo tener analíticas en tu app y no volverte loco
 
Google Analytics intro - Best practices for WCM
Google Analytics intro - Best practices for WCMGoogle Analytics intro - Best practices for WCM
Google Analytics intro - Best practices for WCM
 
Integrating Google Analytics in Android apps
Integrating Google Analytics in Android appsIntegrating Google Analytics in Android apps
Integrating Google Analytics in Android apps
 
AnDevCon - Tracking User Behavior Creatively
AnDevCon - Tracking User Behavior CreativelyAnDevCon - Tracking User Behavior Creatively
AnDevCon - Tracking User Behavior Creatively
 
第一次用Parse就深入淺出
第一次用Parse就深入淺出第一次用Parse就深入淺出
第一次用Parse就深入淺出
 
Apache Eagle: 来自eBay的分布式实时Hadoop数据安全引擎
Apache Eagle: 来自eBay的分布式实时Hadoop数据安全引擎Apache Eagle: 来自eBay的分布式实时Hadoop数据安全引擎
Apache Eagle: 来自eBay的分布式实时Hadoop数据安全引擎
 
Node.js and Parse
Node.js and ParseNode.js and Parse
Node.js and Parse
 
20200815 inversions
20200815 inversions20200815 inversions
20200815 inversions
 
Windows Store app using XAML and C#: Enterprise Product Development
Windows Store app using XAML and C#: Enterprise Product Development Windows Store app using XAML and C#: Enterprise Product Development
Windows Store app using XAML and C#: Enterprise Product Development
 
Opticon 2015 - Getting Started with the Optimizely Developer Platform
Opticon 2015 - Getting Started with the Optimizely Developer PlatformOpticon 2015 - Getting Started with the Optimizely Developer Platform
Opticon 2015 - Getting Started with the Optimizely Developer Platform
 
Introduction to android
Introduction to androidIntroduction to android
Introduction to android
 
Introduction toandroid
Introduction toandroidIntroduction toandroid
Introduction toandroid
 
Educate 2017: Customizing Assessments: Why extending the APIs is easier than ...
Educate 2017: Customizing Assessments: Why extending the APIs is easier than ...Educate 2017: Customizing Assessments: Why extending the APIs is easier than ...
Educate 2017: Customizing Assessments: Why extending the APIs is easier than ...
 
Tips for Angular Applications
Tips for Angular ApplicationsTips for Angular Applications
Tips for Angular Applications
 
Testing android apps with espresso
Testing android apps with espressoTesting android apps with espresso
Testing android apps with espresso
 
Google analytics
Google analyticsGoogle analytics
Google analytics
 
Android Support Library: Using ActionBarCompat
Android Support Library: Using ActionBarCompatAndroid Support Library: Using ActionBarCompat
Android Support Library: Using ActionBarCompat
 
Application Frameworks: The new kids on the block
Application Frameworks: The new kids on the blockApplication Frameworks: The new kids on the block
Application Frameworks: The new kids on the block
 
PredictionIO – A Machine Learning Server in Scala – SF Scala
PredictionIO – A Machine Learning Server in Scala – SF ScalaPredictionIO – A Machine Learning Server in Scala – SF Scala
PredictionIO – A Machine Learning Server in Scala – SF Scala
 
[Srijan Wednesday Webinars] Ruling Drupal 8 with #d8rules
[Srijan Wednesday Webinars] Ruling Drupal 8 with #d8rules[Srijan Wednesday Webinars] Ruling Drupal 8 with #d8rules
[Srijan Wednesday Webinars] Ruling Drupal 8 with #d8rules
 

Último

"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...Fwdays
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
The Future of Software Development - Devin AI Innovative Approach.pdf
The Future of Software Development - Devin AI Innovative Approach.pdfThe Future of Software Development - Devin AI Innovative Approach.pdf
The Future of Software Development - Devin AI Innovative Approach.pdfSeasiaInfotech2
 
Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piececharlottematthew16
 
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostLeverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostZilliz
 
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr LapshynFwdays
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxNavinnSomaal
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationRidwan Fadjar
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machinePadma Pradeep
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek SchlawackFwdays
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024Stephanie Beckett
 
My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024The Digital Insurer
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsMark Billinghurst
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Enterprise Knowledge
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):comworks
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr BaganFwdays
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationSlibray Presentation
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLScyllaDB
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubKalema Edgar
 

Último (20)

"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
The Future of Software Development - Devin AI Innovative Approach.pdf
The Future of Software Development - Devin AI Innovative Approach.pdfThe Future of Software Development - Devin AI Innovative Approach.pdf
The Future of Software Development - Devin AI Innovative Approach.pdf
 
Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piece
 
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostLeverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
 
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptx
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 Presentation
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machine
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024
 
My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024
 
DMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special EditionDMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special Edition
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR Systems
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck Presentation
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQL
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding Club
 

Google Analytics Setup for Windows Phone App

  • 1. Knowing is Understanding A road trip through Google analytics for Windows Phone
  • 3. Who is? • Name: Tom Janssens • Independent consultant • Starting indie game developer • www: http://www.blugri.com • Facebook: http://www.facebook.com/blugri • Twitter: @blugri
  • 5. Google Analytics – Account setup • Accounts • Web Properties • Profiles • Filters • Advanced Segments • Dashboards
  • 6. Google Analytics – Account structure
  • 7. Google Analytics – Accounts • You can only start 20 accounts • Given access to unlimited accounts
  • 8. Google Analytics – Web Properties • An account can have only 50 properties • Web Property = tracking code
  • 9. Google Analytics – Profiles and Filters • Limited to 50 profiles (over all properties) • Filters incoming data • Filters executed in order of definition • Always keep a profile with all raw data
  • 10. Google Analytics – Advanced Segments • Isolate and analyse your analytics data • Default or Custom Advanced Segments
  • 11. Google Analytics – Dashboards • Sticky to login • Configuration sharing • Widgets added via filters • Export and Email
  • 12. Google Analytics – Dashboards
  • 13. Google Analytics – Multiple apps • Use advances segments • Or filter on e.g. – Page title
  • 14. Google Analytics – Going live • Go to marketplace • Or scan QR-code • Search “sudoku” • Search this icon • Download and start!
  • 16. MSAF • Web analytics Framework • Supports – Silverlight, WPF and Windows Phone – Offline scenarios – Pageview and event tracking – … • Extensible • Get it from http://msaf.codeplex.com/
  • 17. MSAF
  • 18. The code C#
  • 19. Adding it to your application • Add the code to your App.xaml <Application.ApplicationLifetimeObjects> <!--Required object that handles lifetime events for the application--> <shell:PhoneApplicationService Launching="Application_Launching" Closing="Application_Closing" Activated="Application_Activated" Deactivated="Application_Deactivated"/> <Analytics:AnalyticsService x:Name="analyticsService" WebPropertyId="UA-12345678-9" AutomaticPageTrackingEnabled="True" /> </Application.ApplicationLifetimeObjects>
  • 20. Adding it to your application • And to App.xaml.cs <pre class="brush: csharp;"> public partial class App : Application { private AnalyticsTracker _tracker; public AnalyticsTracker Tracker { get { if (_tracker == null) { AnalyticsService service = null; foreach (var obj in this.ApplicationLifetimeObjects) { if (typeof(AnalyticsService).Equals(obj.GetType())) { service = obj as AnalyticsService; break; } } _tracker = new AnalyticsTracker(service); } return _tracker; } } }
  • 21. Application properties • Google Analytics: 5 custom variables public class AnalyticsService : IApplicationService { Key 1: ProductID private readonly IApplicationService _innerService; private readonly GoogleAnalytics _googleAnalytics; public AnalyticsService() Key 2: User defined { _googleAnalytics = new GoogleAnalytics(); _googleAnalytics.CustomVariables.Add( new PropertyValue { Key 3: User defined PropertyName = "Device ID", Value = AnalyticsProperties.DeviceId }); ... Key 4: User defined } } Key 5: User defined
  • 22. Reading the manifest public class PhoneHelper { const string AppManifestName = "WMAppManifest.xml"; const string AppNodeName = "App"; public static string GetAppAttribute(string attributeName) { try { var settings = new XmlReaderSettings { XmlResolver = new XmlXapResolver() }; using (var rdr = XmlReader.Create(AppManifestName, settings)) { rdr.ReadToDescendant(AppNodeName); if (!rdr.IsStartElement()) { throw new FormatException(AppManifestName + " is missing " + AppNodeName); } return rdr.GetAttribute(attributeName); } } catch (Exception) { return ""; } } }
  • 23. Pageview Tracking public class AnalyticsService : IApplicationService { private readonly IApplicationService _innerService; private readonly GoogleAnalytics _googleAnalytics; public AnalyticsService() { _googleAnalytics = new GoogleAnalytics(); _googleAnalytics.CustomVariables.Add( new PropertyValue { PropertyName = "Device ID", Value = AnalyticsProperties.DeviceId }); ... _innerService = new WebAnalyticsService { IsPageTrackingEnabled = true, Services = { _googleAnalytics, } }; } }
  • 24. Pageview Tracking • Basic tracking – For apps with many pages – Shows in analytics as pagename.xaml?p1=v1 • Realtime analytics
  • 25. Event Tracking public class AnalyticsTracker { private AnalyticsService _service; public AnalyticsTracker(AnalyticsService service) { CompositionInitializer.SatisfyImports(this); _service = service; } [Import("Log")] public Action<AnalyticsEvent> Log { get; set; } public void Track(string category, string name, string actionValue) { Log(new AnalyticsEvent { Category = category, Name = name, ObjectName = actionValue }); } }
  • 26. Event Tracking used for pageviews public void TrackPageView(string pageViewName) { // Avoid double tracking if (_service != null && !_service.AutomaticPageTrackingEnabled) { Log(new AnalyticsEvent { ActionValue = pageViewName, HitType = Microsoft.WebAnalytics.Data.HitType.PageView, Name = "CurrentScreenChanged", NavigationState = pageViewName, ObjectType = pageViewName, AppName = Analytics.AnalyticsProperties.ApplicationTitle }); } } }
  • 27. References • Google.WebAnalytics • Microsoft.WebAnalytics • Microsoft.WebAnalytics.Behaviors • Microsoft.WebAnalytics.Navigation • Microsoft.SilverlightMediaFramework.Compat ibility.Phone – Replaces: • System.ComponentModel.Composition • System.ComponentModel.Composition.Initialization • System.Windows.Interactivity
  • 29. Useful trackings • Reviews and Sharing – Event Tracking – Get insights where to place your share / review buttons
  • 30. Useful trackings • Version Tracking – Updates vs new downloads – Sticky users vs user growth – Store current version in isolated storage
  • 31. Useful trackings string installedVersion = AppSettingsAndStatistics.Instance.ApplicationVersion; string currentVersion = Analytics.AnalyticsProperties.ApplicationVersion; if (installedVersion == null) { AppSettingsAndStatistics.Instance.ApplicationVersion = currentVersion; ((Sudoku.App)App.Current).Tracker.Track("Installation”, "New", string.Format("new version: {0}”, Analytics.AnalyticsProperties.ApplicationVersion)); } else if (!installedVersion.Equals(currentVersion)) { AppSettingsAndStatistics.Instance.ApplicationVersion = currentVersion; ((Sudoku.App)App.Current).Tracker.Track("Installation", "Update", string.Format("old version: {0} - new version: {1}", installedVersion, currentVersion)); }
  • 32. Useful trackings • Application events – Game modes • Game controls • Levels played / Difficulty – Use of Hints, Tips, … – Advertising • Providers • Number of ads displayed, clicked – …
  • 33. Resources Links
  • 34. Links • https://www.google.com/ads/agencyedge/ • http://msaf.codeplex.com/ • http://www.windowsphonegeek.com/news/ analyze-the-use-of-a-wp7-app-with- google-analytics-and-microsoft-silverlight- analytics-framework-msaf

Notas do Editor

  1. Independent consultant, mainly .NET, functional analystLong term experience in mobileWhat am I not:No google analytics expert or certificationLearned from experience and tracking windows phone applications in the last 6 months
  2. Before we start: who are you?Who has already used google analytics?Who has already used filters?Who has already used advanced segments?Who has already used google analytics for silverlight / windows phone?Why google analytics: because I wanted the data as raw as possible?
  3. Used when data is collected:AccountsWeb propertiesProfilesFiltersUsed / Customizable anytimeAdvances segmentsDashboards
  4. Start max 20 accounts, but given access to unlimited  client should start the accountNo more than one account / clientElse clients have access to each other dataShow account list in gaShow how to set up an account
  5. NOT POSSIBLE to change property from one account to anotherWeb property = tracking codeShow how to create a property
  6. Profile is a filtered web propertyMultiple filters can be appliedData that is not in the filter cannot be usedShow how to create profiles / filters
  7. More flexible than filters.Can be changed at runtime Not always 100% correct as not all data is usedShow how to create advanced sements
  8. More flexible than filters. Can be changed at runtimeConfiguration sharing happens at time of sharing, updates of configuration are not automatically sharedExport and email is PDF onlyShow how to create dashboards
  9. More flexible than filters. Can be changed at runtimeConfiguration sharing happens at time of sharing, updates of configuration are not automatically sharedExport and email is PDF only
  10. Filter on page title: Only when pages are tracked manually and page title is application name
  11. Only when pages are tracked manually and page title is application nameShow real time analytics
  12. Support for many analytics services
  13. - Any information of the phone or user can be used as a custom variable- But remember filters do not work on custom variables
  14. Any information of the phone or user can be used as a custom variableOther custom variables are generally read from the manifest fileXml parserCopied from coding4fun libraryUse complete library if you use other features
  15. Any information of the phone or user can be used as a custom variable
  16. You can track more than pageviewsEvent tracking is most useful for apps as they tell what the user does
  17. Any information of the phone or user can be used as a custom variable
  18. Microsoft does not provide version informationTracking from Microsoft is a couple of days behind