我最初问过this question,关于在安装时通过市场链接将参数传递到我的应用中。
每个人似乎都在说BroadcastListener
intent-filter
行为com.android.vending.INSTALL_REFERRER
。关于这一点的所有文档似乎暗示这是Google Analytics的功能(文档在v1中,但我现在只能下载v2 SDK ...这就是我正在使用的内容)。我无法通过这些链接传递数据。我有我的完整清单和我的广播听众。我已将谷歌分析包括在内,以防万一。
根本不起作用。我的广播监听器永远不会被调用,日志中不会打印出任何内容。救命啊!
的AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.robotsidekick.webbrowser"
android:versionCode="4"
android:versionName="4.0">
<uses-sdk android:minSdkVersion="17"/>
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<application
android:label="@string/app_name"
android:icon="@drawable/ic_launcher">
<activity
android:name="WebBrowser"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
<receiver
android:exported="true"
android:name="com.robotsidekick.webbrowser.InstallReceiver">
<intent-filter>
<action android:name="com.android.vending.INSTALL_REFERRER" />
</intent-filter>
</receiver>
</application>
</manifest>
广播听众
public class InstallReceiver extends BroadcastReceiver
{
private static final String TAG = "InstallReceiver";
public void onReceive(Context context, Intent intent)
{
Log.e(TAG, "Context: " + context);
Bundle extras = intent.getExtras();
if (extras != null)
{
Log.e(TAG, "Extras:");
for (String keys : extras.keySet())
{
Log.e(TAG, keys + " -> " + extras.get(keys));
}
}
else
{
Log.e(TAG, "Extras are null");
}
}
}
答案 0 :(得分:4)
所以xbakesx说,如果他的接收器扩展com.google.analytics.tracking.android.AnalyticsReceiver
,它似乎有效。 击>
我认为关键是意图具有...... AnalyticsReceiver的权限,因此没有其他没有扩展它的类可以获取意图。如果您查看他们的测试广播https://developers.google.com/analytics/solutions/testing-play-campaigns,它确实看起来特定于该课程。 击>
如果您更改了该测试广播,以便您的班级替换com.google.analytics.tracking.android.AnalyticsReceiver
,那么您可以接收它。最大的问题是他们似乎已经在测试版4或5中锁定了这个类。如果有人有链接到测试版3,我们可以测试一下,或者如果xbakex可以确认玩新的罐子会摇滚!
更新
BAM!因此权限不是问题。我创建了一个测试项目,并使用PlayStores alpha测试来测试引用链接,您可以在此处构建:https://developers.google.com/analytics/devguides/collection/android/v2/campaigns。
很酷的是你根本不需要任何GA罐子!在这里查看我的测试项目:https://github.com/twotoasters/AnalyticsTest/该项目还向您展示如何解析链接以获取所需的所有信息。
答案 1 :(得分:4)
经过多次尝试失败后,我终于可以在logcat中看到传递的引用参数。
一路上,我想出了一些事情,我不太确定我是在做这个仪式还是错误,但由于某些原因,这些都奏效了。如果有人仍然坚持,他们可以从我的学习中得到一些指示。
一个。创建一个自定义的BroadcastReceiver,您可以在其中准备好意图。 (只有在您成功从ADB触发Install_referrer意图进行测试后,才会执行此操作)。还要确保,如果您需要将引用者信息回发到服务器,则必须在单独的线程上。
public class CustomBR extends BroadcastReceiver {
private static final String D_TAG = "BR";
@Override
public void onReceive(Context context, Intent intent) {
Log.d(D_TAG, "CustomReceiver onReceive (context, intent)");
try {
String referrer = intent.getStringExtra("referrer");
// pass the referrer string to another singleton class to post it to server
HandleServerComm.getInstance().postData(referrer);
} catch (Exception e) {
e.printStackTrace();
}
}
}
B中。更新androidmanifest.xml文件以反映您创建的自定义接收器
<receiver android:exported="true" android:name="com.example.myapp.CustomBR" android:enabled="true"> <intent-filter> <action android:name="com.android.vending.INSTALL_REFERRER" /> </intent-filter> </receiver>
℃。确保正确安装了adb以在本地环境中测试它。您还需要一个通过USB连接的设备,并启用远程调试。
d。运行adb shell命令在设备上远程广播install_referrer并传递参数。
命令是
adb shell am broadcast -a com.android.vending.INSTALL_REFERRER -n com.example.myapp/.CustomBR --es "token" "sample_token" --es "source" "banner"
请注意,此命令的重要部分是com.example.myapp/.CustomBR
和--es "token" "sample_token"
,其中--es
是与意图一起发送的其他参数。 --es
之后的第一个引号是查询字符串/参数名称,第二个引号是值。同样,如果您必须添加多个值,请复制它,如上例所示。
电子。最后,最重要的部分让我一直感到沮丧 - 设备本身安装的应用程序。您的应用应该安装在设备上但根本不运行。要做到这一点,你必须&#34;强制关闭&#34;应用程序然后触发adb shell命令以启动install_referrer。那时候,你应该看到logcat点亮了所需的数据。
F。您可能还想在Google Play商店应用上卸载更新并将其恢复为出厂设置。有时(未确认)谷歌播放的版本决定了通过install_referrer传递给应用程序的数据,或者是否完全调用了引用者。
希望这有助于某人。
答案 2 :(得分:2)
使用意图过滤器在应用的AndroidManifest.xml中注册BroadcastReceiver,无论是否使用Google Analytics,都是应用安装推介的正确解决方案。
<receiver
android:exported="true"
android:name="com.yourcompany.package.receivers.InstallReceiver">
<intent-filter>
<action android:name="com.android.vending.INSTALL_REFERRER" />
</intent-filter>
</receiver>
如果您已经在使用Google Analytics,则只需为您的接收器和以下服务指定android:name =“com.google.android.gms.analytics.CampaignTrackingReceiver”。两者都包含在Google Play services client library中,因此没有任何Java代码可以编写。如果您还没有,则还必须通过initial setup instructions获取适用于您应用的Google Analytics。
<service android:name="com.google.android.gms.analytics.CampaignTrackingService" />
如果您不使用Google Analytics,则需要在java代码中定义自己的BroadcastReceiver。在实施onReceive时,您会希望它检查收到的意图上的额外内容。
Google Play(商店)收到的网址中的referrer参数是传递给Android应用程序的唯一参数,因此在其中编码一些参数非常常见。对于Google Analytics,这意味着行业标准的utm_ *参数,但您可以使用其他参数。这是我通常用于打开Google Play以安装和测试完整流程的测试adb命令。
adb shell "am start -a android.intent.action.VIEW -d \"https://play.google.com/store/apps/details?id=com.somecompany.package&referrer=utm_source%253Dtest_campaign_source%2526utm_medium%253Dtest_campaign_medium%2526utm_term%253Dtest_campaign_term%2526utm_content%253Dtest_campaign_content%2526utm_campaign%253Dtest_campaign_name\""
测试说明: