簡體   English   中英

如何使用 Google 的 installreferrer 庫測試安裝引薦來源網址?

[英]How to test install referrer with Google's installreferrer library?

有很多示例如何測試“默認”檢測安裝引用的方式,但沒有示例如何測試com.android.installreferrer:installreferrer庫。

像這樣的例子

adb shell am broadcast -a com.android.vending.INSTALL_REFERRER 
                       -n your.package.name/path.to.receiver --es referrer
                       --es referrer "EXTRA_STRING_VALUE"

不起作用,因為我們不知道receiver路徑。 那么如何測試呢?

使用InstallReferrerClient ,似乎沒有在AndroidManifest.xml中注冊任何BroadcastReceiver 該庫只是綁定到系統的安裝引薦服務...

private static final String SERVICE_PACKAGE_NAME = "com.android.vending";
private static final String SERVICE_NAME = "com.google.android.finsky.externalreferrer.GetInstallReferrerService";
private static final String SERVICE_ACTION_NAME = "com.google.android.finsky.BIND_GET_INSTALL_REFERRER_SERVICE";

客戶端在手動安裝時收到推薦人utm_source=google-play&utm_medium=organic 沒有暴露BroadcastReceiver (但InstallReferrerService應該有一個)。

原始Intent Bundle的鍵是: install_referrerreferrer_click_timestamp_secondsinstall_begin_timestamp_seconds如果你想嘗試模擬它 - 但onInstallReferrerSetupFinished()回調將間接傳遞結果。

該文檔還指出:

安裝推薦人信息將在 90 天內可用,除非重新安裝應用程序,否則不會更改。 為避免在您的應用程序中調用不必要的 API,您應該在安裝后的第一次執行期間僅調用一次 API。 您的應用可以通過收聽系統廣播Intent.ACTION_PACKAGE_FIRST_LAUNCH來識別應用的首次執行。


所以這應該是action Intent.ACTION_PACKAGE_FIRST_LAUNCHintent-filter ,它隨后將InstallReferrerClient連接到InstallReferrerService 無法使用adb觸發Intent.ACTION_PACKAGE_FIRST_LAUNCH ,因為它會過濾“受保護的廣播操作字符串”,因此它可能僅在從 Play 商店安裝時觸發。

根據文檔,實現可能看起來像:

AndroidManifest.xml

<receiver
    android:name=".receiver.PackageStatusReceiver"
    android:exported="true">
    <intent-filter>
        <action android:name="android.intent.action.PACKAGE_FIRST_LAUNCH"/>
    </intent-filter>
</receiver>

PackageStatusReceiver.java

public class PackageStatusReceiver extends BroadcastReceiver implements InstallReferrerStateListener {

    protected static final String LOG_TAG = PackageStatusReceiver.class.getSimpleName();

    private InstallReferrerClient referrerClient;

    @Override
    public void onReceive(Context context, Intent intent) {
        if(intent.getAction() != null) {
            if(intent.getAction().equals(Intent.ACTION_PACKAGE_FIRST_LAUNCH)) {
                this.referrerClient = InstallReferrerClient.newBuilder(context).build();
                this.referrerClient.startConnection(this);
            }
        }
    }

    @Override
    public void onInstallReferrerSetupFinished(int responseCode) {
        switch (responseCode) {
            case InstallReferrerClient.InstallReferrerResponse.OK:
                Log.d(LOG_TAG, "InstallReferrer Response.OK");
                try {
                    ReferrerDetails response = referrerClient.getInstallReferrer();
                    String referrer = response.getInstallReferrer();
                    long clickTimestamp = response.getReferrerClickTimestampSeconds();
                    long installTimestamp = response.getInstallBeginTimestampSeconds();
                    Log.d(LOG_TAG, "InstallReferrer " + referrer);
                    referrerClient.endConnection();
                } catch (RemoteException e) {
                    Log.e(LOG_TAG, "" + e.getMessage());
                }
                break;
            case InstallReferrerClient.InstallReferrerResponse.FEATURE_NOT_SUPPORTED:
                Log.w(LOG_TAG, "InstallReferrer Response.FEATURE_NOT_SUPPORTED");
                break;
            case InstallReferrerClient.InstallReferrerResponse.SERVICE_UNAVAILABLE:
                Log.w(LOG_TAG, "InstallReferrer Response.SERVICE_UNAVAILABLE");
                break;
            case InstallReferrerClient.InstallReferrerResponse.SERVICE_DISCONNECTED:
                Log.w(LOG_TAG, "InstallReferrer Response.SERVICE_DISCONNECTED");
                break;
            case InstallReferrerClient.InstallReferrerResponse.DEVELOPER_ERROR:
                Log.w(LOG_TAG, "InstallReferrer Response.DEVELOPER_ERROR");
                break;
        }
    }

    @Override
    public void onInstallReferrerServiceDisconnected() {
        Log.w(LOG_TAG, "InstallReferrer onInstallReferrerServiceDisconnected()");
    }
}

要對此進行測試,您需要指向 Play 商店的引薦來源鏈接,然后通過它們安裝軟件包……否則只會記錄默認引薦來源網址(除了正確實施客戶端時甚至無法觸發意圖之外)。

您可以通過在 Play Market 控制台中設置應用的內部測試版本來測試安裝引薦來源網址。 之后,使用來自 Play Market URL Builder 的修改后的鏈接。

我通過 USB 使用了物理設備。

1將應用程序放在 Play 商店批准

2最重要的一步:建立正確的鏈接, 例如我只使用了最后一個值 Ad Network字段拾取Custom下也很重要,否則它將在測試中工作,但在沒有指定廣告網絡的生產時不會

3將鏈接發送到手機上的電子郵件

4單擊剛剛通過電子郵件發送的鏈接。 它運行Play 商店(不要從 Play 商店安裝)

5需要的內容添加到主要活動中(不要使用過時和過時的文檔)。 使用Android Studio僅從運行按鈕啟動應用程序。 Home將應用程序關閉屏幕並按最近按鈕刪除應用程序滑動

6 Play 商店“安裝”按鈕(現在)應該看起來像“打開” 點擊按鈕。 現在您可以處理response.getInstallReferrer()例如在日志中查看

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM