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

eug*_*ene 6 android firebase firebase-dynamic-links

https://firebase.google.com/docs/dynamic-links/android/receive

说明

调用getDynamicLink()会检索链接并清除该数据,因此只能由您的应用处理一次.

您通常在主活动中调用getDynamicLink()以及与链接匹配的intent过滤器启动的任何活动.

我从doc中复制了以下代码.

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);
            }
        });
Run Code Online (Sandbox Code Playgroud)

如果我把上面的代码放在上面 MainActivity:onCreate

  • 当应用程序没有在后台运行时,深层链接工作正常
  • 当应用程序在后台运行时,无法识别深层链接(不会onSuccess调用回调)

如果我把上面的代码放在上面 MainActivity:onStart

  • 当应用程序在后台运行时,深层链接工作正常
  • 如果用户点击深层链接,主要活动获取它并打开approapriate活动,(工作正常)但是当他尝试返回主活动时,onSuccess回调再次触发,他永远无法进入主要活动.

小智 5

复制方法内编写的代码MainActivity:onCreate(整个 Firebase 动态链接相关代码)MainActivity:onNewIntent,无论应用程序是否在后台运行,这都有效。

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);
                }
            });
}
Run Code Online (Sandbox Code Playgroud)