android - Android App Intent Filter 有时不起作用
问题描述
对于一个项目我遇到了一个很奇怪的问题:
去年,深度链接一直运行良好,但最近(自 2019 年 1 月开始)我们收到用户抱怨深度链接已停止工作(有人说 10 次中有 9 次)。
我们没有更改任何此代码,并且很难重现此问题。
更奇怪的是,在我们自己遇到问题的稀少时期,Android 操作系统甚至不会通过“打开方式”对话框将我们的应用程序显示为选项。这向我们表明,操作系统有时会忘记应用程序在其清单中注册了意图过滤器。
重新启动应用程序似乎可以解决此问题,并且深度链接再次开始工作。每次我们从 Android Studio 进行新构建时,该应用程序似乎也能正常工作,这使得它很难重现。
我们的清单有一个处理深层链接的特定活动:
<activity
android:name="com.company.DeepLinkActivity"
android:noHistory="true"
android:launchMode="singleTask">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data
android:host="ideal-payment"
android:scheme="com.company.ideal" />
<data
android:host="ideal-payment"
android:scheme="com-company-ideal" />
</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="${appLinkIdealHost}"
android:pathPrefix="/ideal-betaling/landingpage"
android:scheme="https" />
</intent-filter>
<intent-filter android:autoVerify="true">
...
</intent-filter>
<intent-filter android:autoVerify="true">
...
</intent-filter>
</activity>
我们认为这可能与无法访问自动验证有关,但是操作系统应该显示“打开方式”对话框,当问题浮出水面时不会发生这种情况。
有没有人遇到过类似的问题?任何帮助或建议将不胜感激。
解决方案
例如,当应用程序因异常停止或用户从设置中强制停止应用程序时,或者当用户从历史记录(或任务)中删除应用程序时,应用程序将自动强制停止(这不是制造商的好选择)当应用程序处于停止状态时,intentFilter
将不会使用其清单(当应用程序首次安装且从未打开时,它也处于此阶段)
当处于停止状态时,应用程序将不会因任何原因运行,除非手动启动活动,或针对活动、服务或广播的显式意图。
https://riptutorial.com/android/example/30592/android-stopped-state
您提到的大多数 Android 版本都是 8 或更高版本,因此下面的报价也可能有用,但这适用于服务和广播接收器。
每当应用程序在后台运行时,它都会消耗设备的一些有限资源,例如 RAM。这可能会导致用户体验受损,尤其是在用户使用资源密集型应用程序(例如玩游戏或观看视频)时。为了改善用户体验,Android 8.0(API 级别 26)对应用程序在后台运行时可以执行的操作施加了限制。
https://developer.android.com/about/versions/oreo/background
推荐阅读
- ansible - Ansible Fact - 将 Ansible Fact 变量解析为字典
- python - Python中具有低维数组索引的多维数组的复杂索引
- python - 过滤预期的 2 个参数,用 lambda 得到 1
- shopware - 更改 Shopware 6 的默认测量单位
- html - 使按钮的行为类似于 React 中的复选框
- ruby-on-rails - Rails - 有很多模型和多个参考
- azure - 将一个资源的变量传递给另一个
- python-3.x - 列表索引如何超出范围?
- php - 使用“woocommerce_product_add_to_cart_text”过滤器挂钩时的问题
- google-translate - 谷歌翻译:UI 翻译但 API 失败