Получить тег Google Analytics для Android - PullRequest
13 голосов
/ 29 сентября 2010

Мы планируем использовать Google Analytics для отслеживания переходов по кликам объявлений через Android Market в наше приложение.

Согласно Документации Google тег реферера проходит через намерение и автоматически записывается библиотекой Google Analytics.

Это замечательно, но нам нужно извлечь этот тег реферала для нашей собственной внутренней аналитики. В документации ничего не сказано о том, как извлечь его из первоначального намерения запуска, и о том, как смоделировать это перед запуском.

У кого-нибудь есть опыт с этим?

Ответы [ 3 ]

24 голосов
/ 15 октября 2010

Я выпустил приложение для поиска битых пикселей, чтобы поиграть с намерением.По какой-то причине, когда я зарегистрировал два разных приемника вещания (т.е. com.google.android.apps.analytics.AnalyticsReceiver и мой собственный), я никогда не получал его самостоятельно.

Поэтому вместо этого я зарегистрировал только мой собственный получатель, обработайте информацию и передайте ее в Google Analytics.Не знаю, насколько это кошерно, но это работает.Код следует.

public class ZSGoogleInterceptor extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        Bundle extras = intent.getExtras();

        String referrerString = extras.getString("referrer");
        // Next line uses my helper function to parse a query (eg "a=b&c=d") into key-value pairs
        HashMap<String, String> getParams = Utility.getHashMapFromQuery(referrerString);
        String source = getParams.get("utm_campaign");

        if (source != null) {
            SharedPreferences preferences = context.getSharedPreferences("my_prefs", Context.MODE_PRIVATE);
            Editor preferencesEditor = preferences.edit();
            preferencesEditor.putString("ga_campaign", source);
            preferencesEditor.commit();
        }

        // Pass along to google
        AnalyticsReceiver receiver = new AnalyticsReceiver();
        receiver.onReceive(context, intent);
    }

}

Затем, когда ваше приложение действительно запускается, вы можете извлечь значение из общих настроек и передать его вместе с регистрацией пользователя или чем-то еще.Я использовал тег кампании для своих целей, но вы можете извлечь любые параметры из строки реферера, созданной с помощью этого инструмента .

8 голосов
/ 05 мая 2015

@ Ответ DougW обновлен для Analytics SDK 4

https://developers.google.com/analytics/devguides/collection/android/v4/campaigns

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.util.Log;

import com.google.android.gms.analytics.CampaignTrackingReceiver;

import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.util.LinkedHashMap;
import java.util.Map;

/**
 * Created by dave on 15-05-05.
 */
public class ReferrerReceiver extends BroadcastReceiver {

    public static final String REFERRER = "REF";

    public static final String UTM_CAMPAIGN = "utm_campaign";
    public static final String UTM_SOURCE = "utm_source";
    public static final String UTM_MEDIUM = "utm_medium";
    public static final String UTM_TERM = "utm_term";
    public static final String UTM_CONTENT = "utm_content";

    private final String[] sources = {
            UTM_CAMPAIGN, UTM_SOURCE, UTM_MEDIUM, UTM_TERM, UTM_CONTENT
    };

    @Override
    public void onReceive(Context context, Intent intent) {

        Bundle extras = intent.getExtras();

        String referrerString = extras.getString("referrer");

        try {
            Map<String, String> getParams = getHashMapFromQuery(referrerString);

            SharedPreferences preferences = context
                    .getSharedPreferences(REFERRER, Context.MODE_PRIVATE);

            SharedPreferences.Editor preferencesEditor = preferences.edit();

            for (String sourceType : sources) {
                String source = getParams.get(sourceType);

                if (source != null) {

                    preferencesEditor.putString(sourceType, source);

                }
            }

            preferencesEditor.commit();
        } catch (UnsupportedEncodingException e) {

            Log.e("Referrer Error", e.getMessage());
        } finally {

            // Pass along to google
            CampaignTrackingReceiver receiver = new CampaignTrackingReceiver();
            receiver.onReceive(context, intent);
        }



    }

    public static Map<String, String> getHashMapFromQuery(String query)
            throws UnsupportedEncodingException {

        Map<String, String> query_pairs = new LinkedHashMap<String, String>();

        String[] pairs = query.split("&");
        for (String pair : pairs) {
            int idx = pair.indexOf("=");
            query_pairs.put(URLDecoder.decode(pair.substring(0, idx), "UTF-8"),
                    URLDecoder.decode(pair.substring(idx + 1), "UTF-8"));
        }
        return query_pairs;
    }

}

В вашем файле манифеста:

        <service android:name="com.google.android.gms.analytics.CampaignTrackingService" />
        <receiver android:name="com.google.android.gms.analytics.CampaignTrackingReceiver" />

        <!-- Make sure this points to the location of Referrer Receiver in your package -->
        <receiver android:name=".ReferrerReceiver" android:exported="true">
            <intent-filter>
                <action android:name="com.android.vending.INSTALL_REFERRER" />
            </intent-filter>
        </receiver>
3 голосов
/ 14 декабря 2010

Проверка по адресу:

Получить реферер после установки приложения из Android Market

для решений.

Тобия

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...