Pregunta

Estamos planeando utilizar Google Analytics para realizar un seguimiento de anuncios de clic a través de referencias, a través del Android Market, a nuestra aplicación.

De acuerdo con la documentación Google la etiqueta de referencia viene a través a través de una intención, y se registra automáticamente por la biblioteca de Google Analytics.

Eso es grande, pero hay que extraer esa etiqueta de referencia para nuestros propios análisis internos. La documentación es tímido en detalles acerca de cómo agarrarlo de la intención inicial de lanzamiento, e instrucciones sobre cómo simular esto antes de ir vivo.

¿Alguien tiene experiencia con esto?

¿Fue útil?

Solución

Me adelanté y publiqué una aplicación de buscador de pixel muerto para jugar con husmear en la intención. Por alguna razón, cuando me registré dos receptores de radiodifusión diferentes (es decir com.google.android.apps.analytics.AnalyticsReceiver y mi propio), yo nunca he recibido por mi cuenta.

Así que en vez, me inscribí solamente mi propio receptor, procesar la información, y pasarlo a Google Analytics. No sé cómo kosher esto es, pero funciona. Código sigue.

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

}

A continuación, cuando su aplicación es en realidad puso en marcha, se puede tirar de la parte posterior valor de las preferencias compartidas y pasarlo junto con el registro de usuario o lo que sea. He utilizado la etiqueta de campaña para mis propósitos, pero se puede agarrar cualquier parámetro que desea salir de la cadena de referencia creado con esta herramienta .

Otros consejos

Respuesta @DougW 's Analytics SDK actualizado para 4

https://developers.google.com/analytics/devguides/collection/android/v4 / campañas

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

}

En el archivo de manifiesto que:

        <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>
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top