简体   繁体   English

Android 应用程序和谷歌分析

[英]Android app and google analytics

I have an android application that it worked with android webview and I thought to add google analytics to it.我有一个与 android webview 一起使用的 android 应用程序,我想向它添加谷歌分析。

I followed the official instructions from here .我按照这里的官方说明进行操作。 The application continues working properly but I don't take any response in google analytics website.该应用程序继续正常工作,但我在 google 分析网站上没有任何响应。

Below I show to you my code to see if I made some mistakes.下面我给大家展示一下我的代码,看看我是否犯了一些错误。

*In MainActivity you can see only the parts of code that I changes for google analytics. *在 MainActivity 中,您只能看到我为 google 分析更改的代码部分。

Imports for Google Analytics Google Analytics 的导入

import com.google.android.gms.analytics.GoogleAnalytics;
import com.google.android.gms.analytics.HitBuilders;
import com.google.android.gms.analytics.Tracker;

MainActivity.java主活动.java

    private WebView myWebView;
    private Tracker mTracker;
    private String name = new String("MyApp Main Screen");


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                WindowManager.LayoutParams.FLAG_FULLSCREEN);
        setContentView(R.layout.activity_main);
        setVolumeControlStream(AudioManager.STREAM_MUSIC);
        myWebView = (WebView) this.findViewById(R.id.webView1);
        WebSettings settings = myWebView.getSettings();
        settings.setJavaScriptEnabled(true);
        myWebView.loadUrl("file:///android_asset/www/index.html");
        myWebView.setVerticalScrollBarEnabled(false);
        myWebView.setHorizontalScrollBarEnabled(false);
        settings.setDomStorageEnabled(true);
        settings.setDatabaseEnabled(true);
        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) {
            settings.setDatabasePath("/data/data/" + myWebView.getContext().getPackageName() + "/databases/");
        }
        myWebView.addJavascriptInterface(new AudioInterface(this), "AndAud");
        myWebView.addJavascriptInterface(new InternetInteface(this), "AndInChk");
        myWebView.setWebChromeClient(new WebChromeClient() {
            @Override
            public void onExceededDatabaseQuota(String url,
                                                String databaseIdentifier,
                                                long currentQuota,
                                                long estimatedSize,
                                                long totalUsedQuota,
                                                WebStorage.QuotaUpdater quotaUpdater) {
                quotaUpdater.updateQuota(estimatedSize * 2);
            }
        });


        getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);


        // Obtain the shared Tracker instance.
        AnalyticsApplication application = (AnalyticsApplication) getApplication();
        mTracker = application.getDefaultTracker();


    }




    @Override
    protected void onResume() {
/* myWebView.onResume(); */
        myWebView.resumeTimers();
        super.onResume();


        mTracker.setScreenName(name);
        mTracker.send(new HitBuilders.ScreenViewBuilder().build());


    }

In previous code the parts for analytics are the following在之前的代码中,分析部分如下

private Tracker mTracker;
private String name = new String("MyApp Main Screen");

//in onCreate class
// Obtain the shared Tracker instance.
AnalyticsApplication application = (AnalyticsApplication) getApplication();
mTracker = application.getDefaultTracker();



//in onResume class
mTracker.setScreenName(name);
mTracker.send(new HitBuilders.ScreenViewBuilder().build());

AnalyticsApplication.java分析应用程序.java

package com.r.movie.quiz;

import android.app.Application;

import com.google.android.gms.analytics.GoogleAnalytics;
import com.google.android.gms.analytics.Tracker;


public class AnalyticsApplication extends Application {

    private Tracker mTracker;

    synchronized public Tracker getDefaultTracker() {
       if (mTracker == null) {
          GoogleAnalytics analytics = GoogleAnalytics.getInstance(this);

          mTracker = analytics.newTracker(R.xml.global_tracker);
       }
            return mTracker;
    }

}

build.gradle -> App level build.gradle -> 应用级别

apply plugin: 'com.android.application'


android {
    compileSdkVersion 23
    buildToolsVersion "23.0.3"

    defaultConfig {
        applicationId "com.r.movie.quiz"
        minSdkVersion 15
        targetSdkVersion 23
        versionCode 28
        versionName "1.1.6"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:23.3.0'
    compile 'com.google.android.gms:play-services-analytics:8.4.0'

}

apply plugin: 'com.google.gms.google-services'

build.gradle -> project level build.gradle -> 项目级别

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.1.0'
        classpath 'com.google.gms:google-services:2.0.0-alpha6'

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

allprojects {
    repositories {
        jcenter()
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

AndroidManifest.xml AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.r.movie.quiz"
        android:versionCode="28"
        android:versionName="1.1.6">



        <uses-sdk
            android:minSdkVersion="11"
            android:targetSdkVersion="23" />

        <application 
            android:name=".AnalyticsApplication"
            android:allowBackup="true"
            android:icon="@mipmap/ic_launcher"
            android:label="@string/app_name"
            android:theme="@style/AppTheme">


            <activity
                android:name="com.r.movie.quiz.MainActivity"
                android:configChanges="orientation"
                android:label="@string/app_name"
                android:screenOrientation="portrait"
                android:theme="@style/Theme.AppCompat.NoActionBar">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />

                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>

        </application>

        <uses-permission android:name="android.permission.INTERNET" />
        <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
        <uses-permission android:name="android.permission.READ_PHONE_STATE" />

    </manifest>

Activity_Main.xml Activity_Main.xml

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/container"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.r.movie.quiz.MainActivity"
    tools:ignore="MergeRootFrame" >

    <WebView
        android:id="@+id/webView1"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</FrameLayout>

Using EasyTracker is an alternative.使用 EasyTracker 是一种替代方法。 EasyTracker is just an alternative to Tracker. EasyTracker 只是 Tracker 的替代品。 If Tracker doesn't work you could try EasyTracker.如果Tracker不起作用,您可以尝试 EasyTracker。

Example:例子:

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.os.PowerManager;
import android.os.PowerManager.WakeLock;


import com.google.analytics.tracking.android.EasyTracker;
import com.google.analytics.tracking.android.MapBuilder;

public class Example extends Activity {

    @Override
    protected void onCreate(Bundle sis){
        super.onCreate(sis);

        et = EasyTracker.getInstance(Contact.this);
        et.send(MapBuilder.createEvent(TrackEventNameHandler.CLASS_CONTACT, TrackEventNameHandler.TRACK_EVENT_OK, TrackEventNameHandler.EVENT_TRACK, null).build());


    }

    EasyTracker et;
    @Override
    public void onStart(){
        super.onStart();
        EasyTracker.getInstance(this).activityStart(this);
    }
    @Override
    public void onStop() {
        super.onStop();
        EasyTracker.getInstance(this).activityStop(this);
    }

}

It works!有用!

I recreate the account for application, and i use new json file with new USER-ID.我为应用程序重新创建了帐户,并使用了具有新用户 ID 的新 json 文件。

Also I delete the following lines of MainActivity code我还删除了以下几行 MainActivity 代码

//in onResume class
mTracker.setScreenName(name);
mTracker.send(new HitBuilders.ScreenViewBuilder().build());

and Ι create a function about that and I call it sendScreenName()我创建了一个关于它的函数,我称之为 sendScreenName()

private void sendScreenName() {
    String name = "MainActivity";

    // [START screen_view_hit]
    mTracker.setScreenName(name);
    mTracker.send(new HitBuilders.ScreenViewBuilder().build());
    // [END screen_view_hit]
}

For the end, I added the following line in the end of onCreate:最后,我在 onCreate 的末尾添加了以下行:

 sendScreenName();

After all, when I open my application i saw the magic "1" number on analytics.google.com reports (real time)!毕竟,当我打开我的应用程序时,我在 analytics.google.com 报告(实时)上看到了神奇的“1”数字!

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM