当我重新打开应用程序时,Android深度链接再次传递



我在我的应用程序中使用深度链接。

这是我在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>

我就是这样得到深度链接的

Uri uri = getIntent().getData();

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

问题是,在某些情况下,我一次又一次地获得深度链接。以下是问题发生的场景:

  1. 在我点击链接的那一刻,我的应用程序不在内存中或通过点击系统返回按钮关闭。

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

  3. 然后我通过点击它的预览(不是启动器图标)在所有内存应用程序的菜单中打开应用程序(通过点击我手机上的一个系统按钮打开)。并再次发送深链接。

问题是,当链接传递时,我无法识别,是这种特殊的有问题的情况,我应该忽略链接,还是用户实际上点击了链接,我应该处理它。

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

Firebase动态链接也存在这个问题。

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

找到了解决方案,感谢这个答案

我使用这个方法检查活动是否从历史中启动,如果为真,那么我忽略深度链接

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

最新更新