1

Bei Verwendung von FIRAnalytics logEventWithName: Parameter Methode Anwendungsabsturz durch EXC_BAD_ACCESS verursacht. Dies ist, wie ich es nennen:firebase EXC_BAD_ACCESS logEventWithName

[FIRAnalytics logEventWithName:name parameters:paramethers]; 

Parameter:

name = "News_Detail" 

paramethers = { 
    Title = "Lorem ipsum dolor is amet"; 
    Category = "Lorem Ipsum Category"; 
    URL = "https://api.loremipsum.com.uk/Contents/GalleryAlbum?appRef=iOSLoremIpsumApp&URL=%2floremipsum%2fdolor%2fisamet-loremipsum-loremipsum"; 
} 

nur stürzt auf dieses Objekt.

Ich verwende cocoapods Bibliothek in meinem Projekt hinzuzufügen, mit:

pod 'Google/Analytics' 

und die aktuelle Version für heute ist 3.9.0.

+0

Welche Firebase Analytics SDK-Version verwenden Sie? Ich denke, dieser Absturz wurde in der neuesten Version 4.0.0 behoben. Ich habe die gleichen Parameter ausprobiert und es ist nicht abgestürzt. Ihr Parameter "URL" wird jedoch nicht aufgezeichnet, da er zu lang ist. – adbitx

Antwort

1

Es wird verursacht, weil Parameterwerte bis zu 100 Zeichen lang sein können. Der URL-Parameter meines Objekts ist 132 Zeichen lang. Hier

ist die Methode Zusammenfassung unter FIRAnalytics.h:

/// Logs an app event. The event can have up to 25 parameters. Events with the same name must have 
/// the same parameters. Up to 500 event names are supported. Using predefined events and/or 
/// parameters is recommended for optimal reporting. 
/// 
/// The following event names are reserved and cannot be used: 
/// <ul> 
///  <li>app_clear_data</li> 
///  <li>app_remove</li> 
///  <li>app_update</li> 
///  <li>error</li> 
///  <li>first_open</li> 
///  <li>in_app_purchase</li> 
///  <li>notification_dismiss</li> 
///  <li>notification_foreground</li> 
///  <li>notification_open</li> 
///  <li>notification_receive</li> 
///  <li>os_update</li> 
///  <li>session_start</li> 
///  <li>user_engagement</li> 
/// </ul> 
/// 
/// @param name The name of the event. Should contain 1 to 40 alphanumeric characters or 
///  underscores. The name must start with an alphabetic character. Some event names are 
///  reserved. See FIREventNames.h for the list of reserved event names. The "firebase_" prefix 
///  is reserved and should not be used. Note that event names are case-sensitive and that 
///  logging two events whose names differ only in case will result in two distinct events. 
/// @param parameters The dictionary of event parameters. Passing nil indicates that the event has 
///  no parameters. Parameter names can be up to 40 characters long and must start with an 
///  alphabetic character and contain only alphanumeric characters and underscores. Only NSString 
///  and NSNumber (signed 64-bit integer and 64-bit floating-point number) parameter types are 
///  supported. NSString parameter values can be up to 100 characters long. The "firebase_" 
///  prefix is reserved and should not be used for parameter names. 

Warnung

Diese (trimParameters) Methode ist unten garantieren Ihnen eine möglich, Daten verloren. Bitte benutze es vorsichtig! Es trimmt unsere Parameter. Aber wenn Sie keine Informationen nach 100 Zeichen müssen „wie in meinem Fall“ können Sie es verwenden:

- (NSDictionary*)trimParameters:(NSDictionary*)paramethers { 
    int maxCharacter = 100; 
    NSMutableDictionary *result = [paramethers mutableCopy]; 

    for (NSString* key in result) { 
     NSString *value = [NSString stringWithFormat:@"%@", result[key]]; 
     if(![value isEqualToString:@""] && [value length] > maxCharacter) { 
      result[key] = [value substringFromIndex:maxCharacter]; 
     } 
    } 

    return result; 
} 

und wir können diese Methode aufrufen, wie:

[FIRAnalytics logEventWithName:name parameters:paramethers != nil ? [self trimParameters:paramethers] : paramethers]; 

LÖSUNG:

Wie @adbitx sagt im Kommentar: "Absturz wurde in der neuesten Version 4.0.0 behoben." Für die Installation der Version "4.0.0" Pod Update wird nicht in meinem Fall helfen.

Wenn jemand heute verwenden Version "4.0.0" wollen, müssen this pod verwenden:

pod 'FirebaseAnalytics' 

oder für andere update pod Bibliothek warten.

Ich hoffe, es wird jemandem helfen.

+0

Das ist schlecht. Es wird die Zeichenfolge trimmen, ohne den Rest der Daten zu speichern. Stellen Sie sich stattdessen eine Möglichkeit vor, Variablen zu benennen, um anzuzeigen, dass mehr als ein Teil vorhanden ist, und zu teilen, andernfalls gehen Daten verloren. Oder erstellen Sie eine sichere Annahme, wie die URL, und speichern Sie nur den Abfrageteil am Ende, oder speichern Sie einfach die Parameter selbst. Es gibt viele Möglichkeiten, diese Daten zu komprimieren. NSString und NSURL haben auch Möglichkeiten, die Zeichenfolge in Host, Pfad, Parameter zu zerlegen ... verwenden Sie diese stattdessen. –

+0

Sie haben Recht. Dies ist nur akzeptabel für mein Projekt, denke ich. Weil ich Daten für diese Parameter verloren gehen lasse. Ich werde meine Antwort aktualisieren. Vielen Dank. – mgyky