Android 推荐跟踪不适用于 Google Play

2024-02-09

我正在尝试实施对 Google Play 下载的推荐跟踪。 在上传到 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 进行分析跟踪和推荐跟踪。

下面一个是我的自定义广播接收器。

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>

我应该怎么做才能从 Google Play 获取推荐字符串?


你可以写这个简单的接收器:

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>

那么您需要将referrer参数发送到google playstore URL,如下所示:

当您安装应用程序时第一次会得到这个

引用者字段是必需的,无论你在引用者字段中传递什么字符串,你都会在广播接收器中得到它

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android 推荐跟踪不适用于 Google Play 的相关文章

随机推荐