1

FIRAnalytics logEventWithNameを使用する場合:parametersメソッドは、EXC_BAD_ACCESSによって引き起こされるアプリケーションクラッシュを起こします。これは私がそれを呼び出す方法です:firebase EXC_BAD_ACCESS logEventWithName

[FIRAnalytics logEventWithName:name parameters:paramethers]; 

パラメータ:

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

だけこのオブジェクトにクラッシュします。

私は私のプロジェクトにライブラリを追加するcocoapodsを使用しています:今日の

pod 'Google/Analytics' 

と現在のバージョンは3.9.0です。

+0

どのFirebase Analytics SDKのバージョンを使用していますか?私はこのクラッシュが最新バージョン4.0.0で修正されたと思います。同じパラメータを試してもクラッシュしませんでした。ただし、パラメータ「URL」は長すぎるため記録されません。 – adbitx

答えて

1

これは、パラメータ値が最大100文字になる可能性があるためです。私のオブジェクトのURLパラメータは132文字です。ここで

はFIRAnalytics.h下のメソッドの要約である:以下この(trimParameters)メソッド

警告

/// 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. 

可能なデータがを失ったあなたを保証するものです。慎重に使用してください!私たちのパラメータを調整しています。

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

、我々は次のようにこのメソッドを呼び出すことができます:あなたは、「私の場合のように」100文字の後の情報を必要としない場合しかし、あなたはそれを使用することができ

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

SOLUTION:

@adbitxのコメントのように:「クラッシュは最新バージョン4.0.0で修正されました」バージョン「4.0.0」をインストールする場合、ポッドアップデートは私の場合は役に立ちません。

誰もが今日のために、バージョン「4.0.0」を使用したい場合はthis podを使用する必要があります。

pod 'FirebaseAnalytics' 

または他のポッドライブラリの更新を待ちます。

誰かを助けることを願っています。

+0

これは悪いです。残りのデータを保存せずに文字列をトリミングします。代わりに、複数の部分があることを示すために変数に名前を付ける方法を考え出し、それを分割します。それ以外の場合はデータが失われます。 または、URLのような安全な仮定を作成し、?クエリ部分を最後に格納するか、単にパラメータ自体を格納します。 このデータを圧縮する方法はたくさんあります。 NSStringとNSURLには、文字列をHost、path、params ...に分割する方法もあります。それらを代わりに使用します。 –

+0

あなたはそうです。これは私が思う私のプロジェクトでのみ受け入れられます。私はそのパラメータのために失われたデータを許可するからです。私は私の答えを更新します。ありがとうございました。 – mgyky