我正在尝试注册一个广播接收器,它捕获Android从市场安装应用程序后启动的"com.android.vending.INSTALL_REFERRER"意图.
我在此处详细了解:http://code.google.com/mobile/analytics/docs/android/#referrals
但是,我无法使用Google Analytics,因此我创建了自己的解决方案.我在清单文件中添加了以下内容:
<receiver android:name="com.test.Receiver" android:exported="true">
<intent-filter>
<action android:name="com.android.vending.INSTALL_REFERRER" />
</intent-filter>
</receiver>
Run Code Online (Sandbox Code Playgroud)
并创建了一个基本的BroadcastReceiver类:
public class Receiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Bundle extras = intent.getExtras();
String referrerString = extras.getString("referrer");
Log.w("TEST", "Referrer is: " + referrerString);
}
}
Run Code Online (Sandbox Code Playgroud)
然而,当安装应用程序时,接收器似乎没有捕获Intent(如果Intent甚至广播?)并且我没有记录输出.
我在某个地方出错了还是市场在安装应用程序时不再启动这些Intent?
有没有办法将自定义参数传递给Android市场(或任何其他方式),以便我的应用程序在安装后接收参数(并且第一次运行).
让我解释.
- 使用argument1 ="Hello world1"(每次自定义参数)启动一个intent
- 从Android市场安装应用程序.
- 第一次打开应用程序.
- 应用程序显示消息"Hello world1"
任何情况都会这样做,而不只是意图到Android市场.
大多数情况下,应用程序将通过带有绑定http架构的条形码扫描程序进行安装.因此,浏览器的解决方法也是可行的,HTML5客户端存储,(存储到浏览器的参数,并在我的应用第一次运行时从那里获取)
更新
解决方案是为浏览器创建cookie或其他内容,然后从我安装的应用程序中访问它.那可能吗?如果是这样,你能提供一些相关信息吗?浏览器可以与应用共享数据吗?
我有一种情况,我希望将一些数据从移动网站传递到原生Android应用程序.一个复杂的问题是,在正常情况下,加载移动网站时可能不会安装原生Android应用程序.
这是一个例子:
我是ExampleApp的用户,我希望与您共享来自ExampleApp的特定数据,而您从未安装过ExampleApp.
我发送了一封电子邮件,其中包含指向移动网页的链接,该网页知道您打开链接时要查看的数据.但是,由于数据仅在本机应用程序中可用,而不是移动网络,因此您将进入一个页面,要求您转到Android Market并安装ExampleApp.
您安装了ExampleApp,理想情况下,您将直接访问我与您共享的数据.
最大的问题是查看移动网页和安装ExampleApp之间的脱节.
我已经考虑了几个解决方案,但都没有成功(说,我可能只是错误地实现它们):
在这两种情况下,似乎WebView和浏览器都是相互远离的沙箱,因此您无法获得两者之间的cookies/localStorage.
有没有其他方法可以"留下一个crumbtrail"或设置一条消息,以后安装的应用程序可以从浏览器访问?
编辑:鉴于一些回复,我应该提到我只希望你点击链接一次,不必点击一次,安装应用程序,然后再次点击打开应用程序到正确的地方.
我已经编写了一个安装接收器来确定何时通过Market安装了应用程序.但是,AnalyticsReceiver如果安装在应用程序中,我还想将INSTALL_REFERRER广播传递到其他接收方(如Google Analytics).重要的是,我不知道是否安装了其他接收器,因为我的接收器将在其应用程序中被其他开发人员使用.
目前,我收到广播,完成后我打电话给:
AnalyticsReceiver receiver = new AnalyticsReceiver();
receiver.onReceive(context, intent);
问题是该AnalyticsReceiver课程可能不存在.
那么如果我不确定该应用程序是否使用了该AnalyticsReceiver怎么办?
或者Android本身会确保安装的每个接收器都能获得广播吗?
非常感谢!
我想实现安装引用跟踪并希望引用参数和存储在后端数据库中我已经看到许多例子或问题,如获取Android Google Analytics引用标记或Android Google Analytics广告系列跟踪未显示但没有获得我生成链接的方式去尝试代码
package SimpleDemo.ReferralTrack;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.util.HashMap;
import java.util.Map;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
public class ReferralReceiver extends BroadcastReceiver
{
@Override
public void onReceive(Context context, Intent intent)
{
// Workaround for Android security issue: http://code.google.com/p/android/issues/detail?id=16006
try
{
final Bundle extras = intent.getExtras();
if (extras != null) {
extras.containsKey(null);
}
}
catch (final Exception e) {
return;
}
Map<String, String> referralParams = new HashMap<String, String>();
// …Run Code Online (Sandbox Code Playgroud)