3

ストアからアプリをインストールした結果をログに記録しようとしています。しかし、私のカスタム レシーバーは、Play Market からの実際のインストールが発生すると機能しませんが、adb を使用してこのようなものをブロードキャストしている場合は機能します。

    adb shell am broadcast -a com.android.vending.INSTALL_REFERRER -n "package_name"/.InstallReceiver --es referrer "TOPKEK"
    Broadcasting: Intent { act=com.android.vending.INSTALL_REFERRER cmp="package_name"/.InstallReceiver (has extras) }

レシーバーは期待どおりに動作します。

    D/InstallReceiver: onReceive() called with: context = [android.app.ReceiverRestrictedContext@2af18590], intent = [Intent { act=com.android.vending.INSTALL_REFERRER flg=0x10 cmp="package_name"/.InstallReceiver (has extras) }extras=[Bundle{referrer='TOPKEK'}]]

しかし、Google Play アプリからインストールする場合、ログに記録されるのは CampaignTrackingReceiver からのメッセージのみです

受信者のコード:

package "package_name";

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;

import com.adjust.sdk.AdjustReferrerReceiver;
import "package_name".util.LogHelper;

public final class InstallReceiver extends BroadcastReceiver {

    private static final String TAG = "InstallReceiver";

    @Override
    public void onReceive(final Context context, final Intent intent) {
        Log.d(TAG, "onReceive() called with: " + "context = [" + context + "], intent = [" + LogHelper.format(intent) + "]");
        new AdjustReferrerReceiver().onReceive(context, intent);
    }
}

マニフェスト:

<?xml version="1.0" encoding="utf-8"?>
<manifest
    package="package_name"
    xmlns:android="http://schemas.android.com/apk/res/android">

    <!-- normal permissions -->
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.WAKE_LOCK"/>

    <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE"/>

    <permission
        android:name="'package_name'.permission.C2D_MESSAGE"
        android:protectionLevel="signature"/>

    <uses-permission android:name="'package_name'.permission.C2D_MESSAGE"/>

    <application
        android:name=".CustomApplication"
        android:allowBackup="true"
        android:fullBackupContent="false"
        android:icon="@drawable/menu_icon_earny"
        android:label="@string/app_name"
        android:theme="@style/AppTheme">

        //activities here


        //gcm stuff

        <!-- Google Analytics -->
        <receiver     android:name="com.google.android.gms.analytics.AnalyticsReceiver"
            android:enabled="true">
            <intent-filter>
                <action android:name="com.google.android.gms.analytics.ANALYTICS_DISPATCH"/>
            </intent-filter>
        </receiver>

        <service
            android:name="com.google.android.gms.analytics.AnalyticsService"
            android:enabled="true"
            android:exported="false"/>

        <!--My install receiver that didn't work as intended-->
        <receiver
            android:name=".InstallReceiver"
            android:enabled="true"
            android:exported="true">

            <intent-filter>
                <action android:name="com.android.vending.INSTALL_REFERRER"/>
            </intent-filter>

        </receiver>

    </application>

</manifest>

UPD: レシーバーが動作する必要があります。Google レシーバーではなく、そのログが必要です。

4

1 に答える 1

4

編集

あなたの受信機は動作しています - 私はちょうど生産でそれをチェックしました. 受信機をテストするには、Google のドキュメントで定義されているさまざまな UTM パラメータを含む URL を使用する必要があります。Google Play から直接インストールすることはできません。私のlogcatからの証拠は次のとおりです。

0-16 09:08:45.408 13634 13634 D InstallReceiver: onReceive() called with: context = [android.app.ReceiverRestrictedContext@1cf1a5b], intent = [Intent { act=com.android.vending.INSTALL_REFERRER flg=0x10 pkg=com.cashcowlabs.earny cmp=com.cashcowlabs.earny/.InstallReceiver (has extras) }extras=[Bundle{referrer='utm_source=google&utm_medium=cpc&utm_term=podcast%2Bapps&utm_content=displayAd1&utm_campaign=podcast%2Bgeneralkeywords'}]]

元の回答

あなたが参照しているエラー (「CampaignTrackingReceiver が登録されていません..」) は誤解を招くものであり、受信機が故障しているという意味ではありませ

おそらく、初期化時にアプリのマニフェストを調べて を探し、CampaignTrackingReceiver見つからない場合はその警告を表示します。これは単なる警告であり、Google アナリティクス SDK 開発者があなたを助けようとしているのに、あなたをさらに混乱させてしまっているケースです :)。

GA ブロードキャスト レシーバーを機能させたい場合は、コードを変更してリファラー インテントをデリゲートすることができます。Adjust の場合と同様です。

@Override
public void onReceive(final Context context, final Intent intent) {
    Log.d(TAG, "onReceive() called with: " + "context = [" + context + "], intent = [" + LogHelper.format(intent) + "]");
    new AdjustReferrerReceiver().onReceive(context, intent);
    new CampaignTrackingReceiver().onReceive(context, intent);
}

Google のドキュメントによると、サービスもマニフェストに追加する必要があるようです。私の推測では、CampaignTrackingReceiverその作業はサービスに委任されますが、逆コンパイルされた jar をチェックアウトして自分で確認できます。これをマニフェストの、他の GA サービスを定義する場所に追加します。

<service android:name="com.google.android.gms.analytics.CampaignTrackingService" />

レシーバーが見つからないという警告引き続き表示される可能性がありますが、Adjust と Google アナリティクスでインストールに起因するものが表示される限り (

于 2015-10-16T12:50:19.663 に答える