2014-07-21 21 views
10

Sto cercando di implementare il monitoraggio dei referral sui download dal gioco Google. Prima di caricare su Google Play, quando ho provato a testare l'app utilizzando lo script seguente, funziona correttamente e sto ricevendo una stringa di riferimento.Il monitoraggio dei referral Android non funziona con Google Play

adb shell 
am broadcast -a com.android.vending.INSTALL_REFERRER -n <my.myPackage>/.<path.up.until.my.CustomBroadcastReceiver> --es "referrer" "utm_source%3Dentity%26utm_medium%3Dsocial%26utm_campaign%3Dwo_referrer%26referrerId%3D173%26entity%3Dfacebook%26email%3Dmideeshp%40email.com" 

Dopo l'esecuzione di questo codice, sto decodifica la stringa di riferimento e il mio server sempre aggiornato in base alla stringa di riferimento. Ma quando ho distribuito questa app su Google Play, non ricevo alcuna stringa di riferimento da Google Play. Sto utilizzando Google Analytics V2 sia per il tracciamento analitico che per il monitoraggio dei referral.

Sotto uno è il mio BroadcastReceiver personalizzato.

public class InstallReferrerReceiver extends BroadcastReceiver { 
private static final String TAG = "InstallReferrerReceiver"; 

@Override 
public void onReceive(Context context, Intent intent) { 

    HashMap<String, String> values = new HashMap<String, String>(); 
    try { 
     if (intent.hasExtra("referrer")) { 
      Toast.makeText(context, "Inside app refferal", 5000).show(); 

      String url = intent.getStringExtra("referrer"); 
      final String referrer = URLDecoder.decode(url, "UTF-8"); 
      String referrers[] = referrer.split("&"); 
      int i = 0; 
      for (String referrerValue : referrers) { 
       String keyValue[] = referrerValue.split("="); 
       values.put(URLDecoder.decode(keyValue[0], "UTF-8"), 
         URLDecoder.decode(keyValue[1], "UTF-8")); 
       Log.i("" + i, keyValue[0] + "=" + keyValue[1]); 
      } 

      new AsyncTask<String, String, JSONObject>() { 

       @Override 
       protected void onPreExecute() { 
        super.onPreExecute(); 
       } 

       @Override 
       protected JSONObject doInBackground(String... params) { 
        // TODO Auto-generated method stub 
        String referrerUrl = "MyserverUrl?action=storerefer&" + referrer; 
        Log.i("purl address", referrerUrl); 
        JSONObject json = RestJsonClient.connect(referrerUrl); 
        return json; 
       } 

       @Override 
       protected void onPostExecute(JSONObject result) { 
        // TODO Auto-generated method stub 
        try { 
         if (result == null) { 
          Log.i("json null", "12"); 
         } else { 
          String status, error; 
          status = result.getString("status"); 
          error = result.getString("error"); 
          if (status.equals("success")) { 
           Log.i("referrer", "referrer status success"); 
          } 
          if (status.equals("failure")) { 
           Log.i("referrer", "referrer status failure"); 
          } 
         } 
        } catch (JSONException e) { 
         e.printStackTrace(); 
        } catch (Exception e) { 
         e.printStackTrace(); 
        } 
        super.onPostExecute(result); 
       } 
      }.execute(); 
     } 
    } catch (Exception e) { 
    } 
} 

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
package="my.package.name" 
android:versionCode="4" 
android:versionName="1.2.1" > 

<supports-screens 
    android:anyDensity="true" 
    android:largeScreens="true" 
    android:normalScreens="true" 
    android:resizeable="true" 
    android:smallScreens="true" /> 

<uses-sdk 
    android:minSdkVersion="8" 
    android:targetSdkVersion="19" /> 

<uses-feature 
    android:name="android.hardware.telephony" 
    android:required="false" /> 
<uses-feature 
    android:name="android.hardware.touchscreen" 
    android:required="false" /> 
<uses-feature 
    android:glEsVersion="0x00020000" 
    android:required="true" /> 

<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> 
<uses-permission android:name="android.permission.READ_CONTACTS" /> 
<uses-permission android:name="android.permission.READ_PHONE_STATE" /> 
<uses-permission android:name="android.permission.RECEIVE_SMS" /> 
<uses-permission android:name="android.permission.SEND_SMS" /> 
<uses-permission android:name="android.permission.GET_ACCOUNTS" /> 
<uses-permission android:name="android.permission.WAKE_LOCK" /> 
<uses-permission android:name="my.package.name.permission.C2D_MESSAGE" /> 
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" /> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
<uses-permission android:name="android.permission.VIBRATE" /> 
<uses-permission android:name="android.permission.RECEIVE_SMS" /> 

<permission 
    android:name="my.package.name.permission.C2D_MESSAGE" 
    android:protectionLevel="signature" /> 

<application 
    android:allowBackup="true" 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" 
    android:theme="@android:style/Theme.Black.NoTitleBar" > 
    <activity 
     android:name="my.package.name.Splash" 
     android:configChanges="orientation|keyboardHidden|screenSize" 
     android:label="@string/app_name" 
     android:windowSoftInputMode="stateHidden" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 

    <receiver 
     android:name="my.package.name.InstallReferrerReceiver" 
     android:exported="true" > 
     <intent-filter> 
      <action android:name="com.android.vending.INSTALL_REFERRER" /> 
     </intent-filter> 
    </receiver> 

    <receiver 
     android:name="com.google.android.gcm.GCMBroadcastReceiver" 
     android:permission="com.google.android.c2dm.permission.SEND" > 
     <intent-filter> 
      <action android:name="com.google.android.c2dm.intent.RECEIVE" /> 
      <action android:name="com.google.android.c2dm.intent.REGISTRATION" /> 

      <category android:name="my.package.name" /> 
     </intent-filter> 
    </receiver> 

    <service android:name="my.package.name.GCMIntentService" /> 
</application> 

Cosa devo fare per ottenere stringa di rinvio da Google Play?

risposta

5

è possibile scrivere questa semplice ricevitore:

public class DetectInstall extends BroadcastReceiver{ 

private String referrerId; 

@Override 
public void onReceive(Context context, Intent intent) { 

    if ((null != intent) 
      && (intent.getAction().equals("com.android.vending.INSTALL_REFERRER"))) { 
     Log.e("Message", "App is getting installed first time.."); 
     referrerId = intent.getStringExtra("referrer"); 

    } 
} 

}

poi nel manifesta aggiungere il tag del ricevitore all'interno della domanda come questa:

<application 

    android:hardwareAccelerated="true" 
    android:icon="@drawable/ic_bmg" 
    android:label="@string/app_name" 
    android:screenOrientation="portrait" 
    android:theme="@style/AppTheme" > 
    <receiver 
     android:name=".DetectInstall" 
     android:exported="true" > 
     <intent-filter> 
      <action android:name="com.android.vending.INSTALL_REFERRER" /> 
     </intent-filter> 
    </receiver> 

allora sarà necessario inviare il parametro referrer all'URL playstore di google Come questo:

https://play.google.com/store/apps/details?id=you.package.name&hl=en&referrer=you otterrà questo primo momento in cui si installa app

campo referrer è necessario, qualunque stringa di u passano nel campo referrer si otterrà nel ricevitore trasmissione

Problemi correlati