2010-09-28 22 views
13

प्राप्त करें हम एंड्रॉइड मार्केट के माध्यम से, हमारे एप्लिकेशन पर विज्ञापन क्लिक-थ्रू रेफ़रल ट्रैक करने के लिए Google Analytics का उपयोग करने की योजना बना रहे हैं।एंड्रॉइड Google Analytics रेफरर टैग

Google Documentation के अनुसार रेफरर टैग एक इरादे के माध्यम से आता है, और स्वचालित रूप से Google Analytics लाइब्रेरी द्वारा रिकॉर्ड किया जाता है।

यह बढ़िया है, लेकिन हमें अपने आंतरिक विश्लेषण के लिए उस रेफ़रल टैग को निकालने की आवश्यकता है। प्रलेखन प्रारंभिक लॉन्च मंशा से इसे कैसे पकड़ना है, और लाइव जाने से पहले इसे अनुकरण करने के निर्देशों के बारे में विवरणों पर शर्मिंदा है।

क्या किसी के पास इसका अनुभव है?

उत्तर

23

मैं आगे बढ़ गया और इरादे पर स्नूपिंग के साथ खेलने के लिए एक मृत पिक्सेल खोजक ऐप प्रकाशित किया। किसी कारण से, जब मैंने दो अलग-अलग प्रसारण रिसीवर पंजीकृत किए (यानी 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); 
    } 

} 

तब, जब आपके आवेदन वास्तव में शुरू की है, तो आप मूल्य वापस साझा वरीयताओं से बाहर निकलने और यह उपयोगकर्ता साइनअप या जो कुछ भी के साथ पारित कर सकते हैं। मैंने अपने उद्देश्यों के लिए अभियान टैग का उपयोग किया, लेकिन आप with this tool बनाए गए रेफरर स्ट्रिंग से बाहर के किसी भी पैरामीटर को पकड़ सकते हैं। पर

+4

कारण एक से अधिक रिसीवर नहीं करता ' टी काम यह है कि आप एक ही इरादे फ़िल्टर के लिए एक से अधिक रिसीवर पंजीकृत नहीं कर सकते हैं। यह भ्रमित दस्तावेज का मुद्दा यहां है - http://code.google.com/apis/analytics/docs/mobile/android.html#google-play-tracking - ऐसा लगता है कि आपके पास और अधिक नहीं हो सकता एक आवेदन में किसी भी * प्रकार के ब्रॉडकास्ट रिसीवर की तुलना में, जो निश्चित रूप से सत्य नहीं है। –

+0

@ डेवसिम्स - हाँ, उन्होंने इस पोस्ट को बनाने के बाद लंबे समय तक नोट जोड़ा। हालांकि विशेष रूप से स्पष्ट नहीं है, मैं सहमत हूं। – DougW

+0

@DougW मेरी que यह है कि मैं इस लिंक से कैसे प्राप्त कर सकता हूं "http://market.android.com/details?id=com.lifestreet.android.TestInstallationIntent&referrer=bb%3DAAAAAAAAAA&feature=search_result" referre = bb मान लीजिए कि मैंने जोड़ा है मेनिफेस्ट कोड में इस com.google.android.apps.analytics.AnalyticsReceiver के डिफ़ॉल्ट Google की चार पंक्तियों में मुझे अपने कोड – Khan

7

@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> 
+0

क्या GetHashMapFromQuery का उपयोग करना वाकई ठीक है? क्या रेफरर स्ट्रिंग को पार्स करने का कोई और आधिकारिक तरीका नहीं है? –