Skip to content

Commit b522b2b

Browse files
imzyymehmetf
authored andcommitted
[firebase_dynamic_links] Add support of expanding from short links (#1381)
1 parent 4900968 commit b522b2b

File tree

6 files changed

+63
-13
lines changed

6 files changed

+63
-13
lines changed

packages/firebase_dynamic_links/CHANGELOG.md

+4
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
## 0.5.0+7
2+
3+
* Add `getDynamicLink` to support expanding from short links.
4+
15
## 0.5.0+6
26

37
* Updated README instructions for contributing for consistency with other Flutterfire plugins.

packages/firebase_dynamic_links/android/src/main/java/io/flutter/plugins/firebasedynamiclinks/FirebaseDynamicLinksPlugin.java

+21-12
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,9 @@ public void onMethodCall(MethodCall call, Result result) {
9292
builder.setLongLink(url);
9393
buildShortDynamicLink(builder, call, createShortLinkListener(result));
9494
break;
95+
case "FirebaseDynamicLinks#getDynamicLink":
96+
handleGetDynamicLink(result, Uri.parse((String) call.argument("url")));
97+
break;
9598
case "FirebaseDynamicLinks#getInitialLink":
9699
handleGetInitialDynamicLink(result);
97100
break;
@@ -114,17 +117,8 @@ private Map<String, Object> getMapFromPendingDynamicLinkData(
114117
return dynamicLink;
115118
}
116119

117-
private void handleGetInitialDynamicLink(final Result result) {
118-
// If there's no activity, then there's no initial dynamic link.
119-
if (registrar.activity() == null) {
120-
result.success(null);
121-
return;
122-
}
123-
124-
FirebaseDynamicLinks.getInstance()
125-
.getDynamicLink(registrar.activity().getIntent())
126-
.addOnSuccessListener(
127-
registrar.activity(),
120+
private void addDynamicLinkListener(Task<PendingDynamicLinkData> task, final Result result) {
121+
task.addOnSuccessListener(
128122
new OnSuccessListener<PendingDynamicLinkData>() {
129123
@Override
130124
public void onSuccess(PendingDynamicLinkData pendingDynamicLinkData) {
@@ -138,7 +132,6 @@ public void onSuccess(PendingDynamicLinkData pendingDynamicLinkData) {
138132
}
139133
})
140134
.addOnFailureListener(
141-
registrar.activity(),
142135
new OnFailureListener() {
143136
@Override
144137
public void onFailure(@NonNull Exception e) {
@@ -147,6 +140,22 @@ public void onFailure(@NonNull Exception e) {
147140
});
148141
}
149142

143+
private void handleGetDynamicLink(final Result result, Uri uri) {
144+
addDynamicLinkListener(FirebaseDynamicLinks.getInstance().getDynamicLink(uri), result);
145+
}
146+
147+
private void handleGetInitialDynamicLink(final Result result) {
148+
// If there's no activity, then there's no initial dynamic link.
149+
if (registrar.activity() == null) {
150+
result.success(null);
151+
return;
152+
}
153+
154+
addDynamicLinkListener(
155+
FirebaseDynamicLinks.getInstance().getDynamicLink(registrar.activity().getIntent()),
156+
result);
157+
}
158+
150159
private OnCompleteListener<ShortDynamicLink> createShortLinkListener(final Result result) {
151160
return new OnCompleteListener<ShortDynamicLink>() {
152161
@Override

packages/firebase_dynamic_links/ios/Classes/FirebaseDynamicLinksPlugin.m

+11
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,17 @@ - (void)handleMethodCall:(FlutterMethodCall *)call result:(FlutterResult)result
9999
} else {
100100
result(dict);
101101
}
102+
} else if ([@"FirebaseDynamicLinks#getDynamicLink" isEqualToString:call.method]) {
103+
NSURL *shortLink = [NSURL URLWithString:call.arguments[@"url"]];
104+
FIRDynamicLinkUniversalLinkHandler completion =
105+
^(FIRDynamicLink *_Nullable dynamicLink, NSError *_Nullable error) {
106+
if (error) {
107+
result(getFlutterError(error));
108+
} else {
109+
result(getDictionaryFromDynamicLink(dynamicLink));
110+
}
111+
};
112+
[[FIRDynamicLinks dynamicLinks] handleUniversalLink:shortLink completion:completion];
102113
} else {
103114
result(FlutterMethodNotImplemented);
104115
}

packages/firebase_dynamic_links/lib/src/firebase_dynamic_links.dart

+7
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,13 @@ class FirebaseDynamicLinks {
3737
return getPendingDynamicLinkDataFromMap(linkData);
3838
}
3939

40+
Future<PendingDynamicLinkData> getDynamicLink(Uri url) async {
41+
final Map<String, dynamic> linkData = await FirebaseDynamicLinks.channel
42+
.invokeMapMethod<String, dynamic>('FirebaseDynamicLinks#getDynamicLink',
43+
<String, dynamic>{'url': url.toString()});
44+
return getPendingDynamicLinkDataFromMap(linkData);
45+
}
46+
4047
PendingDynamicLinkData getPendingDynamicLinkDataFromMap(
4148
Map<dynamic, dynamic> linkData) {
4249
if (linkData == null) return null;

packages/firebase_dynamic_links/pubspec.yaml

+1-1
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+6
4+
version: 0.5.0+7
55

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

packages/firebase_dynamic_links/test/firebase_dynamic_links_test.dart

+19
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,10 @@ void main() {
3939
'minimumVersion': 'Version 12',
4040
},
4141
};
42+
case 'FirebaseDynamicLinks#getDynamicLink':
43+
return <dynamic, dynamic>{
44+
'link': 'https://google.com',
45+
};
4246
default:
4347
return null;
4448
}
@@ -65,6 +69,21 @@ void main() {
6569
]);
6670
});
6771

72+
test('getDynamicLink', () async {
73+
final Uri argument = Uri.parse('short-link');
74+
final PendingDynamicLinkData data =
75+
await FirebaseDynamicLinks.instance.getDynamicLink(argument);
76+
77+
expect(data.link.host, 'google.com');
78+
79+
expect(log, <Matcher>[
80+
isMethodCall('FirebaseDynamicLinks#getDynamicLink',
81+
arguments: <String, dynamic>{
82+
'url': argument.toString(),
83+
})
84+
]);
85+
});
86+
6887
group('$DynamicLinkParameters', () {
6988
test('shortenUrl', () async {
7089
final Uri url = Uri.parse('google.com');

0 commit comments

Comments
 (0)