【问题标题】:Android: How to remove the reference to a firebase dynamic link after receiving it? [duplicate]Android:收到后如何删除对firebase动态链接的引用? [复制]
【发布时间】:2020-04-24 15:30:19
【问题描述】:

在我的应用中,我在主要活动中收到动态链接。当用户打开一个链接并启动应用程序并完成正确的操作时,这非常有效,但动态链接在应用程序中检索后似乎仍然存在。

即使在用户按下链接并在应用程序中使用FirebaseDynamicLinks.getInstance().getDynamicLink(getIntent()) 检索该链接后,用户也可以关闭应用程序并在一段时间后重新打开它,getDynamicLink(getIntent()) 仍会返回意图内的链接和数据。

有没有办法在应用程序中检索一次链接及其数据后丢弃它?我只需要setIntent(null)吗?

这是我的MainActivity

@Override
protected void onCreate(Bundle savedInstanceState) {
    setTheme(R.style.ButtonTheme);
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    handleDynamicLink();
}

private void handleDynamicLink() {
    FirebaseDynamicLinks.getInstance()
            .getDynamicLink(getIntent())
            .addOnSuccessListener(this, pendingDynamicLinkData -> {
                // Get deep link from result (may be null if no link is found)
                Uri deepLink = null;
                if (pendingDynamicLinkData != null) {
                    deepLink = pendingDynamicLinkData.getLink();
                    if(deepLink!=null){
                        String gameId = deepLink.getQueryParameter("id");
                        Intent intent = new Intent(this, MultiplayerActivity.class);
                        intent.putExtra("gameId",gameId);
                        startMultiplayerActivity(intent);
                    }
                    Log.d(TAG, "handleDynamicLink: bundle: "+deepLink.getQueryParameter("id"));
                }
            }).addOnFailureListener(this, e -> Log.w(TAG, "getDynamicLink:onFailure", e));
}

【问题讨论】:

标签: java android firebase firebase-dynamic-links


【解决方案1】:

从动态链接中获取数据后,您可以根据需要向 Activity 发送数据。 然后处理这个。

处理完Data后,如果要丢弃Data,在Activity中使用这段代码。

getActivity().getIntent().setData(null);

【讨论】:

  • 这对我不起作用,因为我在OnNewIntent() 中执行此操作,关闭我的应用程序并重新打开它,当在onCreate() 中调用GetIntent() 时,数据仍然存在于意图中
  • 我在我的活动中以onResume() 调用它并且它正在工作。谢谢!
【解决方案2】:

这是我为清除意图数据和额外内容所做的:

// Don't reprocess if activity opened from recent apps
if (requireActivity().intent.flags.and(Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY) != Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY) {
    Firebase.dynamicLinks
    ...
    .addOnCompleteListener {
// clear data
        requireActivity().intent.data = null
        requireActivity().intent.replaceExtras(Bundle())
    }
}

请注意,我在片段中执行此操作。如果您在活动中执行此操作,请删除 requireActivity().

【讨论】:

    猜你喜欢
    • 2017-05-19
    • 1970-01-01
    • 2018-12-25
    • 2018-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多