如何使用 Google 的 installreferrer 库测试安装 referrer?
How to test install referrer with Google's installreferrer library?
有很多示例如何测试 "default" 检测安装引荐来源网址的方法,但没有示例如何测试 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_referrer
、referrer_click_timestamp_seconds
和 install_begin_timestamp_seconds
如果您想尝试模拟它 - 但是 onInstallReferrerSetupFinished()
回调将间接传递结果。
文档还指出:
The install referrer information will be available for 90 days and won't change unless the application is reinstalled. To avoid unnecessary API calls in your app, you should invoke the API only once during the first execution after install. Your app can listen to the system broadcast Intent.ACTION_PACKAGE_FIRST_LAUNCH
to identify the app's first execution.
所以这应该是 intent-filter
for action
Intent.ACTION_PACKAGE_FIRST_LAUNCH
,随后将 InstallReferrerClient
连接到 InstallReferrerService
。不能用 adb
触发 Intent.ACTION_PACKAGE_FIRST_LAUNCH
,因为它会过滤 "protected broadcast action string",因此它可能只有在从 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 的修改后的 link。
我通过 USB 使用物理设备。
0 批准将应用程序放到 Play 商店
1 最重要的一步:在 e.g. I used only last value
上构建正确的 link
2 将 link 发送到 phone
上的电子邮件
3 将 Martin Zeitler 写的内容添加到主 activity。使用 Android Studio 应用启动。按 Home 关闭应用程序屏幕,然后按 Recent 按钮删除应用程序滑动
4 点击刚刚发来的link。它运行 Play 商店(不要从 Play 商店安装)
5 Play 商店“安装”按钮(现在)应显示为“打开”
点击按钮。现在你可以处理 response.getInstallReferrer() 例如在日志中查看
有很多示例如何测试 "default" 检测安装引荐来源网址的方法,但没有示例如何测试 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_referrer
、referrer_click_timestamp_seconds
和 install_begin_timestamp_seconds
如果您想尝试模拟它 - 但是 onInstallReferrerSetupFinished()
回调将间接传递结果。
文档还指出:
The install referrer information will be available for 90 days and won't change unless the application is reinstalled. To avoid unnecessary API calls in your app, you should invoke the API only once during the first execution after install. Your app can listen to the system broadcast
Intent.ACTION_PACKAGE_FIRST_LAUNCH
to identify the app's first execution.
所以这应该是 intent-filter
for action
Intent.ACTION_PACKAGE_FIRST_LAUNCH
,随后将 InstallReferrerClient
连接到 InstallReferrerService
。不能用 adb
触发 Intent.ACTION_PACKAGE_FIRST_LAUNCH
,因为它会过滤 "protected broadcast action string",因此它可能只有在从 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 的修改后的 link。
我通过 USB 使用物理设备。
0 批准将应用程序放到 Play 商店
1 最重要的一步:在 e.g. I used only last value
上构建正确的 link2 将 link 发送到 phone
上的电子邮件3 将 Martin Zeitler 写的内容添加到主 activity。使用 Android Studio 应用启动。按 Home 关闭应用程序屏幕,然后按 Recent 按钮删除应用程序滑动
4 点击刚刚发来的link。它运行 Play 商店(不要从 Play 商店安装)
5 Play 商店“安装”按钮(现在)应显示为“打开” 点击按钮。现在你可以处理 response.getInstallReferrer() 例如在日志中查看