2014-07-21 81 views
10

我正在嘗試執行推介跟蹤Google play的下載。 在上傳到Google Play之前,當我嘗試使用下面的腳本測試應用程序時,其工作正常,我正在接收推薦字符串。Android推介跟蹤不適用於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" 

運行此代碼後,我解碼轉診串並根據轉診串在我的服務器得到更新。但是當我將這個應用程序部署到Google play時,我沒有從Google play獲取任何推薦字符串。我正在使用Google Analytics V2進行分析跟蹤和引薦跟蹤。

下面是我的自定義BroadcastReceiver。

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> 

我應該怎麼做才能從谷歌的推薦串玩?

回答

5

你可以寫這個簡單的reciever:

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"); 

    } 
} 

}

然後在清單中添加這樣的應用程序內的接收器標籤:

<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> 

,那麼你將需要發送的引用參數到google playstore網址像這樣:

當您安裝應用程序

引用字段需要會得到這個第一次,U傳中引用字段的任何字符串你會得到它在廣播reciever

相關問題