安卓 - 使用Google Analytics v4进行广告系列测量

7
我已按照此指南实施了 Google Analytics Campaign Measurement。然后,我想通过遵循此指南来测试一切是否正常运行。
我已在AndroidManifest.xml中添加了以下内容:
<meta-data android:name="com.google.android.gms.version"
        android:value="@integer/google_play_services_version" />
<meta-data android:name="com.google.android.gms.analytics.globalConfigResource"
        android:resource="@xml/global_tracker" />

<!-- Used for Google Play Store Campaign Measurement-->;
<service android:name="com.google.android.gms.analytics.CampaignTrackingService" />
<receiver android:name="com.google.android.gms.analytics.CampaignTrackingReceiver"
    android:exported="true">
    <intent-filter>
        <action android:name="com.android.vending.INSTALL_REFERRER" />
    </intent-filter>
</receiver>

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

将这些放在MainActivity.java中:
public enum TrackerName {
    APP_TRACKER, // Tracker used only in this app.
    GLOBAL_TRACKER, // Tracker used by all the apps from a company. eg: roll-up tracking.
    ECOMMERCE_TRACKER, // Tracker used by all ecommerce transactions from a company.
}

HashMap<TrackerName, Tracker> mTrackers = new HashMap<TrackerName, Tracker>();

synchronized Tracker getTracker(TrackerName trackerId) {
    if (!mTrackers.containsKey(trackerId)) {
        GoogleAnalytics analytics = GoogleAnalytics.getInstance(this);
        Tracker t = (trackerId == TrackerName.APP_TRACKER) ? analytics.newTracker("UA-xxxxxxxx-1")
                : (trackerId == TrackerName.GLOBAL_TRACKER) ? analytics.newTracker(R.xml.global_tracker)
                : analytics.newTracker("UA-xxxxxxxx-1");
        mTrackers.put(trackerId, t);
    } return mTrackers.get(trackerId);
}

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    GoogleAnalytics.getInstance(this).getLogger().setLogLevel(Logger.LogLevel.VERBOSE);

    // Get tracker.
    Tracker t = getTracker(TrackerName.APP_TRACKER);

    // Set screen name.
    t.setScreenName("Test Track");

    // Send a screen view.
    t.send(new HitBuilders.AppViewBuilder().build());
}

当我运行以下命令时:
adb shell am broadcast -a com.android.vending.INSTALL_REFERRER -n com.example.gatestapp/com.google.android.gms.analytics.CampaignTrackingReceiver --es  "referrer" "utm_source=testSource&utm_medium=testMedium&utm_term=testTerm&utm_content=testContent&utm_campaign=testCampaign"

我收到了这个响应:
Broadcast completed: result=0

并且这是我的Logcat日志:

I/GAV4﹕ Thread[GAThread,5,main]: Campaign found: utm_source=testSource

但我不知道如何将 utm_source 收集到一个字符串中,以便获取 "testSource" 的值。

因此,我尝试使用自定义接收器:

public class CustomReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        handleIntent(context, intent);
        Log.d("YES", "IT WORKS!!");
        new CampaignTrackingReceiver().onReceive(context, intent);
    }

    // Handle the intent data
    public void handleIntent(Context context, Intent intent) {
        String referrer = intent.getStringExtra("referrer");
        Log.d("YEES", "IT WORKS!!!");
    }
}

我将AndroidManifest.xml中的接收者标签更改为以下内容:

<receiver android:name=".app.service.CustomReceiver"
        android:exported="true">
        <intent-filter>
            <action android:name="com.android.vending.INSTALL_REFERRER" />
        </intent-filter>
</receiver>

并将 adb shell 命令更改为以下命令:
adb shell am broadcast -a com.android.vending.INSTALL_REFERRER -n com.example.gatestapp/.app.service.CustomReceiver --es  "referrer" "utm_source=testSource&utm_medium=testMedium&utm_term=testTerm&utm_content=testContent&utm_campaign=testCampaign"

广播已成功,但我的CustomReceiver没有捕获到任何内容!Logcat中没有出现“YES”或“YEES”。此外,我的Google Analytics中也没有检测到任何命中。我的方法有什么问题吗? 如何收集referrer extras? 编辑: 我已成功使用SharedPreferences收集referrer extras。然而,在Play商店发布我的应用程序时,referrer extras似乎丢失了。 我确定我做得很正确,因为我使用了 URL Builder。此外,我尝试了一些应用程序演示,例如this tutorial中的演示,但它不起作用。我的设备没有收到任何extras。
我是在做错误的方法吗?还是我错过了什么?
2个回答

3

首先,请确认你的包名是否为"com.example.gatestapp",因为这是你在adb命令中写的。其次,请确认你在清单文件中将"app.service.CustomReceiver"放在"CampaignTrackingReceiver"之前,因为可能意图被CampaignTrackingReceiver拦截而不是你的接收器。

我成功地通过自定义广播获取了推荐内容:

Bundle extras = intent.getExtras();
String referrerString = extras.getString("referrer");

1
我觉得你的问题非常有用,可以复制该功能。
问题似乎在于软件包的名称,我完全按照相同的步骤操作。

android_manifest.xml

<receiver
        android:name="co.tpaga.poc.referer.poc_installreferer.CustomInstallRefererReceiver"
        android:enabled="true"
        android:exported="true">
        <intent-filter>
            <action android:name="com.android.vending.INSTALL_REFERRER" />
        </intent-filter>
    </receiver>

adb命令是:

echo 'am broadcast \
-a com.android.vending.INSTALL_REFERRER \
-n "co.tpaga.poc.referer.poc_installreferer/co.tpaga.poc.referer.poc_installreferer.CustomInstallRefererReceiver" \
--es "referrer" \
  "utm_source=test_source&utm_medium=test_medium&utm_term=test_term&utm_content=test_content&utm_campaign=test_name&tappsi_uuid=04442-123123-213213-2323"; \                                     
exit' | ./adb shell

而 logcat 的退出信息为:

03-22 21:58:04.469 22340-22340/co.tpaga.poc.referer.poc_installreferer D/YEES: IT WORKS!!!utm_source=test_source&utm_medium=test_medium&utm_term=test_term&utm_content=test_content&utm_campaign=test_name
03-22 21:58:04.469 22340-22340/co.tpaga.poc.referer.poc_installreferer D/YES: IT WORKS!!
03-22 21:58:04.477 22340-22394/co.tpaga.poc.referer.poc_installreferer D/GAv4: Received installation campaign: content=test_content, keyword=test_term, medium=test_medium, name=test_name, source=test_source

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接