android - SecurityException : Parcel. readException 来自谷歌分析代码

标签 android android-intent google-analytics google-play-services

我们的应用程序从我们的崩溃报告软件中收到了很多不同的 SecurityException 报告。这是崩溃的堆栈跟踪:

java.lang.SecurityException: Unable to find app for caller android.app.ApplicationThreadProxy@43fda840 (pid=17925) when registering receiver android.content.IIntentReceiver$Stub$Proxy@43fd9458
     at android.os.Parcel.readException(Parcel.java:1431)
     at android.os.Parcel.readException(Parcel.java:1385)
     at android.app.ActivityManagerProxy.registerReceiver(ActivityManagerNative.java:2466)
     at android.app.ContextImpl.registerReceiverInternal(ContextImpl.java:1717)
     at android.app.ContextImpl.registerReceiver(ContextImpl.java:1685)
     at android.app.ContextImpl.registerReceiver(ContextImpl.java:1679)
     at android.content.ContextWrapper.registerReceiver(ContextWrapper.java:453)
     at com.google.android.gms.analytics.q.v(Unknown Source)
     at com.google.android.gms.analytics.r.cF(Unknown Source)
     at com.google.android.gms.analytics.r.cH(Unknown Source)
     at com.google.android.gms.analytics.s.cO(Unknown Source)
     at com.google.android.gms.analytics.s.cP(Unknown Source)
     at com.google.android.gms.analytics.s.d(Unknown Source)
     at com.google.android.gms.analytics.s$e.run(Unknown Source)
     at java.util.Timer$TimerImpl.run(Timer.java:284)

堆栈跟踪总是相同的,除了似乎唯一改变的是 android.app.ApplicationThreadProxy@41da9030 (pid=9103)android.content.IIntentReceiver$Stub $Proxy@41ee0688 上面有不同的数字(这是线程 id 还是什么?)

现在这个异常似乎与 Intent 大小有关(请参阅以下链接)

这是唯一的原因吗?如果是这样,当我的代码似乎仅来自 google analytics 代码时,它是如何导致这种情况的?我使用 GA 错了吗?除了制作追踪器之外,我似乎没有做太多事情。

编辑

这就是我创建跟踪器的方式。我的应用程序对象中有一个 singleton 跟踪器

Tracker appTracker;
synchronized Tracker getTracker()
{
    GoogleAnalytics analytics = GoogleAnalytics.getInstance(this);
    if (appTracker == null)
    {
        appTracker = analytics.newTracker([some key]);
        appTracker.enableAdvertisingIdCollection(true);
        analytics.getLogger().setLogLevel(Logger.LogLevel.VERBOSE);
    }


    return appTracker;
}

然后在我的 BaseActivity 我有以下代码:

public void initAnalytics() {

    if (Global.TRACKING_ENABLED) {
        mTracker = app.getTracker();
    }
}

public void sendCommerceData(Map<String, String> params)
{
    mTracker.send(params);
}

public void sendTrackViewData(String _path)
{
    mTracker.setScreenName(_path);
    mTracker.send(new HitBuilders.AppViewBuilder().build());
}

public void sendEventData(String category, String action, String label, long value)
{
    mTracker.send(new HitBuilders.EventBuilder()
            .setCategory(category)
            .setAction(action)
            .setLabel(label)
            .setValue(value).build());
}

编辑 2

好的,这里是 sendCommerceData 的使用:

 sendCommerceData(new HitBuilders.ItemBuilder()
                                        .setTransactionId(Integer.toString(order.orderId))
                                        .setName(orderItem.tradeTitle)
                                        .setSku(orderItem.tradeId)
                                        .setCategory(orderItem.categoryFullname)
                                        .setPrice(price)
                                        .setQuantity(orderItem.quantity)
                                        .build());

u_u

最佳答案

这是一个 SecurityException 意味着由于我们自己的功能而没有发生这种情况。 (大部分系统代码都会抛出这些异常)。

系统使用(android.app.ApplicationThread)注册广播。

除非它发生在所有设备上,否则我可以说这是因为 GMS 配置错误(Google Play 服务)。

您可以做的是用 try catch 包装所有分析调用(您只捕获安全异常)。

我不是 100% 确定,但我会在我自己尝试之后添加更多信息。

关于android - SecurityException : Parcel. readException 来自谷歌分析代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26379516/

相关文章:

android - Akavache 没有这样的表 : SchemaInfo

android - 离线到在线同步数据库

javascript - 如何使用 Javascript 使用 Google Analytics 中的数据填写表单字段?

php - 谷歌分析 V3 API PHP

android - 将布局膨胀到 AlertDialog 时出错 (Android)

android - 从 MySQL 数据库中获取 ListView 中 ListItem 的详细信息

android - 如何检查默认邮件客户端

android - 无法使用 BroadcastReceiver 捕获 android.intent.action.DELETE

android - 具有不同数据的新警报覆盖已设置的警报

google-analytics - 忽略URL的一部分并匹配其余部分