19

La nostra app sta ottenendo diversi report SecurityException dal nostro software di report degli arresti anomali. Ecco una stacktrace del crash: (? È questa discussione id o qualcosa del genere)SecurityException: Parcel.readException proveniente dal codice google analytics

java.lang.SecurityException: Unable to find app for caller [email protected] (pid=17925) when registering receiver [email protected] 
    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) 

Lo stack trace è sempre lo stesso, tranne l'unica cosa che sembra cambiare è [email protected] (pid=9103) e [email protected] hanno numeri diversi su di loro

Ora questa eccezione sembra essere legato alla dimensione intenti (consultare i seguenti link)

È questo l'unica causa? In tal caso, qual è il motivo che sta provocando il mio codice quando sembra provenire solo dal codice google analytics? Sto usando GA errato? Non sembra che stia facendo molto oltre a fare un tracker.

EDIT

Questo è come mi sto creando il mio inseguitore. Ho un tracker singleton nel mio oggetto applicazione

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

Poi nel mio BaseActivity Ho il seguente codice:

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 qui è l'uso di 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

+0

Come stai creando il Tracker/invio di colpi a GA? –

+0

@zaventh vedere la mia domanda modificata per il modo in cui invio i risultati. Non sono incredibilmente felice con il codice, ma dovrebbe funzionare ... –

+0

'sendCommerceData' sembra sospetto. Sei sicuro di voler costruire correttamente 'Map' per inviare un hit valido? C'è qualche possibilità che tu stia memorizzando "stringhe" straordinariamente lunghe in questa "mappa" personalizzata? –

risposta

0

La mia ipotesi è che si esegue ProGuard sulla vostra applicazione, ma non sono state aggiunte le seguenti eccezioni al vostro Proguard-rules.txt:

-keep public class com.google.android.gms.common.internal.safeparcel.SafeParcelable { 
    public static final *** NULL; 
} 

-keepnames @com.google.android.gms.common.annotation.KeepName class * 
-keepclassmembernames class * { 
    @com.google.android.gms.common.annotation.KeepName *; 
} 

-keepnames class * implements android.os.Parcelable { 
    public static final ** CREATOR; 
} 
+2

Purtroppo ho queste eccezioni in proguard-project.txt –