com.android.vending.INSTALL_referer isn';行不通

com.android.vending.INSTALL_referer isn';行不通,android,google-play,broadcastreceiver,install-referrer,Android,Google Play,Broadcastreceiver,Install Referrer,我最初问,关于在安装时通过市场链接将参数传递到我的应用程序 每个人似乎都在说用com.android.vending.INSTALL\u referer的intent过滤器创建一个BroadcastListener。所有关于它的文档似乎都暗示这是Google Analytics的一个功能(文档在v1中,但我现在只能下载v2 SDK…所以这就是我正在使用的)。我无法让这些链接传递数据。我有我的全部清单和广播听众。我已经包括谷歌分析,以防这是一个要求 生成的市场链接 链接到 链接 这根本不起作

我最初问,关于在安装时通过市场链接将参数传递到我的应用程序

每个人似乎都在说用
com.android.vending.INSTALL\u referer
intent过滤器创建一个
BroadcastListener
。所有关于它的文档似乎都暗示这是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>
所以xbakesx说,如果他的接收器扩展到
com.google.analytics.tracking.android.AnalyticsReceiver
,它似乎可以工作

我认为关键是意图对…AnalyticsReceiver具有权限,因此没有其他不扩展它的类可以获取意图。如果你看他们的测试广播,它确实是针对那个类的

如果您更改该测试广播,以便您的类替换
com.google.analytics.tracking.android.AnalyticsReceiver
,您就可以接收它。最大的问题是他们似乎在beta 4或beta 5中锁定了这个类。如果有人链接到beta 3,我们可以对此进行测试,或者xbakex是否可以确认是否可以使用新的罐来进行测试

更新:

砰!所以权限不是问题。我创建了一个测试项目,并使用PlayStores alpha测试来测试推荐人链接,您可以在此处构建该链接:


最酷的是你根本不需要任何GA罐子!在这里签出我的测试项目:该项目还向您展示了如何解析链接以获取所需的所有信息。

在多次尝试失败后,我终于可以在logcat中看到传递的引用参数

一路上,我发现了一些事情,我不太确定我做的是正确的还是错误的,但出于某些原因,这些都奏效了。如果有人仍然坚持,他们可以从我的经验中得到一些启示

A.创建一个自定义广播接收器,您可以在其中准备意图。(只有在您成功地从ADB启动了Install_Referer意图进行测试后,才会执行此操作)。同样要确保,若您需要将推荐人信息发布回服务器,那个么它必须位于单独的线程上

    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> 请注意,此命令的重要部分是
com.example.myapp/.CustomBR
--es“token”“sample_token”
,其中
--es
是随意图一起发送的附加参数。
--es
后面的第一个引号是查询字符串/参数名称,第二个引号是值。类似地,如果您必须添加多个值,请按照上面的示例所示进行复制

最后,让我一直感到沮丧的最重要的部分是安装在设备上的应用程序本身。你的应用程序应该安装在设备上,但根本不运行。为此,您必须“强制关闭”应用程序,然后启动adb shell命令以启动install\u Referer。此时,您应该看到logcat亮起,显示所需的数据

F.您可能还希望卸载google play store应用程序上的更新,并将其恢复为出厂设置。google play的版本有时(未确认)会确定通过install_Referer传递给应用程序的数据,或者是否调用了Referer

希望这对其他人有所帮助。

无论是否使用谷歌分析,在应用程序的AndroidManifest.xml中使用意向过滤器注册一个是正确的应用程序安装推荐解决方案

<receiver
    android:exported="true"
    android:name="com.yourcompany.package.receivers.InstallReceiver">
    <intent-filter>
        <action android:name="com.android.vending.INSTALL_REFERRER" />
    </intent-filter>
</receiver>
测试注意事项:

  • 在测试这个流时,检查上面的命令是否产生了一个输出非常重要,在这个输出中,意图被记录到了您的控制台,并且仍然附加了完整的referer信息。逃逸者很容易出错,并悄悄地放弃推荐人
  • 请记住,APK必须已由Google Play(商店)安装到您正在测试的设备上(您不能侧向加载)。因此,您通常需要使用Google Play中的Alpha分发渠道来测试这一点
  • 需要注意的是,如果设备>=蜂巢MR1,则在首次启动应用程序后,而不是在安装应用程序后,会广播安装参考者的意图
  • 每次需要测试推荐人流量时,您都需要重新安装应用程序
  • 从Android Google Play应用程序安装应用程序时,会跟踪安装推荐,但不会跟踪商店的网络版本

如果您还没有使用Google Analytics,那么对于任何遇到同样问题的人,我都有一个解决方案,尽管不是一个好的解决方案。我改为
InstallReceiver
扩展
com.google.analytics.tracking.android.AnalyticsReceiver
,一切都神奇地工作了。老实说,我无法解释。我甚至没有把com.google.analytics.tracking.android.AnalyticsReceiver看作是AnalyticsJar(beta5)的一部分。你使用的是什么版本?我不完全确定我使用的是哪个版本,因为像一个真正的专业人士一样,我扔掉了所有的文档。。。很明显,在Beta 3之后,您不能扩展
AnalyticsReceiver
。我可以更改测试广播,但我不完全确定如何更改系统所做的广播,使其不指定接收它的目标包/类。因此,除了使用beta 3和从不升级之外,我不知道如何让它以我们w
adb shell am broadcast -a com.android.vending.INSTALL_REFERRER -n com.example.myapp/.CustomBR --es  "token" "sample_token" --es  "source" "banner"
<receiver
    android:exported="true"
    android:name="com.yourcompany.package.receivers.InstallReceiver">
    <intent-filter>
        <action android:name="com.android.vending.INSTALL_REFERRER" />
    </intent-filter>
</receiver>
 <service android:name="com.google.android.gms.analytics.CampaignTrackingService" />
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\""