我想要从监听Play商店的INSTALL_REFERRER意图,转而使用新的Google Play安装引荐库。
我正在努力寻找一种测试这个新库的方法,而不必先将我的应用程序添加到Play商店。当通过BroadcastReceiver监听INSTALL_REFERRER意图时,我可以通过Activity Manager手动发送广播来模拟行为并进行测试。也就是说,我可以按照Google提供的步骤进行测试。
是否存在一种无需将我的应用程序首先放入Play商店即可测试此新库的方法?
我想要从监听Play商店的INSTALL_REFERRER意图,转而使用新的Google Play安装引荐库。
我正在努力寻找一种测试这个新库的方法,而不必先将我的应用程序添加到Play商店。当通过BroadcastReceiver监听INSTALL_REFERRER意图时,我可以通过Activity Manager手动发送广播来模拟行为并进行测试。也就是说,我可以按照Google提供的步骤进行测试。
是否存在一种无需将我的应用程序首先放入Play商店即可测试此新库的方法?
有一个旧技巧可以测试这个。
步骤:
使用广告系列链接在设备上启动Google Play,例如:https://play.google.com/store/apps/details?id=com.test.test_project&referrer=utm_source%3Dtest_source%26utm_medium%3Dtest_medium%26utm_term%3Dtest-term%26utm_content%3Dtest_content%26utm_campaign%3Dtest_name (您可以使用Google Play生成器:https://developers.google.com/analytics/devguides/collection/android/v3/campaigns#google-play-url-builder)
不要点击安装按钮
使用adb安装您的测试构建。adb install -r app-debug.apk
现在Google Play将返回您的测试广告系列。
android:testOnly
标志的APK,无法在这方面进行测试。只有使用gradle的assembleDebug
任务然后手动使用adb安装才有效(至少对我而言)。 - Shlomi Katriel这是我的测试总结:
我能够使用模拟器测试Play安装引荐库。卸载应用程序并再次运行将启动连接,并在onInstallReferrerSetupFinished
中给出预期的responseCode
。
InstallReferrerResponse.FEATURE_NOT_SUPPORTED
作为responseCode
。 - MariliainstallReferrerUrl
参数,例如utm_source
或utm_medium
? - Mohanakrrishnautm_source=google-play&utm_medium=organic
。 - Marilia第一步
第二步 点击上面的链接。打开Play商店 (不要从Play商店安装)
第三步 从Android studio中安装。 您将得到结果。 现在,如果您检查另一个链接,则需要按照上述方式遵循相同的步骤,因为,
注意: 注意:安装引荐信息将在90天内提供,并且除非重新安装应用程序,否则不会更改。为避免在应用程序中进行不必要的API调用,您应该仅在首次执行后调用API一次。
注意: 我的应用程序目前是Alpha版本(在Play商店中)
请注意-以下测试使用已弃用的广播接收器,而不是新的 Play Install Referrer API。(感谢Peter Keefe指出)。
确保应用程序未运行,并在终端/CMD中运行此shell代码(同时设备连接到adb)以触发安装意图:
echo 'am broadcast \
-a com.android.vending.INSTALL_REFERRER \
-n "your.package.name/path.to.receiver" \
--es "referrer" \
"utm_source=test_source&utm_medium=test_medium&utm_term=test_term&utm_content=test_content&utm_campaign=test_name"; \
exit' | ./adb shell
将包名和接收器路径替换为:
your.package.name/path.to.receiver
此外,不要忘记替换UTM URL参数以跟踪不同的安装来源:
utm_source=test_source&utm_medium=test_medium&utm_term=test_term&utm_content=test_content&utm_campaign=test_name
package com.cat.red.rsamazingapp;
import android.os.RemoteException;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;
import com.android.installreferrer.api.InstallReferrerClient;
import com.android.installreferrer.api.InstallReferrerStateListener;
import com.android.installreferrer.api.ReferrerDetails;
import java.text.SimpleDateFormat;
import java.util.GregorianCalendar;
public class MainActivity extends AppCompatActivity implements InstallReferrerStateListener {
private static final String TAG = "RSD";
InstallReferrerClient mReferrerClient;
TextView txtBody;
StringBuilder stringBuilder;
private int attemps = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
txtBody = (TextView) this.findViewById(R.id.txt_body);
stringBuilder = new StringBuilder();
stringBuilder.append("\nonCreate");
mReferrerClient = InstallReferrerClient.newBuilder(this).build();
stringBuilder.append("\n1. onCreate.isReady == " + mReferrerClient.isReady());
mReferrerClient.startConnection(this);
stringBuilder.append("\nstartConnection");
stringBuilder.append("\n2. onCreate.isReady == " + mReferrerClient.isReady());
}
@Override
public void onInstallReferrerSetupFinished(int responseCode) {
stringBuilder.append("\nonInstallReferrerSetupFinished");
switch (responseCode) {
case InstallReferrerClient.InstallReferrerResponse.OK:
// Connection established
stringBuilder.append("\nonInstallReferrerSetupFinished. InstallReferrer conneceted. Success");
stringBuilder.append("\nisReady == " + mReferrerClient.isReady());
try {
ReferrerDetails installReferrerDetails = mReferrerClient.getInstallReferrer();
if (installReferrerDetails == null) {
stringBuilder.append("\ninstallReferrerDetails == NULL");
}
if (installReferrerDetails != null) {
stringBuilder.append("\ngetInstallReferrer = " + installReferrerDetails.getInstallReferrer());
stringBuilder.append("\ngetInstallBeginTimestampSeconds = " + installReferrerDetails.getInstallBeginTimestampSeconds());
stringBuilder.append("\ngetReferrerClickTimestampSeconds = " + installReferrerDetails.getReferrerClickTimestampSeconds());
}
} catch (RemoteException e) {
stringBuilder.append("\nonInstallReferrerSetupFinished. exception: " + e.getMessage());
txtBody.setText(stringBuilder.toString());
e.printStackTrace();
}
break;
case InstallReferrerClient.InstallReferrerResponse.FEATURE_NOT_SUPPORTED:
stringBuilder.append("\nonInstallReferrerSetupFinished. Install Referrer API not supported by the installed Play Store app.");
stringBuilder.append("\nisReady == " + mReferrerClient.isReady());
break;
case InstallReferrerClient.InstallReferrerResponse.SERVICE_UNAVAILABLE:
// Connection could not be established
stringBuilder.append("\nonInstallReferrerSetupFinished. Could not initiate connection to the Install Referrer service.");
stringBuilder.append("\nisReady == " + mReferrerClient.isReady());
break;
case InstallReferrerClient.InstallReferrerResponse.SERVICE_DISCONNECTED:
stringBuilder.append("\nonInstallReferrerSetupFinished. Play Store service is not connected now - potentially transient state");
stringBuilder.append("\nisReady == " + mReferrerClient.isReady());
break;
case InstallReferrerClient.InstallReferrerResponse.DEVELOPER_ERROR:
stringBuilder.append("\nonInstallReferrerSetupFinished. General errors caused by incorrect usage.");
stringBuilder.append("\nisReady == " + mReferrerClient.isReady());
break;
default:
stringBuilder.append("\nonInstallReferrerSetupFinished. responseCode not found. code = " + responseCode);
stringBuilder.append("\nisReady == " + mReferrerClient.isReady());
}
stringBuilder.append("\nisReady == " + mReferrerClient.isReady());
mReferrerClient.endConnection();
stringBuilder.append("\nendConnection");
stringBuilder.append("\nisReady == " + mReferrerClient.isReady());
txtBody.setText(stringBuilder.toString());
}
@Override
public void onInstallReferrerServiceDisconnected() {
// Try to restart the connection on the next request to
// Google Play by calling the startConnection() method.
stringBuilder.append("\nonInstallReferrerServiceDisconnected. attemptCount = " + attemps);
stringBuilder.append("\nisReady == " + mReferrerClient.isReady());
if (attemps < 3) {
attemps++;
stringBuilder.append("\nonInstallReferrerServiceDisconnected. RE-startConnection");
mReferrerClient.startConnection(this);
} else {
stringBuilder.append("\nonInstallReferrerServiceDisconnected. endConnection");
stringBuilder.append("\nisReady == " + mReferrerClient.isReady());
mReferrerClient.endConnection();
stringBuilder.append("\nendConnection");
stringBuilder.append("\nisReady == " + mReferrerClient.isReady());
}
txtBody.setText(stringBuilder.toString());
}
@Override
protected void onResume() {
super.onResume();
stringBuilder.append("\nonResume. isReady == "+ mReferrerClient.isReady());
}
public static String format(GregorianCalendar calendar){
SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
fmt.setCalendar(calendar);
String dateFormatted = fmt.format(calendar.getTime());
return dateFormatted;
}
}