构建应用操作

应用操作允许用户通过询问 Google 助理或使用助理建议的 Android 快捷方式来启动您的 Android 应用中的功能。以下是使用应用操作扩展您的 Android 应用的主要步骤

  1. 确定要触发的应用内功能及其匹配的 内置意图 (BII)
  2. 为 BII 提供履约详细信息。
  3. 将应用操作的快捷方式推送到助理。
  4. 在测试设备上预览您的应用操作。
  5. 创建应用的测试版本。
  6. 请求应用操作审核和部署。

您可以选择定义动态快捷方式以提供给助理,以便助理可以向您的用户建议这些快捷方式。通过按照 应用操作代码实验室 中的说明,使用示例应用创建应用操作。

要求

在开始开发应用操作之前,请确保您和您的应用满足以下要求

  • 您必须拥有一个可以访问 Google Play 管理中心 的 Google 帐户。
  • 您的应用必须发布到 Google Play 商店,因为应用操作仅适用于已发布到 Google Play 商店的应用。此外,请确保您的应用并非旨在在工作资料中使用,因为应用操作不受 Google Play 管理控制的支持。
  • 您需要一个物理设备或虚拟设备来测试您的应用操作。
  • 您需要最新版本的 Android Studio
  • 您必须使用相同的 Google 帐户登录 Android Studio、测试设备上的 Google 应用以及 Google Play 管理中心。
  • 您必须在测试设备上设置助理,并通过在“主页”按钮上进行触摸并按住来测试它。

将内置意图与应用功能匹配

确定 Android 应用中用户可能希望使用语音请求跳转到的功能,并查看 内置意图参考 以找到适合您用例的 BII。BII 对用户想要执行的任务的用户查询进行建模,因此请查找与应用中的关键功能和用户流程匹配的 BII。

几乎所有 Android 应用都可以使用 常见 BII,例如使用 actions.intent.GET_THING BII 将应用内搜索扩展到助理,或通过实现 actions.intent.OPEN_APP_FEATURE BII 允许用户通过语音启动特定应用功能。

还有一些 BII 可以实现垂直或特定于类别的用例。例如,食品订购应用可以使用 actions.intent.ORDER_MENU_ITEM BII。

为确保出色的用户体验并避免可能导致审核延迟,请确保您实现的每个 BII 都与您的应用内功能相关。

应用操作通过从助理应用启动 Android 意图来实现,以将用户直接带到您的应用中的特定内容。您可以通过指定 targetClasstargetPackage 字段来定义启动活动的意图 明确。如果您的应用已经实现了 Android 深层链接 URL,则可以选择配置意图以使用深层链接来执行履约。有关更多详细信息,请参阅 测试您的活动深层链接 部分。

为内置意图提供履约详细信息

构建 App Action 的主要步骤是在 Android 应用的 功能 资源文件 shortcuts.xml 中声明功能,您需要在其中指定所选的 BII 及其对应的实现。BII 用于模拟用户对任务的查询,而实现意图则向 Assistant 提供有关如何执行该任务的信息。

在您的 shortcuts.xml 文件中,BII 以 <capability> 元素表示,每个实现都以 <intent> 元素表示。

<shortcuts>
    <capability android:name="actions.intent.ORDER_MENU_ITEM">
        <intent
            android:action="android.intent.action.VIEW"
            android:targetPackage="com.example.app"
            android:targetClass="com.example.app.browse">
            <parameter
                android:name="menuItem.name"
                android:key="query">
            </parameter>
        </intent>
    </capability>

对于大多数 BII,您需要根据 schema.org 实体从用户查询中提取意图参数。然后,您的应用使用这些 BII 参数将用户引导至所选功能。例如,上述代码将 menuItem.name BII 参数映射到 query Android intent 参数。

如果您使用深度链接来实现操作,则可以使用 urlTemplate 字段来定义 Assistant 生成的深度链接 URL。

<shortcuts>
    <capability android:name="actions.intent.ORDER_MENU_ITEM">
        <intent android:action="android.intent.action.VIEW">
            <url-template android:value="myfoodapp://browse{?query}" />
            <parameter android:name="menuItem.name"
                android:key="query"
                android:mimeType="text/*">
            </parameter>
        </intent>
    </capability>
</shortcuts>

有关将 App Actions 添加到 shortcuts.xml 文件的重要详细信息,请参阅 创建 shortcuts.xml。该页面还描述了如何指定您的应用期望的参数值。

实现 GET_THING 内置意图

如果您的应用具有搜索功能,则需要为该功能实现 actions.intent.GET_THING BII。这样,当用户进行类似“Hey Google,在示例应用中搜索示例事物”的查询时,Assistant 就可以将用户转发到您的应用的搜索功能,以在应用内查找结果。

在您的 shortcuts.xml 文件中,为 actions.intent.GET_THING BII 实现一个 <capability>,就像您 实现任何其他 BII 一样。您可以为 GET_THING 使用多个实现,只要您至少提供一个将用户查询传递到您的应用的搜索功能的实现即可。

以下是将 actions.intent.GET_THING BII 添加到 shortcuts.xml 的示例

  <capability android:name="actions.intent.GET_THING">
    <intent
      android:targetPackage="com.example.myapp"
      android:targetClass="com.example.myapp.MySearchActivity">
      <parameter android:name="thing.name" android:key="query" />
    </intent>
  </capability>

在您的搜索 Activity 中,从 intent 的额外数据中提取搜索查询,并将其传递给您的应用的搜索功能。在上面的代码中,作为 query 键传递的搜索查询映射到 "thing.name" BII 参数。然后,使用查询执行搜索,并在用户界面中显示结果。

可选:将 App Action 的快捷方式推送到 Assistant

定义操作的功能后,用户可以通过说“Hey Google,在示例应用中订购披萨”之类的词语来启动操作。Assistant 可以根据相关时间向用户推荐您的操作的 Android 快捷方式,让他们可以发现和重播您的操作。Assistant 可以推荐动态快捷方式和静态快捷方式。

要将动态快捷方式推送到 Assistant,请使用 Google 快捷方式集成库。此 Jetpack 库使 Assistant 能够获取您的快捷方式,并在适当的时间向用户推荐这些快捷方式。

有关详细信息,请参阅 将动态快捷方式推送到 Assistant

预览您的 App Actions

在开发和测试期间,请使用 Android Studio 的 Google Assistant 插件 来测试 App Actions 是否适用于您的应用。该插件会在您的 Google 帐户的 Assistant 中创建 App Actions 的预览。使用测试工具,您可以通过提供期望从用户那里收到的输入参数的 BII,在物理测试设备或模拟器上测试您的实现。

在预览 App Actions 时,您可以通过设备上的语音触发查询。此功能仅适用于 App Actions 的 BII 参考中列出的查询。仅将语音触发用于演示,而不要用于常规测试。

在将应用提交以供审核之前,请使用 Google Play 管理中心的开发者工具以草稿模式测试您的应用。有关使用 Google Play 管理中心部署应用草稿的更多信息,请参阅 准备并启动发布

创建测试版发布

当您准备使用额外测试人员测试您的 App Actions 时,请创建您的应用的内部或封闭 测试版发布。默认情况下,您的内部和封闭版发布测试人员可以访问已 审核和批准 的 App Actions。

要授予所有 App Actions(包括未经批准的操作)的测试访问权限,请指示您的测试人员加入 App Actions 开发计划 Google 群组。该群组的成员可以访问封闭版和内部测试版发布中的所有 App Actions,而无需使用 App Actions 测试工具 创建预览。加入该群组后,可能需要 3 个小时才能获得访问权限。

请求 App Actions 审核和部署

除非 App Actions 已审核和批准,否则用户无法在您的已发布应用或开放式测试版发布中使用它们。App Actions 审核不会影响您在 Google Play 中的 Android 应用审核和部署状态。即使您的应用提交已批准并在 Play 商店中发布,您的 shortcuts.xml 也可能正在接受 Google 的审核。在该审核批准之前,App Actions 无法供您的最终用户使用。

部署您的应用后,App Actions 会保持激活状态。但是,重新部署的版本需要接受 Google 的审核。如果新版本无法正常工作或包含策略违规行为,Google 保留停用您应用的 App Actions 的权利。

要将 App Actions 提交以供审核,请执行以下操作

  1. 在 Google Play 管理中心接受 App Actions 服务条款(高级设置 > App Actions)。

    App Actions Terms of Service in the Google Play console.

  2. 上传您的应用(包含 shortcuts.xml)到 Google Play 管理中心,以便按正常方式进行发布。

  3. 将您的应用上传到 Play 管理中心后,Google 会通过 Play 管理中心帐户中的电子邮件与您联系,提供有关 App Actions 审核状态的更多信息。您也可以 联系 Assistant 开发者支持,咨询有关 App Actions 审核状态的问题。在联系表格中,提供您的应用包 ID,并在 如何帮助您? 选择框中选择 App Action 审核

要使用深度链接启动使用 App Action 的 Activity,该 Activity 必须使用深度链接 URL 设置,并在 Android 应用清单中具有相应的意图过滤器。

要测试您的活动是否可访问以及是否可以使用 App Actions 通过深度链接触发,请运行以下 adb 命令

$ adb shell am start -a android.intent.action.VIEW -d "AppLinksURL"

例如

$ adb shell am start -a android.intent.action.VIEW -d "https://www.example.com/deeplink"

如果您的活动无法使用 adb 命令正确启动,请检查以下内容

  • 在您的应用清单文件中,该活动具有 android:exported=true,因此可以使用来自 Google Assistant 的意图来启动它。
  • 如果使用 App Links URL,请按照 处理 Android App Links 中的所有步骤进行操作。

App Actions 策略

App Actions 必须遵守特定的策略,以确保触发它们的用户的体验符合预期。在提交您的应用之前,请审查这些策略,以提供最佳用户体验并避免 Play 商店审核延迟或拒绝。

  • 将用户引导至用户预期内容

    App Action 内置意图 (BII) 和/或参数只能将用户引导至相关的用户预期操作。这可能包括应用内内容、网站内容或切片或小部件中显示的信息,只要该体验是用户预期的即可。

    例如,ORDER_MENU_ITEM BII 的实现可以帮助用户启动对指定菜单项或菜系的订单。该策略的唯一例外情况是,当您的 OPEN_APP_FEATURE BII 将用户引导至您应用的主屏幕时。

  • 将用户引导至相关的网络内容

    如果用户被重定向到网页内容,则该网站必须与用户预期操作相关,并且属于该品牌所有。

    例如,将触发您 GET_RESERVATION BII 的用户重定向到 google.com/travel(不属于您的应用品牌 exampledomain.com)属于违规行为。另一个违规行为示例是,将触发您 GET_CALL_HISTORY BII 的用户重定向到 exampledomain.com/payment,并要求他们进行购买。

  • 实现相关的 App Actions BII

    实现的 BII 必须与应用的内容和功能直接相关。

    例如,如果您的应用属于通讯类 Play 商店类别,则不要实现 ORDER_MENU_ITEM BII,该 BII 建议用于食品和饮料类别的应用。

  • 实现相关的自定义意图

    自定义意图 定义的查询与应用的内容和功能相关。违反该策略的潜在示例是,为运输类 Play 商店类别的应用创建意图 custom.action.intent.GET_RECIPE,并将其与关联的查询模式“显示墨西哥卷饼食谱”配对。