是否必须在 android 中为所有 url 指定 "android:host" for Deep Link?

It is mandatory to specify the "android:host" for all url in android for Deep Link?

我必须为 activity 过滤两个 URL。我通过为 Deep Link Screen.

指定 url 使用应用程序内容的深层链接

这些是我的 url

我已经将这两个方案添加到我的 Android 清单文件中,看起来像

            <data android:scheme="appdemo" android:host="deeplink" />
            <data android:scheme="native" />

我的问题是,通过在 Android 清单文件中提供方案和主机,native:// 这个 link 不起作用。它还需要 android:host 名称 (native://deeplink).

必须为android中的所有url指定“android:host”吗? 如果不是,我该如何指定不同的方案。

深层链接的想法是使用与普通链接相同的结构:

scheme://host/path

主要好处是您甚至可以教您的应用程序打开一些互联网链接,例如打开 youtube(Android 会询问,是否要在浏览器或 YouTube 应用程序或您的应用程序中打开):

    <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:scheme="http"/>
        <data android:scheme="https"/>
        <data android:host="youtube.com"/>
        <data android:host="www.youtube.com"/>
        <data android:host="m.youtube.com"/>
        <data android:host="youtu.be"/>
        <data android:pathPattern=".*"/>
    </intent-filter>

所以,回答你的问题:

  1. 是的,必须同时指定方案和主机。
  2. 在一个 activity 中处理两个不同链接的一个好习惯是使用不同的路径。像这样:
    <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:scheme="appdemo" android:host="deeplink" android:pathPrefix="/path1/"/>
    </intent-filter>
    <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:scheme="appdemo" android:host="deeplink" android:pathPrefix="/path2/"/>
    </intent-filter>

然后你可以在onNewIntent:

中得到你的路径
Uri data = intent.getData();
String path = data == null ? null : data.getPath();

...并根据此路径构建一些逻辑。

上面的答案是可以接受的,在我的例子中,我想通过这个意图过滤器导航一个新的 activity,我得到了上面答案的一些信息,并对我的代码进行了一些更改并修复了问题。 另外,我没有为我的第二个意图指定主机名。

        <activity
        android:name=".DeepLinkActivity"
        android:exported="true"
        android:screenOrientation="portrait"
        android:theme="@style/AppTheme.Launcher">
        <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:scheme="appdemo" android:host="deeplink" />
        </intent-filter>

        <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:scheme="native" />
        </intent-filter>

    </activity>

现在我的两个 url 导航到 DeepLinkActivity。

appdemo://deeplink
native://

你觉得这不是优化的方式吗? 任何其他建议请提及。