谷歌分析获取我Android应用程序的错误版本号

7
我正在将Google Analytics添加到我的应用程序中。当我前往“实时 > 概览”时,我看到“应用程序版本”下面有“1.0”。我的问题是,Google Analytics从哪里获取这个“1.0”的数字?
以下是我在Launcher Activity的onCreate()方法中启动Analytics的方式:
        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);

我的项目有多个gradle文件。我在这里粘贴它们:

enter image description here

这是我的gradle文件和Android清单: build.gradle:(针对我的项目: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:(适用于我的模块:应用程序)

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
}
}

针对模块 circularImageView 的 build.gradle(这是一个库项目) 应用插件:'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'
    }
}
}

我的宣言开始:

<?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" />

另一个需要注意的点是,在看到“1.0”版本之前,我使用的是Eclipse,但这是我第一次使用Android Studio,不过我使用了Gradle方法将Google Analytics添加到我的账户中。


你使用全局跟踪器吗? - Anggrayudi H
1
什么是全局跟踪器? - user1406716
只是一个简短的描述,全局跟踪器从未选择错误的应用程序版本名称。我将在答案中进行描述。 - Anggrayudi H
2个回答

4

它从传递给 GoogleAnalytics.getInstance(context) 的上下文中获取版本号。

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

根据PackageInfo的文档:

此软件包的版本名称,由标记的versionName属性指定。

另外,为了准确获取应用程序数据,您应该从扩展Application类的类中创建Tracker
public class MyApp extends Application {
    public Tracker tracker;
    .....

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

该函数接收的上下文context是从我的不同活动中传递的getApplicationContext()。那么我的下一个问题是,getApplicationContext()从哪里获得版本?基本上,它不应该是1.0,我希望它是2.0.13(如我的清单文件和build.gradle所示)。 - user1406716
@user1406716 - 我已经尝试了几种不同的方法,但分析工具总是从build.gradle中提取versionName。 - mattfred
抱歉,我仍然遇到问题。我已经为问题添加了赏金,并在我的项目中添加了更多细节。如果您有任何其他建议,请告诉我。 - user1406716
@user1406716 - 我已更新我的答案,以包括更多信息。这显示了如何检索版本代码。 - mattfred

2
您可以使用Google Analytics v4提供的全局跟踪器。在开始向应用程序中添加全局跟踪器之前,请先了解此结构:
app_tracker.xml
请注意保留HTML标签。
<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>

然后,创建一个名为App的新Java类,并将其扩展为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);
    }
}

稍微修改你的清单文件:

<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>

最后,在MainActivity类中调用跟踪器:

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();
}

看这里!Google Analytics已经激活!更多信息,请参见:

Android SDK v4高级配置

Android上的Google Analytics SDK v4 - 入门指南

TAG标签:

  • Android的Google Analytics教程
  • 配置Google Analytics
  • Google Analytics v4
  • Google Analytics示例

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接