7

Aggiungo Google Analytics nella mia app. Quando vado a Real Time > Overview vedo 1.0 sotto App Version. La mia domanda è: da dove viene Google Analytics a prendere questo numero 1.0?Google Analytics rileva il numero di versione errato per la mia app per Android

enter image description here

Ecco come sto iniziando Analytics nel onCreate() della mia Launcher Activity:

 analytics = GoogleAnalytics.getInstance(MainDrawerActivity.this); 
     analytics.setLocalDispatchPeriod(1800); 

     tracker = analytics.newTracker("UA-XXXXXX-X"); // Replace with actual tracker/property Id 
     tracker.enableExceptionReporting(true); 
     tracker.enableAdvertisingIdCollection(true); 
     tracker.enableAutoActivityTracking(true); 

Il mio progetto ha più file Gradle. Sto tutti incollando qui:

enter image description here

Ecco il mio file Gradle e anche il mio manifesto Android: build.gradle: (per il mio progetto: xxx ...)

buildscript { 
repositories { 
    jcenter() 
} 
dependencies { 
    classpath 'com.android.tools.build:gradle:1.1.3' 

    // NOTE: Do not place your application dependencies here; they belong 
    // in the individual module build.gradle files 
} 
} 

allprojects { 
repositories { 
    jcenter() 
} 
} 

build.gradle: (per il mio modulo: app)

android { 
compileSdkVersion 22 
buildToolsVersion "22.0.0" 

defaultConfig { 
    applicationId "xxx.xxx.xxx" 
    minSdkVersion 16 
    targetSdkVersion 22 
    versionCode 58 
    versionName "2.0.13" 
} 
buildTypes { 
    release { 
     minifyEnabled false 
     proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
    } 
} 

compileOptions { 
    encoding "UTF-8" 
    sourceCompatibility JavaVersion.VERSION_1_7 
    targetCompatibility JavaVersion.VERSION_1_7 
} 
lintOptions { 
    abortOnError false 
} 
} 

build.gradle per il modulo: circularImageView (si tratta di un progetto di libreria) applicare plugin: 'com.android.library'

android { 
compileSdkVersion 22 
buildToolsVersion "22.0.0" 

defaultConfig { 
    minSdkVersion 11 
    targetSdkVersion 19 

    versionCode 60 
    versionName "2.0.14" 
} 

buildTypes { 
    release { 
     minifyEnabled false 
     proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt' 
    } 
} 
} 

all'inizio del mio manifesto:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
package="xxx.xxxx.xxxxxxxx" 
android:installLocation="internalOnly" 
android:versionCode="58" 
android:versionName="2.0.13" > 

<uses-sdk 
    android:minSdkVersion="16" 
    android:targetSdkVersion="21" /> 

altro Da notare che prima di vedere la versione "1.0", ero in Eclipse, ma questa è la prima volta che vengo su Android Studio ma ho usato the Gradle Method per aggiungere Google Analytics al mio account.

+0

Utilizzi il tracker globale? –

+1

Che cos'è un tracker globale? – user1406716

+0

Solo una breve descrizione, il tracker globale non seleziona mai il nome di versione errato delle app. Lo descriverò sulla risposta. –

risposta

2

È possibile utilizzare l'inseguitore globale che ha fornito da Google Analytics v4.Prima di cominciare ad aggiungere inseguitore globale entro le tue applicazioni, diamo questa struttura di prima:

structure

app_tracker.xml

<resources> 
     <!-- The apps Analytics Tracking Id --> 
     <string name="ga_trackingId">UX-XXXXXXXXX-X</string> 
     <!-- Percentage of events to include in reports --> 
     <string name="ga_sampleFrequency">100.0</string> 
     <!-- Enable automatic Activity measurement --> 
     <bool name="ga_autoActivityTracking">true</bool> 
     <!-- catch and report uncaught exceptions from the app --> 
     <bool name="ga_reportUncaughtExceptions">true</bool> 
     <!-- How long a session exists before giving up --> 
     <integer name="ga_sessionTimeout">-1</integer> 
     <!-- If ga_autoActivityTracking is enabled, an alternate screen name can be specified to 
     substitute for the full length canonical Activity name in screen view hit. In order to 
     specify an alternate screen name use an <screenName> element, with the name attribute 
     specifying the canonical name, and the value the alias to use instead. --> 
     <screenName name="com.mypackage.example.MainActivity">Home Screen</screenName> 
    </resources> 

ecommerce_tracker.xml

<resources> 
    <integer name="ga_sessionTimeout">60</integer> 
    <!-- The following value should be replaced with correct property id. --> 
    <string name="ga_trackingId">UX-XXXXXXXXX-X</string> 
</resources> 

global_tracker.xml

<!-- enter your app's name --> 
<string name="ga_appName">My App Name</string> 
<!-- enter the current app's versionName --> 
<string name="ga_appVersion">2.0.13</string> 

<!-- the Local LogLevel for Analytics --> 
<string name="ga_logLevel">verbose</string> 
<!-- how often the dispatcher should fire --> 
<integer name="ga_dispatchPeriod">30</integer> 
<!-- Treat events as test events and don't send to google --> 
<bool name="ga_dryRun">false</bool> 
<!-- The screen names that will appear in reports --> 
<screenName name="com.mypackage.example.MainActivity">Home Screen</screenName> 

Quindi, creare una nuova classe Java chiamato App ed estendere con Application:

import android.app.Application; 
import com.google.android.gms.analytics.GoogleAnalytics; 
import com.google.android.gms.analytics.Tracker; 
import java.util.HashMap; 

/** 
* Custom implementation of android.app.Application.&nbsp;The android:name attribute in the 
* AndroidManifest.xml application element should be the name of your class (".MyApp"). Android will 
* always create an instance of the application class and call onCreate before creating any other 
* Activity, Service or BroadcastReceiver. 
*/ 
public class App extends Application { 
    // The following line should be changed to include the correct property id. 
    private static final String PROPERTY_ID = "UX-XXXXXXXXX-X"; 

    //Logging TAG 
    private static final String TAG = "App"; 
    public static int GENERAL_TRACKER = 0; 

    public enum TrackerName { 
     APP_TRACKER, // Tracker used only in this app. 
     GLOBAL_TRACKER, // Tracker used by all the apps from a company. eg: roll-up tracking. 
     ECOMMERCE_TRACKER, 
    } 

    HashMap<TrackerName, Tracker> mTrackers = new HashMap<>(); 
    public App() { 
     super(); 
    } 
    public synchronized Tracker getTracker(TrackerName trackerId) { 

     if (!mTrackers.containsKey(trackerId)) { 
      GoogleAnalytics analytics = GoogleAnalytics.getInstance(this); 
      Tracker t = (trackerId == TrackerName.APP_TRACKER) ? analytics.newTracker(R.xml.app_tracker) 
      : (trackerId == TrackerName.GLOBAL_TRACKER) ? analytics.newTracker(PROPERTY_ID) 
      : analytics.newTracker(R.xml.ecommerce_tracker); 
      mTrackers.put(trackerId, t); 
     } 
     return mTrackers.get(trackerId); 
    } 
} 

modificare la vostra slighlty manifestare:

<application 
    android:name=".App" 
    android:allowBackup="true" 
    android:icon="@mipmap/ic_launcher" 
    android:label="@string/app_name"> 

    <meta-data android:name="com.google.android.gms.version" 
     android:value="@integer/google_play_services_version" /> 
    <!-- Google Analytics Version v4 needs this value for easy tracking --> 
    <meta-data android:name="com.google.android.gms.analytics.globalConfigResource" 
     android:resource="@xml/global_tracker" /> 

    <!-- Optionally, register AnalyticsReceiver and AnalyticsService to support background 
    dispatching on non-Google Play devices --> 
    <receiver android:name="com.google.android.gms.analytics.AnalyticsReceiver" 
     android:enabled="true"> 
     <intent-filter> 
      <action android:name="com.google.android.gms.analytics.ANALYTICS_DISPATCH" /> 
     </intent-filter> 
    </receiver> 
    <service android:name="com.google.android.gms.analytics.AnalyticsService" 
     android:enabled="true" 
     android:exported="false"/> 

    <!-- Optionally, register CampaignTrackingReceiver and CampaignTrackingService to enable 
     installation campaign reporting --> 
    <receiver android:name="com.google.android.gms.analytics.CampaignTrackingReceiver" 
     android:exported="true"> 
     <intent-filter> 
      <action android:name="com.android.vending.INSTALL_REFERRER" /> 
     </intent-filter> 
    </receiver> 
    <service android:name="com.google.android.gms.analytics.CampaignTrackingService" 
     android:enabled="true"/> 

    <!-- ... --> 
</application> 

E, infine, ha colpito il tracker entro MainActivity classe:

private Tracker tracker; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    tracker = ((App) getApplication()).getTracker(App.TrackerName.APP_TRACKER); 
    tracker.setScreenName("Home Screen"); 
    tracker.send(new HitBuilders.EventBuilder().build()); 
    ... 
} 

@Override 
protected void onStart() { 
    super.onStart(); 
    GoogleAnalytics.getInstance(this).reportActivityStart(this); 
} 

@Override 
protected void onStop() { 
    GoogleAnalytics.getInstance(this).reportActivityStop(this); 
    super.onStop(); 
} 

Voila! Google Analytics sono attivati! Per ulteriori informazioni, vedere:

Advanced Configuration - Android SDK v4

Google Analytics SDK v4 for Android - Getting Started

TAG:

  • Google Analytics Tutorial per Android
  • Configurazione di Google Analytics
  • Google Analytics v4
  • Google Analytics esame ple
4

Ottiene la versione dal contesto che viene passato GoogleAnalytics.getInstance(context)

PackageInfo packageInfo = context.getPackageManager().getPackageInfo(context.getPackageName(), 0); 
packageInfo.versionName; 

Secondo la documentazione per PackageInfo:

Il nome della versione di questo pacchetto, come specificato dal attributo versionName del tag .

Inoltre, per poter ottenere con precisione i dati delle applicazioni, è necessario creare il Tracker da una classe che estende Application

public class MyApp extends Application { 
    public Tracker tracker; 
    ..... 

    public Tracker getTracker() { 
     if (tracker == null) { 
      tracker = GoogleAnalytics.getInstance(this); 
      ....... 
     } 
     return tracker; 
    } 
} 
+0

Il 'contesto' che viene passato a questa funzione è' getApplicationContext() 'dai miei vari Actvities. Quindi la mia prossima domanda dovrebbe essere dove getApplicationContext() 'ottiene la versione? in pratica, non dovrebbe essere ** 1.0 **, voglio che sia ** 2.0.13 ** (come mostrato nel mio Manifest e build.gradle. – user1406716

+0

@ user1406716 - Ho provato questo in molti modi diversi, e l'analisi è sempre estraendo da me il versionName da 'build.gradle' – mattfred

+0

Scusa se ho ancora il problema, ho aggiunto la bounty alla domanda e ho aggiunto ulteriori dettagli sul mio progetto Fammi sapere se hai altri Input. – user1406716