【问题标题】:INSTALL_REFERRER not received before application launched在应用程序启动之前未收到 INSTALL_REFERRER
【发布时间】:2015-02-04 12:57:21
【问题描述】:

我想在自己的接收器上捕获 INSTALL_REFERRER 意图。 我实现了接收器

public class InstallReferrerReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
           Log.d("Broadcast", "RECEIVED!");
        }
}

并在清单中添加

<receiver
    android:name=".receiver.InstallReferrerReceiver"
    android:exported="true">
    <intent-filter>
        <action android:name="com.android.vending.INSTALL_REFERRER"/>
    </intent-filter>
</receiver>

当我想测试接收器时,我安装我的应用程序(不启动)并通过 adb 发送广播

am broadcast -a com.android.vending.INSTALL_REFERRER --es "referrer" "utm_medium=partner&utm_campaign=partner_name"

但是看不到任何日志。启动后,它可以正常工作并接收意图。

来自“测试 Google Play 广告系列衡量”

要将 INSTALL_REFERRER Intent 广播到您的应用程序:

  1. 验证您的应用程序当前没有运行。
  2. 打开终端并运行以下命令:...

但在我第一次启动应用程序之前,我的接收器没有收到意图。这是正确的行为吗?如果我使用推荐人参数从市场安装应用程序,当我收到此意图时?

谢谢

【问题讨论】:

    标签: android android-intent broadcastreceiver android-broadcast


    【解决方案1】:

    在 Android 3.1+ 上,应用程序的 BroadcastReceiver(或任何其他组件)在用户至少启动一次应用程序之前不会被触发。在此之前它处于“停止”状态

    is an intended behaviour 并防止一些安全风险。

    【讨论】:

    • 我不敢相信。这不会使“INSTALL_REFERRER”完全没用吗?广播总是在首次启动之前在安装时触发,因此永远无法接收?!
    • 这是什么意思?这个广播的行为是什么? 广播被触发的事实没有收到广播的事实无关。它可能是用户显式启动进程启动后立即收到的粘性广播
    【解决方案2】:

    发送broadcastintent时必须设置标志Intent.FLAG_INCLUDE_STOPPED_PACKAGES

    Bundle extras = new Bundle();
    extras.putString("referrer", referrer);
    Intent intent = new Intent("com.android.vending.INSTALL_REFERRER");
    intent.putExtras(extras);
    intent.setPackage(packageChanged);
    intent.addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES);
    sendBroadcast(intent);
    

    【讨论】:

      【解决方案3】:

      您的 adb 命令不完整。试试这个:

      ./adb shell am broadcast -a com.android.vending.INSTALL_REFERRER -n <your package>/<your package>.receiver.InstallReferrerReceiver --es "referrer" "utm_medium%3Dpartner%26utm_campaign%3Dpartner_name"
      

      注意:referrer 应该是 url 编码的。

      【讨论】:

      • Adb 命令正确,首次应用程序启动后即可使用。平台限制的答案,正如 Drew 所回答的那样 - 应用程序的 BroadcastReceiver(或任何其他组件)在用户至少启动一次应用程序之前不会被触发
      猜你喜欢
      • 2014-10-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-09
      • 1970-01-01
      • 2018-12-29
      相关资源
      最近更新 更多