Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

SecurityException: Parcel.readException coming from google analytics code

Our app is getting quite a few different SecurityException reports from our crash report software. Here is a stacktrace of the crash:

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) 

The stack trace is always the same, except the only thing that seems to change is android.app.ApplicationThreadProxy@41da9030 (pid=9103) and android.content.IIntentReceiver$Stub$Proxy@41ee0688 have different numbers on them (is this thread id's or something?)

Now this exception seems to be linked to intent size (see the following links)

  • stackoverflow post
  • another stackoverflow post
  • see the comment on this question
  • see b0bs reply here

Is this the only cause? If so how is my code causing this when it seems to only come from google analytics code? Am I using GA wrong? I don't seem to be doing much besides making a tracker.

EDIT

This is how I am creating my tracker. I have a singleton tracker in my application object

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; } 

Then in my BaseActivity I have the following code:

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()); } 

EDIT 2

ok here is the use of 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

like image 263
Jason Ridge Avatar asked Oct 15 '14 09:10

Jason Ridge


1 Answers

It's a SecurityException means this is not happening because of our own function. (Mostly system code throw these exception).

and system uses (android.app.ApplicationThread) to register a broadcast.

Unless it is happening on all devices i can say it's because of bad GMS configuration (Google play service).

What you can do is wrap all analytics call with try catch (where you only catch Security exception).

I am not 100% sure but i will add more info after i try it my self.

like image 72
Pratyush Avatar answered Sep 18 '22 06:09

Pratyush