Intercept INSTALL_REFERRER and then forward on to

2020-03-17 20:09发布

问题:

I have written an install receiver to determine when an app has been installed via the Market. However, I also want to pass the INSTALL_REFERRER broadcast onto other receivers such as the Google Analytics AnalyticsReceiver if it is installed within the app. Importantly, I do NOT know if other receivers are installed as my receiver will be used by other developers within their apps.

Currently, I receive the broadcast and when complete I call:

AnalyticsReceiver receiver = new AnalyticsReceiver();

receiver.onReceive(context, intent);

The issue is the AnalyticsReceiver class may not be present.

So how do I pass on the broadcast if I'm not sure whether the app uses the AnalyticsReceiver?

Or will Android itself make sure each receiver installed gets the broadcast?

Many thanks!

回答1:

This doesn't really answer the question, but the only intended destination for INSTALL_REFERRER is the Google Analytics library, and thus there are zero guarantees about the data contained in the broadcast (or anything about the broadcast for that matter), so you shouldn't rely on it.

On a side note, here are some related S.O. questions:

  • Get Android Google Analytics referrer tag
  • Get referrer after installing app from Android Market


回答2:

Roman's answer is not entirely correct. They don't go into step by step instructions, but Google themselves recommend using your own broadcast receiver if you need to. I do think they added this blurb recently, but not sure when. I'm pretty positive it did not exist when I answered one of the questions he links.

From their guide:

Note: Only one BroadcastReceiver class can be specified per application. Should you need to incorporate two or more BroadcastReceivers from different SDKs, you will need to create your own BroadcastReceiver class that will receive all broadcasts and call the appropriate BroadcastReceivers for each type of Broadcast.

This also seems to answer the question of whether you can blindly re-broadcast, at least according to Google.