android - Firebase动态链接,使用一次后清除

标签 android firebase firebase-dynamic-links

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/

相关文章:

android - FirebaseUI 离线授权

firebase - 如何检查文档在Cloud Firestore中是否存在抖动?

firebase - 从深层链接打开时如何刷新应用程序?

ios - 关于动态链接的行为

android - 如何获取在启动时立即崩溃的 React Native Android 应用程序的崩溃日志

android - 使用实时数据时如何在 Android 中链接转换?

android - 向 AlertDialog 添加边框

java - 如何在 firebase 中检查查询过程是否完成

javascript - 在外部浏览器中从 FB 应用程序打开 PWA

java - Java语言的Android EMI计算器: Not resulting correct as Math. pow给出了非常大的数字