@@ -123,48 +123,66 @@ - (BOOL)application:(UIApplication *)application
123
123
124
124
- (BOOL )checkForDynamicLink : (NSURL *)url {
125
125
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] ;
129
129
}
130
- return NO ;
131
- }
132
130
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
+ }
148
134
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 ;
159
145
}
160
146
161
147
- (BOOL )application : (UIApplication *)application
162
148
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 ;
168
186
}
169
187
170
188
- (FIRDynamicLinkShortenerCompletion)createShortLinkCompletion:(FlutterResult)result {
0 commit comments