Skip to content
Merged
Show file tree
Hide file tree
Changes from 5 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,9 @@ public void onMethodCall(MethodCall call, Result result) {
builder.setLongLink(url);
buildShortDynamicLink(builder, call, createShortLinkListener(result));
break;
case "FirebaseDynamicLinks#getDynamicLink":
handleGetDynamicLink(result, Uri.parse((String) call.argument("url")));
break;
case "FirebaseDynamicLinks#getInitialLink":
handleGetInitialDynamicLink(result);
break;
Expand All @@ -114,6 +117,32 @@ private Map<String, Object> getMapFromPendingDynamicLinkData(
return dynamicLink;
}

private void handleGetDynamicLink(final Result result, Uri uri) {
FirebaseDynamicLinks.getInstance()
.getDynamicLink(uri)
.addOnSuccessListener(
new OnSuccessListener<PendingDynamicLinkData>() {
@Override
public void onSuccess(PendingDynamicLinkData pendingDynamicLinkData) {
if (pendingDynamicLinkData != null) {
Uri link = pendingDynamicLinkData.getLink();
if (link != null) {
result.success(link.toString());
return;
}
}
result.success(null);
}
})
.addOnFailureListener(
new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
result.error(e.getClass().getSimpleName(), e.getMessage(), null);
}
});
}

private void handleGetInitialDynamicLink(final Result result) {
// If there's no activity, then there's no initial dynamic link.
if (registrar.activity() == null) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,19 @@ - (void)handleMethodCall:(FlutterMethodCall *)call result:(FlutterResult)result
} else {
result(dict);
}
} else if ([@"FirebaseDynamicLinks#getDynamicLink" isEqualToString:call.method]) {
NSURL *shortLink = [NSURL URLWithString:call.arguments[@"url"]];
FIRDynamicLinkUniversalLinkHandler completion =
^(FIRDynamicLink *_Nullable dynamicLink, NSError *_Nullable error) {
if (error) {
result(getFlutterError(error));
} else if (dynamicLink && dynamicLink.url) {
result([dynamicLink.url absoluteString]);
} else {
result(nil);
}
};
[[FIRDynamicLinks dynamicLinks] handleUniversalLink:shortLink completion:completion];
} else {
result(FlutterMethodNotImplemented);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,16 @@ class FirebaseDynamicLinks {
return getPendingDynamicLinkDataFromMap(linkData);
}

Future<Uri> getDynamicLink(Uri url) async {
final String reply = await FirebaseDynamicLinks.channel
.invokeMethod<String>('FirebaseDynamicLinks#getDynamicLink',
<String, dynamic>{'url': url.toString()});
if (reply == null) {
return null;
}
return Uri.tryParse(reply);
}

PendingDynamicLinkData getPendingDynamicLinkDataFromMap(
Map<dynamic, dynamic> linkData) {
if (linkData == null) return null;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,8 @@ void main() {
'minimumVersion': 'Version 12',
},
};
case 'FirebaseDynamicLinks#getDynamicLink':
return 'https://google.com';
default:
return null;
}
Expand All @@ -65,6 +67,21 @@ void main() {
]);
});

test('getDynamicLink', () async {
final Uri argument = Uri.parse('short-link');
final Uri url =
await FirebaseDynamicLinks.instance.getDynamicLink(argument);

expect(url.host, 'google.com');

expect(log, <Matcher>[
isMethodCall('FirebaseDynamicLinks#getDynamicLink',
arguments: <String, dynamic>{
'url': argument.toString(),
})
]);
});

group('$DynamicLinkParameters', () {
test('shortenUrl', () async {
final Uri url = Uri.parse('google.com');
Expand Down