@@ -120,17 +120,54 @@ + (NSDictionary *)parametersWithParameters:(NSDictionary *)parameters
120120 [GIDEMMSupport updatedEMMParametersWithParameters: authSession.authState.lastTokenResponse
121121 .additionalParameters];
122122
123- // Ensure returned dictionary has values of only type String.
124- NSMutableDictionary <NSString *, NSString *> *convertedParameters =
125- [NSMutableDictionary dictionary ];
126- [originalParameters enumerateKeysAndObjectsUsingBlock: ^(NSString *key, id value, BOOL *stop) {
127- if ([value isKindOfClass: [NSNumber class ]]) {
128- convertedParameters[key] = [value stringValue ];
129- } else if ([value isKindOfClass: [NSString class ]]) {
130- convertedParameters[key] = value;
123+ NSMutableDictionary *updatedParameters = [NSMutableDictionary dictionary ];
124+ // Will first make any json objects within our original parameters into a string.
125+ [updatedParameters enumerateKeysAndObjectsUsingBlock: ^(NSString *key, id value, BOOL *stop) {
126+ if ([NSJSONSerialization isValidJSONObject: value]) {
127+ NSError *error;
128+ NSData *jsonData = [NSJSONSerialization dataWithJSONObject: value
129+ options: 0
130+ error: &error];
131+ if (!error && jsonData) {
132+ updatedParameters[key] = [[NSString alloc ] initWithData: jsonData
133+ encoding: NSUTF8StringEncoding];
134+ }
135+ }
136+ else {
137+ updatedParameters[key] = value;
131138 }
132139 }];
133- return convertedParameters;
140+
141+ // Start converting our original parameters to [String:String]
142+ NSError *error;
143+ NSData *additionalParametersData = [NSJSONSerialization dataWithJSONObject: updatedParameters
144+ options: NSJSONWritingPrettyPrinted
145+ error: nil ];
146+ NSString *additionalParametersString = [[NSString alloc ] initWithData: additionalParametersData
147+ encoding: NSUTF8StringEncoding];
148+
149+ NSCharacterSet *newline = [NSCharacterSet newlineCharacterSet ];
150+ NSMutableArray <NSString *> *keyAndValueArray =
151+ [[additionalParametersString componentsSeparatedByCharactersInSet: newline] mutableCopy ];
152+
153+ // Remove braces
154+ [keyAndValueArray removeObjectAtIndex: 0 ];
155+ [keyAndValueArray removeLastObject ];
156+
157+ // Set up what characters should be removed in loop
158+ NSMutableCharacterSet *keySet = [[NSCharacterSet whitespaceCharacterSet ] mutableCopy ];
159+ [keySet formUnionWithCharacterSet: [NSCharacterSet punctuationCharacterSet ]];
160+ NSCharacterSet *valueSet = [NSCharacterSet punctuationCharacterSet ];
161+
162+ NSMutableDictionary <NSString *, NSString *> *stringOnlyParameters = [@{} mutableCopy];
163+ for (NSString *kvPair in keyAndValueArray) {
164+ NSArray <NSString *> *keyAndValue = [kvPair componentsSeparatedByString: @" :" ];
165+ NSString *key = [keyAndValue[0 ] stringByTrimmingCharactersInSet: keySet];
166+ NSString *value = [keyAndValue[1 ] stringByTrimmingCharactersInSet: valueSet];
167+ stringOnlyParameters[key] = value;
168+ }
169+
170+ return stringOnlyParameters;
134171}
135172
136173- (void )updateErrorForAuthSession : (GTMAuthSession *)authSession
0 commit comments