Skip to content

Commit 1df97bb

Browse files
authored
fix(auth, iOS): add detailed error handling for Apple authorization failures (#18415)
* fix(auth, iOS): add detailed error handling for Apple authorization failures * fix(auth, iOS): correct error message formatting for Apple authorization failures
1 parent e59af99 commit 1df97bb

1 file changed

Lines changed: 35 additions & 1 deletion

File tree

packages/firebase_auth/firebase_auth/ios/firebase_auth/Sources/firebase_auth/FLTFirebaseAuthPlugin.m

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -219,6 +219,40 @@ + (FlutterError *)convertToFlutterError:(NSError *)error {
219219
return [FlutterError errorWithCode:code message:message details:additionalData];
220220
}
221221

222+
+ (FlutterError *)convertAppleAuthorizationErrorToFlutterError:(NSError *)error {
223+
NSString *message = @"An unknown error has occurred.";
224+
if (error.localizedDescription.length > 0) {
225+
message = error.localizedDescription;
226+
}
227+
228+
NSMutableDictionary *additionalData = [NSMutableDictionary dictionary];
229+
NSString *nativeErrorDomain = error.domain ?: @"unknown";
230+
NSNumber *nativeErrorCode = @((long)error.code);
231+
232+
additionalData[@"nativeErrorDomain"] = nativeErrorDomain;
233+
additionalData[@"nativeErrorCode"] = nativeErrorCode;
234+
235+
NSError *underlyingError = error.userInfo[NSUnderlyingErrorKey];
236+
NSString *underlyingMessage = @"";
237+
if (underlyingError != nil) {
238+
NSString *underlyingErrorDomain = underlyingError.domain ?: @"unknown";
239+
NSNumber *underlyingErrorCode = @((long)underlyingError.code);
240+
241+
additionalData[@"underlyingNativeErrorDomain"] = underlyingErrorDomain;
242+
additionalData[@"underlyingNativeErrorCode"] = underlyingErrorCode;
243+
244+
underlyingMessage =
245+
[NSString stringWithFormat:@", Underlying Domain=%@ Code=%ld", underlyingErrorDomain,
246+
(long)underlyingError.code];
247+
}
248+
249+
NSString *detailMessage =
250+
[NSString stringWithFormat:@"%@ (Domain=%@ Code=%ld%@)", message, nativeErrorDomain,
251+
(long)error.code, underlyingMessage];
252+
253+
return [FlutterError errorWithCode:@"unknown" message:detailMessage details:additionalData];
254+
}
255+
222256
+ (id)getNSDictionaryFromAuthCredential:(FIRAuthCredential *)authCredential {
223257
if (authCredential == nil) {
224258
return [NSNull null];
@@ -532,7 +566,7 @@ - (void)authorizationController:(ASAuthorizationController *)controller
532566

533567
case ASAuthorizationErrorUnknown:
534568
default:
535-
completion(nil, [FLTFirebaseAuthPlugin convertToFlutterError:error]);
569+
completion(nil, [FLTFirebaseAuthPlugin convertAppleAuthorizationErrorToFlutterError:error]);
536570
break;
537571
}
538572
}

0 commit comments

Comments
 (0)