Android referral tracking does not work
I am attempting to get Android Referral tracking to work. I am following the only documentation I have found here http://code.google.com/mobile/analytics/docs/android/#referrals I have the following in my android manifest file
<receiver
android:name="com.google.android.apps.analytics.AnalyticsReceiver"
android:exported="true">
<intent-filter>
<action android:name="com.android.vending.INSTALL_REFERRER" />
</intent-filter>
</receiver>
<receiver android:name="com.package.Receiver" android:exported="true">
<intent-filter>
<action android:name="com.android.vending.INSTALL_REFERRER" />
</intent-filter>
</receiver>
<uses-sdk android:minSdkVersion="4"/>
com.package.Receiver starts with:
public void onReceive(Context paramContext, Intent paramIntent) {
String str1 = paramIntent.getStringExtra("referrer");
Log.i("myapp", "action: '" + paramIntent.getAction() + "'
referrer string: '" + str1 + "'");
Also with a little bit of decompiling com.google.android.apps.analytics.AnalyticsReceiver has the following code in it:
public void onReceive(Context ctx, Intent intent)
/* */ {
/* 24 */ String referrer = intent.getStringExtra("referrer");
/* */
/* 26 */ if ((!
("com.android.vending.INSTALL_REFERRER".equals(intent.getAction())))
|| (referrer == null))
/* */ {
/* 28 */ return;
/* */ }
/* */
/* 31 */ String formattedReferrer = formatReferrer(referrer);
/* */
/* 33 */ if (formattedReferrer != null) {
/* 34 */ PersistentEventStore store = new
PersistentEventStore(ctx);
/* 35 */ store.setReferrer(formattedReferrer);
/* 36 */ Log.d("googleanalytics", new
StringBuilder().append("Stored
referrer:").append(formattedReferrer).toString());
/* */ } else {
/* 38 */ Log.w("googleanalytics", "Badly formatted referrer, ignored");
/* */ }
/* */ }
Note the two lines 36 and 38 that Log "googleanalytics" I have tried pushing the above app to the market, downloading it on my Nexus One (after uninstalling a previous version of the app). I have ge开发者_如何学编程nerated a link using the google page I linked to at the beginning of this post
http://www.google.com/url?sa=D&q=http://market.android.com/search%3Fq%3Dpname:com.package.app%26referrer%3Dutm_source%253Dgoogle%2526utm_medium%253Dcpc%2526utm_term%253Drunning%25252Bshoes%2526utm_content%253Dcontent1%2526utm_campaign%253Dslogan&usg=AFQjCNFctwqk1WgWl0bhiIBNVqy3U4OPRw
I attached logcat to my Nexus One while I download the app from that link, I do not see any logs from "googleanalytics" or "myapp". The rest of the google analytics library does work for my app. I.E. I see records on google analytics about pages hits etc. However all the traffic sources are "Direct Traffic". I am at a loss as to what is going on. Does anyone have any insight into what I might be doing wrong?
As is often the case I found my own answer. My problem was in my AndroidManifest.xml
I had the following in my manifest:
<manifest>
<application>
</application>
<receiver>
</receiver>
<uses-sd/>
</manifest>
The receiver tag was in the wrong spot. It should look like this
<manifest>
<application>
<receiver>
</receiver>
</application>
<uses-sd/>
</manifest>
I am now seeing the logs I expect to when I install the app. In a few hours hopefully Google Analytics will have the data as well.
I have explore quite a lot the referral tracker with analytics for android. You don't need to put the app in the market you can just send a broadcast intent.
Intent i = new Intent("com.android.vending.INSTALL_REFERRER");
i.setPackage(com.package.yourapp)
//referrer is a composition of the parameter of the campaing
i.putExtra("referrer", referrer);
sendBroadcast(i);
There can be only one BroadcastReceiver for an action. In your AndroidManifest.xml, you have two listening for com.android.vending.INSTALL_REFERRER
.
If you want to your receiver AND the Google Analytics receiver to both handle the intent, make your receiver a subclass of AnalyticsReceiver, like this:
import com.google.android.apps.analytics.AnalyticsReceiver;
class Receiver extends AnalyticsReceiver {
@Override
void onReceive(Context context, Intent intent) {
super.onReceive(context, intent);
// Add your custom handling here
}
}
Then make sure yours is the only receiver in AndroidManifest.xml:
<receiver android:name="com.package.Receiver" android:exported="true">
<intent-filter>
<action android:name="com.android.vending.INSTALL_REFERRER" />
</intent-filter>
</receiver>
精彩评论