From 59b7a6415d12329f9ebc6506787f23c5bb8eb0a5 Mon Sep 17 00:00:00 2001 From: russellwheatley Date: Wed, 16 Nov 2022 10:55:22 +0000 Subject: [PATCH 1/5] fix(dynamic-links): fix crash when building short link with no internet --- .../lib/src/exception.dart | 8 ++++---- .../Classes/FLTFirebaseDynamicLinksPlugin.m | 20 ++++++++++++++++--- 2 files changed, 21 insertions(+), 7 deletions(-) diff --git a/packages/_flutterfire_internals/lib/src/exception.dart b/packages/_flutterfire_internals/lib/src/exception.dart index 4d70bb6795dc..e9c543aa9132 100644 --- a/packages/_flutterfire_internals/lib/src/exception.dart +++ b/packages/_flutterfire_internals/lib/src/exception.dart @@ -38,16 +38,16 @@ FirebaseException platformExceptionToFirebaseException( PlatformException platformException, { required String plugin, }) { - Map? details = platformException.details != null - ? Map.from(platformException.details) + Map? details = platformException.details != null + ? Map.from(platformException.details) : null; String? code; String message = platformException.message ?? ''; if (details != null) { - code = details['code'] ?? code; - message = details['message'] ?? message; + code = (details['code'] as String?) ?? code; + message = (details['message'] as String?) ?? message; } return FirebaseException( diff --git a/packages/firebase_dynamic_links/firebase_dynamic_links/ios/Classes/FLTFirebaseDynamicLinksPlugin.m b/packages/firebase_dynamic_links/firebase_dynamic_links/ios/Classes/FLTFirebaseDynamicLinksPlugin.m index 821542d1833a..09d8b0dfad6e 100644 --- a/packages/firebase_dynamic_links/firebase_dynamic_links/ios/Classes/FLTFirebaseDynamicLinksPlugin.m +++ b/packages/firebase_dynamic_links/firebase_dynamic_links/ios/Classes/FLTFirebaseDynamicLinksPlugin.m @@ -123,22 +123,36 @@ - (void)handleMethodCall:(FlutterMethodCall *)call result:(FlutterResult)result FLTFirebaseMethodCallErrorBlock errorBlock = ^( NSString *_Nullable code, NSString *_Nullable message, NSDictionary *_Nullable details, NSError *_Nullable error) { + NSMutableDictionary *temp; if (code == nil) { NSDictionary *errorDetails = getDictionaryFromNSError(error); code = errorDetails[kCode]; message = errorDetails[kMessage]; - details = errorDetails; + + if (errorDetails[@"additionalData"] != nil) { + temp = [errorDetails[@"additionalData"] mutableCopy]; + } else { + temp = [errorDetails mutableCopy]; + } + + // "NSErrorFailingURLStringKey" doesn't work + if (temp[@"NSErrorFailingURLKey"] != nil) { + [temp removeObjectForKey:@"NSErrorFailingURLKey"]; + } + if (temp[NSUnderlyingErrorKey] != nil) { + [temp removeObjectForKey:NSUnderlyingErrorKey]; + } if (errorDetails[@"additionalData"][NSLocalizedFailureReasonErrorKey] != nil) { // This stops an uncaught type cast exception in dart - NSMutableDictionary *temp = [errorDetails[@"additionalData"] mutableCopy]; [temp removeObjectForKey:NSLocalizedFailureReasonErrorKey]; - details = temp; // provides a useful message to the user. e.g. "Universal link URL could not be parsed". if ([message containsString:@"unknown error"]) { message = errorDetails[@"additionalData"][NSLocalizedFailureReasonErrorKey]; } } + + details = temp; } else { details = @{ kCode : code, From 7c3e24b79ea21ef4a67a5417b33f4e83220ffc7c Mon Sep 17 00:00:00 2001 From: russellwheatley Date: Wed, 16 Nov 2022 11:27:08 +0000 Subject: [PATCH 2/5] chore(dynamic-links): improve error message --- .../ios/Classes/FLTFirebaseDynamicLinksPlugin.m | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/packages/firebase_dynamic_links/firebase_dynamic_links/ios/Classes/FLTFirebaseDynamicLinksPlugin.m b/packages/firebase_dynamic_links/firebase_dynamic_links/ios/Classes/FLTFirebaseDynamicLinksPlugin.m index 09d8b0dfad6e..9b275acacb6e 100644 --- a/packages/firebase_dynamic_links/firebase_dynamic_links/ios/Classes/FLTFirebaseDynamicLinksPlugin.m +++ b/packages/firebase_dynamic_links/firebase_dynamic_links/ios/Classes/FLTFirebaseDynamicLinksPlugin.m @@ -143,6 +143,11 @@ - (void)handleMethodCall:(FlutterMethodCall *)call result:(FlutterResult)result [temp removeObjectForKey:NSUnderlyingErrorKey]; } + if ([errorDetails[kMessage] containsString:@"An unknown error has occurred"] && + [temp[NSLocalizedDescriptionKey] containsString:@"The request timed out"]) { + message = temp[NSLocalizedDescriptionKey]; + } + if (errorDetails[@"additionalData"][NSLocalizedFailureReasonErrorKey] != nil) { // This stops an uncaught type cast exception in dart [temp removeObjectForKey:NSLocalizedFailureReasonErrorKey]; From ec8a4330882df3c4a9b273897f4ed295309b9e5b Mon Sep 17 00:00:00 2001 From: Russell Wheatley Date: Wed, 16 Nov 2022 13:34:43 +0000 Subject: [PATCH 3/5] Update FLTFirebaseDynamicLinksPlugin.m --- .../ios/Classes/FLTFirebaseDynamicLinksPlugin.m | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/firebase_dynamic_links/firebase_dynamic_links/ios/Classes/FLTFirebaseDynamicLinksPlugin.m b/packages/firebase_dynamic_links/firebase_dynamic_links/ios/Classes/FLTFirebaseDynamicLinksPlugin.m index 9b275acacb6e..2cfa79612144 100644 --- a/packages/firebase_dynamic_links/firebase_dynamic_links/ios/Classes/FLTFirebaseDynamicLinksPlugin.m +++ b/packages/firebase_dynamic_links/firebase_dynamic_links/ios/Classes/FLTFirebaseDynamicLinksPlugin.m @@ -135,7 +135,7 @@ - (void)handleMethodCall:(FlutterMethodCall *)call result:(FlutterResult)result temp = [errorDetails mutableCopy]; } - // "NSErrorFailingURLStringKey" doesn't work + // "NSErrorFailingURLStringKey" key does not work for removing this object. So we use our own String to retrieve, if (temp[@"NSErrorFailingURLKey"] != nil) { [temp removeObjectForKey:@"NSErrorFailingURLKey"]; } From a80f5a341063668925954565acce9bf2ab9c2d1e Mon Sep 17 00:00:00 2001 From: Russell Wheatley Date: Wed, 16 Nov 2022 13:35:07 +0000 Subject: [PATCH 4/5] remove comma --- .../ios/Classes/FLTFirebaseDynamicLinksPlugin.m | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/firebase_dynamic_links/firebase_dynamic_links/ios/Classes/FLTFirebaseDynamicLinksPlugin.m b/packages/firebase_dynamic_links/firebase_dynamic_links/ios/Classes/FLTFirebaseDynamicLinksPlugin.m index 2cfa79612144..f3a97205bd99 100644 --- a/packages/firebase_dynamic_links/firebase_dynamic_links/ios/Classes/FLTFirebaseDynamicLinksPlugin.m +++ b/packages/firebase_dynamic_links/firebase_dynamic_links/ios/Classes/FLTFirebaseDynamicLinksPlugin.m @@ -135,7 +135,7 @@ - (void)handleMethodCall:(FlutterMethodCall *)call result:(FlutterResult)result temp = [errorDetails mutableCopy]; } - // "NSErrorFailingURLStringKey" key does not work for removing this object. So we use our own String to retrieve, + // "NSErrorFailingURLStringKey" key does not work for removing this object. So we use our own String to retrieve if (temp[@"NSErrorFailingURLKey"] != nil) { [temp removeObjectForKey:@"NSErrorFailingURLKey"]; } From 90a1effb21d28335de248087a7f230914642a325 Mon Sep 17 00:00:00 2001 From: russellwheatley Date: Wed, 16 Nov 2022 14:52:43 +0000 Subject: [PATCH 5/5] format --- .../ios/Classes/FLTFirebaseDynamicLinksPlugin.m | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/firebase_dynamic_links/firebase_dynamic_links/ios/Classes/FLTFirebaseDynamicLinksPlugin.m b/packages/firebase_dynamic_links/firebase_dynamic_links/ios/Classes/FLTFirebaseDynamicLinksPlugin.m index f3a97205bd99..cdfa4124fe1a 100644 --- a/packages/firebase_dynamic_links/firebase_dynamic_links/ios/Classes/FLTFirebaseDynamicLinksPlugin.m +++ b/packages/firebase_dynamic_links/firebase_dynamic_links/ios/Classes/FLTFirebaseDynamicLinksPlugin.m @@ -135,7 +135,8 @@ - (void)handleMethodCall:(FlutterMethodCall *)call result:(FlutterResult)result temp = [errorDetails mutableCopy]; } - // "NSErrorFailingURLStringKey" key does not work for removing this object. So we use our own String to retrieve + // "NSErrorFailingURLStringKey" key does not work for removing this object. So we use our own + // String to retrieve if (temp[@"NSErrorFailingURLKey"] != nil) { [temp removeObjectForKey:@"NSErrorFailingURLKey"]; }