当我重新打开应用程序时,Android Deep Link再次交付

发布于 2025-01-24 11:22:06 字数 1907 浏览 0 评论 0原文

我使用“ nofollow noreferrer”>深层链接在我的应用中。

这是我在清单中的活动

<activity
    android:name=".ui.MainActivity"
    android:exported="true"
    android:launchMode="singleTask"
    android:screenOrientation="portrait"
    android:theme="@style/AppTheme.NoActionBar.Launcher">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
    <intent-filter android:autoVerify="true">
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />
        <data
            android:host="app.mydomain.com"
            android:pathPrefix="/prefix"
            android:scheme="https" />
    </intent-filter>
</activity>

,这是我

Uri uri = getIntent().getData();

完成处理深链接和其他一些逻辑后,我在mainActivity中获得了深层链接,我将用户导航到其他活动,并完成MainActivity

问题是,在某些情况下,我一遍又一遍地获得了深厚的链接。这是情况下发生的情况:

  1. 暂时我单击链接,我的应用不在内存中或通过点击系统返回按钮关闭。

  2. 在我的应用程序中处理链接后,我将使用系统返回按钮关闭应用程序。

  3. 然后,通过单击菜单中的Preview(不是启动器图标),请打开应用程序,并在内存应用程序中使用所有内容(通过单击手机上的一个系统按钮打开)。

    再次交付了深层链接。

问题是,当我无法识别的链接交付时,是否是这种特殊的有问题的情况,我应该忽略链接,或者实际上是用户单击链接,我应该处理它。

将链接保存在静态变量中以检查是否相同的链接不好,因为用户可以再次单击相同的链接以查看相同的数据。

这个问题也持续使用 firebase动态链接

我的手机在Android 12(API级别31)上运行,三星S21

I use deep links in my app.

This is my activity in manifest

<activity
    android:name=".ui.MainActivity"
    android:exported="true"
    android:launchMode="singleTask"
    android:screenOrientation="portrait"
    android:theme="@style/AppTheme.NoActionBar.Launcher">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
    <intent-filter android:autoVerify="true">
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />
        <data
            android:host="app.mydomain.com"
            android:pathPrefix="/prefix"
            android:scheme="https" />
    </intent-filter>
</activity>

And this is how I get deep link

Uri uri = getIntent().getData();

After I'm done with handling deep link and some other logic in MainActivity, I navigate user to other activity, and finish MainActivity.

The problem is, in certain scenario, I got deep link delivered over and over again. This is scenario whet problem happens:

  1. At moment I click link, my app is not in memory or closed by tap on system back button.

  2. After link handled in my app, I close app with system back button.

  3. Then I open app by clicking on it's preview (not launcher icon) in menu with all in memory apps (opens by clicking on one system button on my phone). And deep link is delivered again.

The problem is, when link delivered I can't identify, is it this particular problematic case scenario, and I should ignore the link, or is user actually clicked the link, and I should handle it.

Saving the link in static variable to check if is it the same link would be not good, cause user may click the same link again to review the same data.

The problem also persists with Firebase Dynamic Links.

My phone runs on Android 12 (api level 31), Samsung S21

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

街角卖回忆 2025-01-31 11:22:06

找到了一个解决方案,这要归功于此答案

我检查是否使用此方法从历史上启动了活动,如果是的,则忽略深层链接

private boolean isActivityLaunchedFromHistory() {
    return getIntent().getFlags() ==
                (Intent.FLAG_ACTIVITY_NEW_TASK 
               | Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY);
    }

Found a solution, thanks to this answer

I check if activity was launched from history using this method, and if true, then I ignore deep link

private boolean isActivityLaunchedFromHistory() {
    return getIntent().getFlags() ==
                (Intent.FLAG_ACTIVITY_NEW_TASK 
               | Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY);
    }
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文