我在我的应用程序中使用深度链接。
这是我在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
。
问题是,在某些情况下,我一次又一次地获得深度链接。以下是问题发生的场景:
在我点击链接的那一刻,我的应用程序不在内存中或通过点击系统返回按钮关闭。
在我的应用程序中处理链接后,我用系统返回按钮关闭应用程序。
然后我通过点击它的预览(不是启动器图标)在所有内存应用程序的菜单中打开应用程序(通过点击我手机上的一个系统按钮打开)。并再次发送深链接。
问题是,当链接传递时,我无法识别,是这种特殊的有问题的情况,我应该忽略链接,还是用户实际上点击了链接,我应该处理它。
将链接保存在静态变量中检查是否为相同的链接是不好的,因为用户可能会再次点击相同的链接来查看相同的数据。
Firebase动态链接也存在这个问题。
我的手机运行Android 12 (api级别31),三星S21
找到了解决方案,感谢这个答案
我使用这个方法检查活动是否从历史中启动,如果为真,那么我忽略深度链接
private boolean isActivityLaunchedFromHistory() {
return getIntent().getFlags() ==
(Intent.FLAG_ACTIVITY_NEW_TASK
| Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY);
}