Skip to content

Commit eba22bd

Browse files
committed
[firebase_dynamic_links] Not working on app start (#100)
1 parent b97b720 commit eba22bd

File tree

2 files changed

+54
-36
lines changed

2 files changed

+54
-36
lines changed

packages/firebase_dynamic_links/ios/Classes/FirebaseDynamicLinksPlugin.m

Lines changed: 53 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -123,48 +123,66 @@ - (BOOL)application:(UIApplication *)application
123123

124124
- (BOOL)checkForDynamicLink:(NSURL *)url {
125125
FIRDynamicLink *dynamicLink = [[FIRDynamicLinks dynamicLinks] dynamicLinkFromCustomSchemeURL:url];
126-
if (dynamicLink) {
127-
if (dynamicLink.url) _initialLink = dynamicLink;
128-
return YES;
126+
127+
if (!dynamicLink) {
128+
dynamicLink = [[FIRDynamicLinks dynamicLinks] dynamicLinkFromUniversalLinkURL:url];
129129
}
130-
return NO;
131-
}
132130

133-
- (BOOL)onLink:(NSUserActivity *)userActivity {
134-
BOOL handled = [[FIRDynamicLinks dynamicLinks]
135-
handleUniversalLink:userActivity.webpageURL
136-
completion:^(FIRDynamicLink *_Nullable dynamicLink, NSError *_Nullable error) {
137-
if (error) {
138-
FlutterError *flutterError = getFlutterError(error);
139-
[self.channel invokeMethod:@"onLinkError"
140-
arguments:getDictionaryFromFlutterError(flutterError)];
141-
} else {
142-
NSMutableDictionary *dictionary = getDictionaryFromDynamicLink(dynamicLink);
143-
[self.channel invokeMethod:@"onLinkSuccess" arguments:dictionary];
144-
}
145-
}];
146-
return handled;
147-
}
131+
if (!dynamicLink) {
132+
return NO;
133+
}
148134

149-
- (BOOL)onInitialLink:(NSUserActivity *)userActivity {
150-
BOOL handled = [[FIRDynamicLinks dynamicLinks]
151-
handleUniversalLink:userActivity.webpageURL
152-
completion:^(FIRDynamicLink *_Nullable dynamicLink, NSError *_Nullable error) {
153-
if (error) {
154-
self.flutterError = getFlutterError(error);
155-
}
156-
self.initialLink = dynamicLink;
157-
}];
158-
return handled;
135+
if (dynamicLink.url) {
136+
if (_initiated) {
137+
[self.channel invokeMethod:@"onLinkSuccess"
138+
arguments:getDictionaryFromDynamicLink(dynamicLink)];
139+
} else {
140+
_initialLink = dynamicLink;
141+
}
142+
return YES;
143+
}
144+
return NO;
159145
}
160146

161147
- (BOOL)application:(UIApplication *)application
162148
continueUserActivity:(NSUserActivity *)userActivity
163-
restorationHandler:(void (^)(NSArray *))restorationHandler {
164-
if (_initiated) {
165-
return [self onLink:userActivity];
166-
}
167-
return [self onInitialLink:userActivity];
149+
restorationHandler:
150+
#if defined(__IPHONE_12_0) && (__IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_12_0)
151+
(nonnull void (^)(NSArray<id<UIUserActivityRestoring>> *_Nullable))restorationHandler {
152+
#else
153+
(nonnull void (^)(NSArray *_Nullable))restorationHandler {
154+
#endif // __IPHONE_12_0
155+
__block BOOL retried = NO;
156+
157+
id completion = ^(FIRDynamicLink *_Nullable dynamicLink, NSError *_Nullable error) {
158+
if (!error && dynamicLink && dynamicLink.url) {
159+
if (_initiated) {
160+
[self.channel invokeMethod:@"onLinkSuccess"
161+
arguments:getDictionaryFromDynamicLink(dynamicLink)];
162+
} else {
163+
_initialLink = dynamicLink;
164+
}
165+
}
166+
167+
// Per Apple Tech Support, a network failure could occur when returning from background on
168+
// iOS 12. https://github.com/AFNetworking/AFNetworking/issues/4279#issuecomment-447108981 So
169+
// we'll retry the request once
170+
if (error && !retried && [NSPOSIXErrorDomain isEqualToString:error.domain] &&
171+
error.code == 53) {
172+
retried = YES;
173+
[[FIRDynamicLinks dynamicLinks] handleUniversalLink:userActivity.webpageURL
174+
completion:completion];
175+
} else if (error) {
176+
FlutterError *flutterError = getFlutterError(error);
177+
[self.channel invokeMethod:@"onLinkError"
178+
arguments:getDictionaryFromFlutterError(flutterError)];
179+
}
180+
};
181+
182+
[[FIRDynamicLinks dynamicLinks] handleUniversalLink:userActivity.webpageURL
183+
completion:completion];
184+
185+
return NO;
168186
}
169187

170188
- (FIRDynamicLinkShortenerCompletion)createShortLinkCompletion:(FlutterResult)result {

packages/firebase_dynamic_links/pubspec.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
name: firebase_dynamic_links
22
description: Flutter plugin for Google Dynamic Links for Firebase, an app solution for creating
33
and handling links across multiple platforms.
4-
version: 0.5.0+3
4+
version: 0.5.0+4
55

66
author: Flutter Team <[email protected]>
77
homepage: https://github.com/FirebaseExtended/flutterfire/tree/master/packages/firebase_dynamic_links

0 commit comments

Comments
 (0)