Android - 使用Google Analytics v4广告系列衡量标准

Har*_*rry 7 android google-analytics android-intent android-service google-analytics-firebase

我已根据本指南实施了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" />
Run Code Online (Sandbox Code Playgroud)

并将这些放在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());
}
Run Code Online (Sandbox Code Playgroud)

当我在命令下运行时:

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"
Run Code Online (Sandbox Code Playgroud)

我收到了这个回复:

Broadcast completed: result=0
Run Code Online (Sandbox Code Playgroud)

这在我的Logcat上:

I/GAV4? Thread[GAThread,5,main]: Campaign found: utm_source=testSource
Run Code Online (Sandbox Code Playgroud)

但我不知道如何将utm_source收集到String中,因此我可以获得"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!!!");
    }
}
Run Code Online (Sandbox Code Playgroud)

将AndroidManifest.xml上的receiver标签更改为:

<receiver android:name=".app.service.CustomReceiver"
        android:exported="true">
        <intent-filter>
            <action android:name="com.android.vending.INSTALL_REFERRER" />
        </intent-filter>
</receiver>
Run Code Online (Sandbox Code Playgroud)

并使用以下命令更改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"
Run Code Online (Sandbox Code Playgroud)

广播很成功,但我的CustomReceiver一无所获!Logcat上没有"YES"或"YEES".此外,我的Google Analytics上未检测到任何匹配.我的方法有什么问题吗?我如何收集推荐人的额外内容?

编辑:

我已经成功地收集引荐额外使用SharedPreferences.但是,当我在Play商店发布我的应用时,推荐人的附加功能似乎丢失了.我确信我做的一切都正确,因为我使用的是URL Builder.此外,我已经尝试了一些像本教程中的应用程序演示,但它无法正常工作.我的设备没有收到任何额外内容.

我做错了吗?或者,我错过了什么?

ysh*_*hak 3

首先,你的包名称是“com.example.gatestapp”吗?因为那是你在 adb 命令中写的。其次,您是否将“app.service.CustomReceiver”放在清单中的“CampaignTrackingReceiver”之前?也许意图是由 CampaignTrackingReceiver 拦截,而不是由您的接收者拦截。

我成功通过以下方式获取自定义广播中的参考信息:

Bundle extras = intent.getExtras();
String referrerString = extras.getString("referrer");
Run Code Online (Sandbox Code Playgroud)