顯示具有 google analytics 標籤的文章。 顯示所有文章
顯示具有 google analytics 標籤的文章。 顯示所有文章

2016年2月27日 星期六

Android 開發筆記 - 在 Android Studio 環境上,使用 Google Analytics SDK / Admob SDK

使用 Android Studio 1.5.1 版,原先參考 Google 官方文件,結果一直爆問題 :P 其中 Google Analytics SDK 跟 Admob SDK 都會需要 Google Service 的環境,而碰到 Google Service 的引入不斷出錯,以下單純記錄修正流程。

參考 https://developers.google.com/analytics/devguides/collection/android/v4/https://developers.google.com/admob/android/app 資訊,更新 AndroidManifest.xml 位置,添加:

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


接著在 build.gradle (Project) 添加:

classpath 'com.google.gms:google-services:2.0.0-alpha6'

在 build.gradle (app) 添加:

dependencies {
//...
compile 'com.google.android.gms:play-services-analytics:8.4.0'
}
apply plugin: 'com.google.gms.google-services'


結果一直出錯:Gradle sync failed: Unable to load class 'com.android.sdklib.repository.FullRevision'. 這種很 general 的訊息。

甚至跑去看看 googlesample 檔案,如:
分別查看:build.gradleapp/build.gradle 和 gradle/wrapper/gradle-wrapper.properties 三個檔案。

改採用:

dependencies {
        //classpath 'com.android.tools.build:gradle:1.5.0'
        classpath 'com.android.tools.build:gradle-experimental:0.4.0'

        classpath 'com.android.tools.build:gradle:2.0.0-beta5'
        classpath 'com.google.gms:google-services:2.0.0-beta5'
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
}


仍是一樣的現象,最後靠直覺,嘗試亂改 classpath 'com.google.gms:google-services:1.0.0+' 後,會看到錯誤訊息引導說,可以查看 metadata 得知有哪些版本可用:

https://jcenter.bintray.com/com/google/gms/google-services/maven-metadata.xml

就這樣,直接挑沒有 beta/alpha 字眼:

dependencies {
        classpath 'com.android.tools.build:gradle:1.5.0'
        classpath 'com.android.tools.build:gradle-experimental:0.4.0'
        classpath 'com.google.gms:google-services:1.5.0'
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
}


以及 gradle/wrapper/gradle-wrapper.properties 使用:

#distributionUrl=https\://services.gradle.org/distributions/gradle-2.8-all.zip distributionUrl=https\://services.gradle.org/distributions/gradle-2.11-all.zip

如此一來,終於解掉編譯問題。接續就可以參考 Google Analytics SDK/Admob SDK 的文件,例如產生 google-services.json 以及 AnalyticsApplication extends Application 等用法等。

最後,我自己的用法:

AndroidManifest.xml:
...
<application
        android:name=".MyApplication"
        ...
>
...
</application>


MyApplication.java:
import android.app.Application;
import com.google.android.gms.analytics.GoogleAnalytics;
import com.google.android.gms.analytics.Tracker;
public class MyApplication extends Application {
        private Tracker mTracker;
        synchronized public Tracker getDefaultTracker() {
               if (mTracker == null) {
                      GoogleAnalytics analytics = GoogleAnalytics.getInstance(this);
                      // To enable debug logging use: adb shell setprop log.tag.GAv4 DEBUG
                      //mTracker = analytics.newTracker(R.xml.global_tracker);
                      mTracker = analytics.newTracker("UA-XXXXXXX-XX");
               }
               return mTracker;
        }
}


build.gradle (app):
dependencies {
        compile fileTree(dir: 'libs', include: ['*.jar'])
        testCompile 'junit:junit:4.12'

        compile 'com.android.support:appcompat-v7:23.2.0'
        compile 'com.android.support:design:23.2.0'

        // Google Analytics & Admob
        compile 'com.google.android.gms:play-services:8.4.0'
        compile 'com.google.android.gms:play-services-ads:8.4.0'
        compile 'com.google.android.gms:play-services-analytics:8.4.0'
}


build.gradle (Project):
dependencies {
        classpath 'com.android.tools.build:gradle:1.5.0'
        classpath 'com.android.tools.build:gradle-experimental:0.4.0'

        classpath 'com.google.gms:google-services:1.5.0'
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
}


MainActivity.java:
protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        MyApplication application = (MyApplication) getApplication();
        Tracker mTracker = application.getDefaultTracker();
        mTracker.setScreenName("main");
        mTracker.send(new HitBuilders.ScreenViewBuilder().build());
        //...
}

2014年8月10日 星期日

iOS 開發筆記 - 快速使用 Google Analytics SDK for iOS : Screens Usage



工作上看著老闆很重視統計資料,比我這個本業搞 Web Service 還認真,因此,想嘗試用在 Mobile app 會有如何成果!過去在 Blog 也曾用過,大概就可以得知哪篇文章比較多人看、哪個國家比較多人等等

這次也用 CocoaPods 安裝 Google Analytics SDK for iOS (pod 'GoogleAnalytics-iOS-SDK'),過程:

Step 1: 先在 Google Analytics 網站上註冊一個 App ,以此得到 tracking id

Google Analytics 首頁 -> 管理員 -> 資源(Click) -> 新建資源 -> 行動應用程式 -> 取得追蹤編號 -> 例如 @"UA-#######-#" 等

Step 2: 使用 CocoaPods 管理 Google Analytics SDK for iOS

$ vim Podfile
pod 'GoogleAnalytics-iOS-SDK'
$ pod install
...
Using GoogleAnalytics-iOS-SDK (3.0.9)
...


Step 3: 在 AppDelegate.m 初始化 Google Analytics 資訊

#import "GAI.h"

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
[GAI sharedInstance].trackUncaughtExceptions = YES;
[GAI sharedInstance].dispatchInterval = 30;
//[[[GAI sharedInstance] logger] setLogLevel:kGAILogLevelVerbose];
[[[GAI sharedInstance] logger] setLogLevel:kGAILogLevelNone];
[[GAI sharedInstance] trackerWithTrackingId:@"UA-########-#"];

id<GAITracker> tracker = [[GAI sharedInstance] defaultTracker];
tracker.allowIDFACollection = YES;

// ...

return YES;
}


Step 4: 在任何想回報的地方埋下 Codes

#import "GAIDictionaryBuilder.h"
#import "GAIFields.h"

- (void)reportStatus:(NSString *)pattern {
id<GAITracker> tracker = [[GAI sharedInstance] defaultTracker];
[tracker set:kGAIScreenName value: pattern];
[tracker send:[[GAIDictionaryBuilder createScreenView] build]];
}


如此一來,則可以透過 Google analytics 網站上觀察到多少使用者用了 App,並且透過上述 reportStatus 搭配的 pattern 字眼,可以用在使用者用了個功能就回報一次等。此外,在 Google Analytics SDK for iOS 上,其實有整合一個 GAITrackedViewController 供人繼承使用,仿造 Web 上頭的經驗,直接幫你記錄哪個 ViewController 用了多久 :) 有興趣的可以翻翻官方文件。
以下就是送出 [self reportStatus:@"test"]; 的統計資訊,需要留意的離開某個功能時,也該回報另一個狀態才能完整的終止。因此,透過 Screen 的用法,可以快速不破壞原先的程式架構。



註:由於 CocoaPods 裡頭維護的 GoogleAnalytics-iOS-SDK 沒有 link libAdIdAccess.a 這支,這將導致無法正確使用 IDFA 訊息,所以我自己額外再包了一個:changyy / GoogleAnalyticsSdkiOSUsingIDFA 來用用。