Skip to content
This repository was archived by the owner on Feb 22, 2023. It is now read-only.

Commit f17f5e2

Browse files
committed
firebase_dynamic_links bug fix: support clicking on link while app is running.
This commit checks for dynamic links on any new intent and remove the limitation for the fluter activity intent only. This way users can retrieve the dynamic link that was clicked while the app was running. In addition the old links is cleaned up every time the link was sent successfully to the user to get a better and more expected behavior. This behavior now matches the behavior on ios.
1 parent 1b3413a commit f17f5e2

1 file changed

Lines changed: 45 additions & 18 deletions

File tree

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

Lines changed: 45 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package io.flutter.plugins.firebasedynamiclinks;
22

3+
import android.content.Intent;
34
import android.net.Uri;
45
import androidx.annotation.NonNull;
56
import com.google.android.gms.tasks.OnCompleteListener;
@@ -13,6 +14,7 @@
1314
import io.flutter.plugin.common.MethodChannel;
1415
import io.flutter.plugin.common.MethodChannel.MethodCallHandler;
1516
import io.flutter.plugin.common.MethodChannel.Result;
17+
import io.flutter.plugin.common.PluginRegistry;
1618
import io.flutter.plugin.common.PluginRegistry.Registrar;
1719
import java.util.ArrayList;
1820
import java.util.HashMap;
@@ -22,9 +24,22 @@
2224
/** FirebaseDynamicLinksPlugin */
2325
public class FirebaseDynamicLinksPlugin implements MethodCallHandler {
2426
private Registrar registrar;
27+
private Map<String, Object> dynamicLinkData;
28+
private Task extractIntentLinkTask;
2529

2630
private FirebaseDynamicLinksPlugin(Registrar registrar) {
2731
this.registrar = registrar;
32+
33+
registrar.addNewIntentListener(
34+
new PluginRegistry.NewIntentListener() {
35+
@Override
36+
public boolean onNewIntent(Intent intent) {
37+
checkLinkOnIntent(intent);
38+
return false;
39+
}
40+
});
41+
42+
checkLinkOnIntent(registrar.activity().getIntent());
2843
}
2944

3045
public static void registerWith(Registrar registrar) {
@@ -61,29 +76,14 @@ public void onMethodCall(MethodCall call, Result result) {
6176
}
6277

6378
private void handleRetrieveDynamicLink(final Result result) {
64-
FirebaseDynamicLinks.getInstance()
65-
.getDynamicLink(registrar.activity().getIntent())
79+
extractIntentLinkTask
6680
.addOnCompleteListener(
6781
registrar.activity(),
6882
new OnCompleteListener<PendingDynamicLinkData>() {
6983
@Override
7084
public void onComplete(@NonNull Task<PendingDynamicLinkData> task) {
71-
if (task.isSuccessful()) {
72-
PendingDynamicLinkData data = task.getResult();
73-
if (data != null) {
74-
Map<String, Object> dynamicLink = new HashMap<>();
75-
dynamicLink.put("link", data.getLink().toString());
76-
77-
Map<String, Object> androidData = new HashMap<>();
78-
androidData.put("clickTimestamp", data.getClickTimestamp());
79-
androidData.put("minimumVersion", data.getMinimumAppVersion());
80-
81-
dynamicLink.put("android", androidData);
82-
result.success(dynamicLink);
83-
return;
84-
}
85-
}
86-
result.success(null);
85+
result.success(dynamicLinkData);
86+
dynamicLinkData = null;
8787
}
8888
})
8989
.addOnFailureListener(
@@ -274,4 +274,31 @@ private static <T> T valueFor(String key, Map<String, Object> map) {
274274
T result = (T) map.get(key);
275275
return result;
276276
}
277+
278+
private void checkLinkOnIntent(Intent intent) {
279+
extractIntentLinkTask =
280+
FirebaseDynamicLinks.getInstance()
281+
.getDynamicLink(intent)
282+
.addOnCompleteListener(
283+
registrar.activity(),
284+
new OnCompleteListener<PendingDynamicLinkData>() {
285+
@Override
286+
public void onComplete(@NonNull Task<PendingDynamicLinkData> task) {
287+
if (task.isSuccessful()) {
288+
PendingDynamicLinkData data = task.getResult();
289+
if (data != null) {
290+
Map<String, Object> linkData = new HashMap<>();
291+
linkData.put("link", data.getLink().toString());
292+
293+
Map<String, Object> androidData = new HashMap<>();
294+
androidData.put("clickTimestamp", data.getClickTimestamp());
295+
androidData.put("minimumVersion", data.getMinimumAppVersion());
296+
297+
linkData.put("android", androidData);
298+
dynamicLinkData = linkData;
299+
}
300+
}
301+
}
302+
});
303+
}
277304
}

0 commit comments

Comments
 (0)