Android 即时应用程序和应用程序链接的使用
Android Instant Apps and use of App LInks
Android 即时应用似乎在 Android 5.0 或更高版本中受支持。但是,App Links(据我所知,Instant Apps 依赖于它)仅在 6.0 或更高版本中受支持。我在网上搜索过,但找不到明确的答案。
一般来说,我们想要支持即时应用程序,使用应用程序链接在不同功能模块中的活动之间导航,但在大多数情况下还需要使用这些模块来构建可在其上运行的可安装 apk低于 5.0
的版本
这是否意味着代码需要检查 API 级别并根据版本使用不同的方法(例如,如果 < 5.0,则明确调用 startActivity
)?
这是我在 Instant Apps documentation:
中找到的信息
Both your instant and installable versions of your app must implement
the Android App Links feature introduced in Android 6.0. App Links
provide the primary mechanism for connecting URLs to discrete
activities within your app.
和
an instant app cannot launch an activity in another feature directly;
instead, it must request the URL address that corresponds to the other
other feature's entry-point activity.
然后从https://developer.android.com/topic/instant-apps/index.html
Android Instant Apps supports the latest Android devices from
Android 5.0 (API level 21) through Android O
Android 应用程序链接只是为 Android 系统提供了一种将您的 http deep-links 与您的应用程序唯一关联的方法(不显示消歧对话框供用户 select 打开哪个应用 link)。它不会给你任何新的 API 来启动 activity。因此在任何情况下您都需要调用 startActivity
。如果你想打开属于另一个 Instant App 功能模块的 activity,你只需要使用隐式意图。
对于同一功能模块内部的导航(或者如果您的 Instant App 仅包含 one base feature),可以自由使用显式意图。
It looks like right now that Android Instant Apps are supported in
Android 5.0 or later. However, App Links (which I understood that
Instant Apps depend on) are only supported in 6.0 or later
是的,没错。但是 Instant App supervisor(由 Google Play Services 内部安装并用于 运行 Instant Apps on Android before 8.0)将确保应用程序 link 注册到您经过验证的 Instant App 域将直接转发到您的 Instant App。
Does this mean that code needs to check the API level and use
different approaches depending on version (e.g calling startActivity
if < 5.0)
是的,如果您想 100% 确定您的用户在浏览应用程序的活动(以及大多数可能您想防止这种奇怪的用户体验)。如果你使用依赖注入,你可以在你的应用程序中使用一个用于导航的界面,然后为可安装应用程序和即时应用程序提供不同的实现。
interface Navigation {
void startActivityFromModuleA();
void startActivityFromModuleB();
…
}
class InstallableAppNavigation implements Navigation {
public void startActivityFromModuleA() {
// explicit intent
Intent intent = new Intent(context, ActivityFromModuleA.class);
context.startActivity(intent);
}
…
}
class InstantAppNavigation implements Navigation {
public void startActivityFromModuleA() {
// implicit intent
Intent intent = new Intent(Intent.ACTION_VIEW,
Uri.parse("https://your.app.com/moduleA/smth"));
context.startActivity(intent);
}
…
}
Android 即时应用似乎在 Android 5.0 或更高版本中受支持。但是,App Links(据我所知,Instant Apps 依赖于它)仅在 6.0 或更高版本中受支持。我在网上搜索过,但找不到明确的答案。
一般来说,我们想要支持即时应用程序,使用应用程序链接在不同功能模块中的活动之间导航,但在大多数情况下还需要使用这些模块来构建可在其上运行的可安装 apk低于 5.0
的版本
这是否意味着代码需要检查 API 级别并根据版本使用不同的方法(例如,如果 < 5.0,则明确调用 startActivity
)?
这是我在 Instant Apps documentation:
中找到的信息Both your instant and installable versions of your app must implement the Android App Links feature introduced in Android 6.0. App Links provide the primary mechanism for connecting URLs to discrete activities within your app.
和
an instant app cannot launch an activity in another feature directly; instead, it must request the URL address that corresponds to the other other feature's entry-point activity.
然后从https://developer.android.com/topic/instant-apps/index.html
Android Instant Apps supports the latest Android devices from Android 5.0 (API level 21) through Android O
Android 应用程序链接只是为 Android 系统提供了一种将您的 http deep-links 与您的应用程序唯一关联的方法(不显示消歧对话框供用户 select 打开哪个应用 link)。它不会给你任何新的 API 来启动 activity。因此在任何情况下您都需要调用 startActivity
。如果你想打开属于另一个 Instant App 功能模块的 activity,你只需要使用隐式意图。
对于同一功能模块内部的导航(或者如果您的 Instant App 仅包含 one base feature),可以自由使用显式意图。
It looks like right now that Android Instant Apps are supported in Android 5.0 or later. However, App Links (which I understood that Instant Apps depend on) are only supported in 6.0 or later
是的,没错。但是 Instant App supervisor(由 Google Play Services 内部安装并用于 运行 Instant Apps on Android before 8.0)将确保应用程序 link 注册到您经过验证的 Instant App 域将直接转发到您的 Instant App。
Does this mean that code needs to check the API level and use different approaches depending on version (e.g calling
startActivity
if < 5.0)
是的,如果您想 100% 确定您的用户在浏览应用程序的活动(以及大多数可能您想防止这种奇怪的用户体验)。如果你使用依赖注入,你可以在你的应用程序中使用一个用于导航的界面,然后为可安装应用程序和即时应用程序提供不同的实现。
interface Navigation {
void startActivityFromModuleA();
void startActivityFromModuleB();
…
}
class InstallableAppNavigation implements Navigation {
public void startActivityFromModuleA() {
// explicit intent
Intent intent = new Intent(context, ActivityFromModuleA.class);
context.startActivity(intent);
}
…
}
class InstantAppNavigation implements Navigation {
public void startActivityFromModuleA() {
// implicit intent
Intent intent = new Intent(Intent.ACTION_VIEW,
Uri.parse("https://your.app.com/moduleA/smth"));
context.startActivity(intent);
}
…
}