当前位置: 首页 > 知识库问答 >
问题:

我们能在一个Android应用程序中INSTALL_REFERRER两次吗?

越伟泽
2023-03-14

我正在开发一个Android应用程序,我正在使用INSTALL\u referer了解我的应用程序的安装来源。为此,我使用了firstGoogle AnalyticsInstall\u referer intent filter和一个我自己定制的过滤器。

是否有可能有两个广播接收器条目带有意图过滤器com.Android出售。在Android中安装\u referer

谷歌分析接收器

<receiver
    android:name="com.google.analytics.tracking.android.CampaignTrackingReceiver"
    android:exported="true" >
    <intent-filter>
        <action android:name="com.android.vending.INSTALL_REFERRER" />
    </intent-filter>
</receiver>

我的自定义广播接收器。

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

共有2个答案

马清野
2023-03-14

我一直在一个类似的应用程序中工作,在做了一些研究后,我发现我们可以删除谷歌分析接收器(因为它什么也不做),并使用您自己的自定义接收器。当然,你仍然可以让你的应用程序通过实现以下代码向谷歌分析发送数据:

public enum TrackerName {
    APP_TRACKER, // Tracker used only in this app.
    GLOBAL_TRACKER, // Tracker used by all the apps from a company. eg: roll-up tracking.
    ECOMMERCE_TRACKER, // Tracker used by all ecommerce transactions from a company.
}

HashMap<TrackerName, Tracker> mTrackers = new HashMap<TrackerName, Tracker>();

synchronized Tracker getTracker(TrackerName trackerId) {
    if (!mTrackers.containsKey(trackerId)) {
        GoogleAnalytics analytics = GoogleAnalytics.getInstance(this);
        Tracker t = (trackerId == TrackerName.APP_TRACKER) ? analytics.newTracker("UA-xxxxxxxx-1")
                : (trackerId == TrackerName.GLOBAL_TRACKER) ? analytics.newTracker(R.xml.global_tracker)
                : analytics.newTracker("UA-xxxxxxxx-1");
        mTrackers.put(trackerId, t);
    } return mTrackers.get(trackerId);
}

// Get tracker.
Tracker t = getTracker(TrackerName.APP_TRACKER);

// Set screen name.
t.setScreenName("some string");

// Send a screen view.
t.send(new HitBuilders.AppViewBuilder().build());

编辑:

下面的代码显示了我如何在AndroidManifest中声明广播接收器。xml:

<!-- Used for Google Play Store Campaign Measurement-->;
<service android:name="com.google.android.gms.analytics.CampaignTrackingService" />
<receiver android:name=".app.service.CustomReceiver"
    android:exported="true">
    <intent-filter>
       <action android:name="com.android.vending.INSTALL_REFERRER" />
    </intent-filter>
</receiver>
甘骞尧
2023-03-14

不,我们不能有两个安装参考广播接收器。为此,我创建了自己的自定义广播接收器,以实现谷歌分析源跟踪和我自己的东西。

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

参考捕捉器中广播接收器

public class ReferrerCatcher extends BroadcastReceiver {
    public static final String TAG = InstallReceiver.class.getCanonicalName();

    @Override
    public void onReceive(Context context, Intent intent) {

        // Google Analytics
        new CampaignTrackingReceiver().onReceive(context, intent);

        Log.d(TAG, intent.getExtras().getString("referrer");
        // my stuff here 
    }
}
 类似资料:
  • 可能是Tomcat每次停止都要删除/conf/catalina/localhost文件夹下的website.xml文件。 localhost文件夹下的website.xml文件如下所示

  • 一旦我们在android 10后台收到FCM推送通知消息,启动活动就受到限制。当我们在另一个应用程序中时,需要像WhatsApp和Skype通知来电这样的解决方案。 任何帮助都将不胜感激。 下面是前台服务和时间敏感通知的代码。 startForeground(1234,getNotification(IncomingCallContent));

  • null 这是我第一次尝试将Firebase集成到我的一个项目中,因此一些关于实现这项任务的指导将是非常有用的。 谢了!

  • 我是RxJava新手,目前正在使用RxJava版本1。我的用例就像我必须进行一次rest API调用(使用rest模板)。因此,使用调度器是更好的主意吗。在这种情况下,每次都可以使用computation()或任何调度器。 我的课程是 SampleController。Java语言 服务Java语言 在这里,我使用Schedulers来启动新线程。但我再次使用延迟结果进行即时响应,Spring将把

  • 问题内容: 我有一个使用此函数运行线程的代码示例。我们为什么以及何时需要使用它? 编辑 怎么样来使用类,什么是和? 问题答案: 当您要从非UI线程更新UI时必须使用。例如-如果您想从后台线程更新UI。您也可以将其用于同一件事。 从文档- 在UI线程上运行指定的操作。如果当前线程是UI线程,则立即执行该操作。如果当前线程不是UI线程,则将操作发布到UI线程的事件队列。 句法 - 更新- 如果您要执行

  • 问题内容: 我可以在一个应用程序中包含多个web.xml文件吗?并且两个应用程序可以具有父子关系,以便有两个web.xml吗? 问题答案: 对于Servlet 3.0以下,您不能。 如果您使用的是3.0,则有可能。 在JSR 315:Java Servlet 3.0规范中,引入了 web-fragment.xml 来实现库jar的可插入性,这些库jar打包在 WEB-INF / lib下 。web