https://firebase.google.com/docs/dynamic-links/android/receive
指出
Calling getDynamicLink() retrieves the link and clears that data so it is only processed once by your app.
You normally call getDynamicLink() in the main activity as well as any activities launched by intent filters that match the link.
我从文档中复制了以下代码。
FirebaseDynamicLinks.getInstance()
.getDynamicLink(getIntent())
.addOnSuccessListener(this, new OnSuccessListener<PendingDynamicLinkData>() {
@Override
public void onSuccess(PendingDynamicLinkData pendingDynamicLinkData) {
// Get deep link from result (may be null if no link is found)
Uri deepLink = null;
if (pendingDynamicLinkData != null) {
deepLink = pendingDynamicLinkData.getLink();
}
// Handle the deep link. For example, open the linked
// content, or apply promotional credit to the user's
// account.
// ...
// ...
}
})
.addOnFailureListener(this, new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Log.w(TAG, "getDynamicLink:onFailure", e);
}
});
如果我把上面的代码放在 MainActivity:onCreate
- 当应用程序不在后台运行时,深层链接工作正常
- 当应用程序在后台运行时,深层链接无法识别(
onSuccess
回调不会被调用)
如果我把上面的代码放在MainActivity:onStart
- 无论应用是否在后台运行,深度链接都可以正常工作
- 如果用户点击深度链接,主 Activity 获取它并打开适当的 Activity ,(工作正常)但是当他试图返回主 Activity 时,
onSuccess
回调再次触发并且他永远无法去参加主要 Activity 。
最佳答案
在 MainActivity:onNewIntent
方法中复制在 MainActivity:onCreate
方法中编写的代码(整个 Firebase 动态链接相关代码),无论应用程序在背景与否。
此外,如果应用程序不在后台,则不会调用 MainActivity:onNewIntent
方法,因此不会发生重复的 Firebase 调用。
您的MainActivity 应该如下所示
@Override
protected void onCreate(Bundle savedInstanceState) {
//...
FirebaseDynamicLinks.getInstance()
.getDynamicLink(getIntent())
.addOnSuccessListener(this, new OnSuccessListener<PendingDynamicLinkData>() {
@Override
public void onSuccess(PendingDynamicLinkData pendingDynamicLinkData) {
// Get deep link from result (may be null if no link is found)
Uri deepLink = null;
if (pendingDynamicLinkData != null) {
deepLink = pendingDynamicLinkData.getLink();
}
// Handle the deep link. For example, open the linked
// content, or apply promotional credit to the user's
// account.
// ...
})
.addOnFailureListener(this, new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Log.w(TAG, "getDynamicLink:onFailure", e);
}
});
}
@Override
protected void onNewIntent(Intent intent) {
//...
FirebaseDynamicLinks.getInstance()
.getDynamicLink(intent)
.addOnSuccessListener(this, new OnSuccessListener<PendingDynamicLinkData>() {
@Override
public void onSuccess(PendingDynamicLinkData pendingDynamicLinkData) {
// Get deep link from result (may be null if no link is found)
Uri deepLink = null;
if (pendingDynamicLinkData != null) {
deepLink = pendingDynamicLinkData.getLink();
}
// Handle the deep link. For example, open the linked
// content, or apply promotional credit to the user's
// account.
// ...
})
.addOnFailureListener(this, new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Log.w(TAG, "getDynamicLink:onFailure", e);
}
});
}
关于android - Firebase动态链接,使用一次后清除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48128583/