首页 > 解决方案 > 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>

我们认为这可能与无法访问自动验证有关,但是操作系统应该显示“打开方式”对话框,当问题浮出水面时不会发生这种情况。

有没有人遇到过类似的问题?任何帮助或建议将不胜感激。

标签: androidintentfilterdeeplink

解决方案


例如,当应用程序因异常停止或用户从设置中强制停止应用程序时,或者当用户从历史记录(或任务)中删除应用程序时,应用程序将自动强制停止(这不是制造商的好选择)当应用程序处于停止状态时,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


推荐阅读