Android 深度 link 当我重新打开应用程序时再次发送
Android deep link delivered again when I reopen the app
我在我的应用程序中使用 deep links。
这是我的activity清单
<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>
这就是我深入的方式link
Uri uri = getIntent().getData();
在我处理完深度 link 和 MainActivity
中的一些其他逻辑后,我将用户导航到其他 activity,并完成 MainActivity
.
问题是,在某些情况下,我一遍又一遍地深入 link。这是发生问题的场景:
我点击 link 时,我的应用程序不在内存中,也没有通过点击系统后退按钮关闭。
在我的应用程序中处理 link 后,我使用系统后退按钮关闭应用程序。
然后我通过单击菜单中的预览(不是启动器图标)打开应用程序,所有应用程序都在内存中(通过单击 phone 上的一个系统按钮打开)。并且deeplink再次送达
问题是,当 link 交付时我无法确定,是这种特殊的问题案例场景,我应该忽略 link,还是用户实际点击了 link,我应该处理它。
将 link 保存在静态变量中以检查是否相同 link 并不好,因为用户可能会再次单击相同的 link 以查看相同的数据。
问题也存在于 Firebase Dynamic Links。
我的 phone 在 Android 12(api 31 级)、三星 S21
上运行
找到了解决方法,多亏了这个answer
我检查 activity 是否使用此方法从历史记录中启动,如果为真,那么我将忽略 deep link
private boolean isActivityLaunchedFromHistory() {
return getIntent().getFlags() ==
(Intent.FLAG_ACTIVITY_NEW_TASK
| Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY);
}
我在我的应用程序中使用 deep links。
这是我的activity清单
<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>
这就是我深入的方式link
Uri uri = getIntent().getData();
在我处理完深度 link 和 MainActivity
中的一些其他逻辑后,我将用户导航到其他 activity,并完成 MainActivity
.
问题是,在某些情况下,我一遍又一遍地深入 link。这是发生问题的场景:
我点击 link 时,我的应用程序不在内存中,也没有通过点击系统后退按钮关闭。
在我的应用程序中处理 link 后,我使用系统后退按钮关闭应用程序。
然后我通过单击菜单中的预览(不是启动器图标)打开应用程序,所有应用程序都在内存中(通过单击 phone 上的一个系统按钮打开)。并且deeplink再次送达
问题是,当 link 交付时我无法确定,是这种特殊的问题案例场景,我应该忽略 link,还是用户实际点击了 link,我应该处理它。
将 link 保存在静态变量中以检查是否相同 link 并不好,因为用户可能会再次单击相同的 link 以查看相同的数据。
问题也存在于 Firebase Dynamic Links。
我的 phone 在 Android 12(api 31 级)、三星 S21
上运行找到了解决方法,多亏了这个answer
我检查 activity 是否使用此方法从历史记录中启动,如果为真,那么我将忽略 deep link
private boolean isActivityLaunchedFromHistory() {
return getIntent().getFlags() ==
(Intent.FLAG_ACTIVITY_NEW_TASK
| Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY);
}