Turns out to be quite simple. The default referrer from Chrome is 'com.android.chrome'. Override this by putting &referrer=
after package in your intent:// URI, for example:
var g_intent = "intent://" + code +
"/#Intent;scheme=yourscheme;package=com.your.app&referrer=code%3D" +
code + ";launchFlags=268435456;end";
Here's a gist that explains the javascript part of the solution more fully and also falls back to a normal market link if the intent:// scheme doesn't work: https://gist.github.com/akent/dec1b4b7383436b4623e
And in your Java code:
public static class InstallReferrerReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
String referrer = intent.getStringExtra("referrer");
// Do things with your referrer here
}
}
And in AndroidManifest.xml:
<receiver android:name=".YourActivity$InstallReferrerReceiver" android:exported="true">
<intent-filter>
<action android:name="com.android.vending.INSTALL_REFERRER" />
</intent-filter>
</receiver>