是否必须在 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
- appdemo://deeplink
- 本地://
我已经将这两个方案添加到我的 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>
所以,回答你的问题:
- 是的,必须同时指定方案和主机。
- 在一个 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://
你觉得这不是优化的方式吗?
任何其他建议请提及。
我必须为 activity 过滤两个 URL。我通过为 Deep Link Screen.
指定 url 使用应用程序内容的深层链接这些是我的 url
- appdemo://deeplink
- 本地://
我已经将这两个方案添加到我的 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>
所以,回答你的问题:
- 是的,必须同时指定方案和主机。
- 在一个 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://
你觉得这不是优化的方式吗? 任何其他建议请提及。