Получить тег реферера Google Analytics Android

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

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

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

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

Solutions Collecting From Web of "Получить тег реферера Google Analytics Android"

Я пошел вперед и опубликовал приложение для поиска мертвого пикселя, чтобы играть с отслеживанием намерений. По какой-то причине, когда я зарегистрировал два разных приемника вещания (например, 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); } } 

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

Ответ @DougW обновлен для Google 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> 

Проверьте на:

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

Для решений.

Тобия