组合产品经理
借助全新的 Connected Apps Platform,您可以将应用的服务直接集成到 Gemini、Google 搜索中的 AI 模式以及 Android 智能系统中。本课程提供了实用的入门指南。我们将通过代码示例和实际案例研究,带您了解整个开发生命周期:构建、测试和发布您的首个关联应用,让用户在 AI 赋能的工作流程中轻松使用。
学完本课程后,您将能够:
destructiveHint,以便 Gemini 在执行修改或删除数据的操作时请求明确确认。转写文稿
大家好!
我是 Mai,是 Gemini 关联应用平台的产品主管。
稍后,我们的 DevRel 工程师 Kate 也会为大家带来精彩分享。
她要上来了。
今天,我们非常高兴能与大家探讨如何将应用扩展到 Google 最受欢迎的一些智能体产品中,包括 Gemini 和 Google 搜索。
我们将向您介绍关联的应用如何为用户提供帮助和神奇体验,以及背后的原因。
更棒的是,我们还会向您展示如何构建一个这样的应用。
下面我们来深入探讨
我知道,我们很多人都看到了应用生态系统中正在发生一些真正重大的变化。
用户使用设备、搜索答案和完成任务的方式不仅在不断演变,
它已经发生了根本性的转变。
人们不再打开浏览器并四处点击。
而是直接与 Gemini 等助理对话。
他们会向 Gemini 提出复杂的问题,在 Google 搜索中以多模态方式搜索答案。
他们希望 Android 设备不仅能理解他们说的话,还能知道他们想做什么。
思考一下您在任何一天都可以执行的一些工作流。
假设您让 Gemini 帮您构思一些方案,以便在特定时间与朋友在特定地点度过一个愉快的周末。
现在的模型可以在几秒钟内处理该计划。
太棒了。
井然有序。
然后呢?
结束。
用户遇到了障碍,只能停留在那里,只有一个计划,没有任何确认。
模型知道该怎么做,但没有手来执行。
因此,你必须将与 Gemini 对话中的信息复制并粘贴到其他应用中。
有时,如果您使用的是移动设备,操作会变得非常繁琐。
然后,您必须记住所有内容,并在之后输入。
这种认知上的跳跃和阻碍会完全破坏魔法。
这对大家来说意味着什么?
这意味着,您有高意向的用户需求,但这些需求被困在聊天气泡中,无法转化为应用内丰富且富有吸引力的用户互动。
这就是为什么关联的应用具有颠覆性,因为它们能帮助我们精准触达用户。
目前,他们会花大量时间与 Gemini 等助理对话。
当用户表达出采取行动的真实意图时,这就是他们历程中至关重要的时刻。
他们不是在被动浏览。
他们有明确的目标,想要立即完成。
通过实现应用与这些生成模型的集成,Gemini 等助理不仅能回答问题,还能完成各种任务。
当用户要求提供按优先级排序的待办事项清单、想要为即将开始的行程租车,或者想要购买刚找到的食谱所需的食材时,您的应用不会以静态链接的形式出现在页面底部。
您可以帮助实现这一神奇体验,并当场执行该操作。
我想特别强调一点,因为我知道每位开发者和产品负责人都在思考这个问题:关联的应用并不是要将您的应用抽象化。
您的品牌、您的业务逻辑、您的身份验证关系以及您的自定义界面体验,这些都属于您。
关联的应用是指将您的服务集成到智能体 API 接口中,以便 Google 的智能体产品能够顺畅地将高意向用户直接引导至您的产品。
因此,今天,就在此时此刻,我非常激动地正式宣布推出我们的 Connected Apps Platform。
过去,要想在各种 Google 产品中触达用户,需要针对每种产品进行不同的集成。
如果您想要一个 Android 应用有关的操作或快捷方式,则必须构建一个。
搜索集成,另一个。
但我们希望尽可能为您提供轻松、优质的体验。
因此,我们对新手入门流程进行了标准化,为您提供一个统一的入口点,让您能够跨多个 Google 智能体产品发布应用。
现在,您只需使用标准声明式架构构建一次应用功能,即可在 Gemini 和 Google 搜索这两款关键产品中同时启用该功能。
更多产品即将推出,敬请期待。
下面,我们来谈谈这种覆盖面以及它对您的意义。
您不应该仅仅为了在 Android、Gemini 和 Google 搜索中触达 Google 用户,就必须构建多个自定义插件、管理四个不同的开发者控制台,以及维护各种经过身份验证的握手。
借助我们的统一平台,您只需构建和注册一次工具定义。
您只需选择所需的 Google 产品,然后点击新版 Google 一站式管理中心内的启动按钮即可。
发布后,任何人在使用 Gemini 或 Google 搜索时都可以发现你的功能。
无论用户是在笔记本电脑上向 Gemini 输入内容、在网页版 Google 搜索中提出一系列查询,还是在 Android 设备上使用 Google 助理功能,他们都可以在最需要的时候、在他们所在的位置选择使用您的应用。
因此,我们将分阶段开放我们的平台,首先是预览版。
我向大家保证,整个团队正在全力以赴,争取尽快让尽可能多的用户用上所有功能。
在此预览阶段,我们仅向美国开发者开放该平台。
您可以通过表单注册来获取访问权限,该表单可在我们的开发者指南 (developers.google.com/connected-apps) 中找到。如果您是 Play 开发者,也可以在 Google Play 管理中心的首页上找到该表单。
那么,下一个问题是,构建一个这样的模型到底有多难?
如果您有 REST API 或 Android intent,那么您已经有了一个很好的起点。
我们基于开发者熟悉的概念进行构建。
我们的平台通过基于服务器的 MCP 和 Android 原生 MCP 与 Model Context Protocol(MCP 标准)集成。
为了让您获得更出色的体验,我们今天在 Gemini 中推出了一项全新功能,名为“开发者模式”,美国的所有用户现在都可以使用。
这样,您就可以在 Gemini 中试用您的应用,并获得有关错误状态、延迟时间和模型回答的实时反馈。
很快,您将能够生成自己的评估集,获得质量指标评分卡和基准。
一定会非常精彩。
无论您对该平台拥有何种访问权限,都可以随时在开发者模式下试用您的应用。
我相信您一定迫不及待地想了解更多细节,Kate 很快就会上台,在几分钟内为您详细介绍。
首先,我需要和大家聊聊一个越来越重要的话题:用户信任。
每当我们谈到智能体代表某人采取行动时,第一个问题往往是:“我们如何让用户保持控制权?”
下面,我们通过几个简单的概念来了解一下。
首先,我们的确认机制会根据风险级别进行调整。
我们不会在每次工具调用前都显示弹出式窗口。
查找信息、查看菜单、跟踪订单,这些操作都应该顺畅无阻。
但如果操作会产生实际后果,例如修改共享内容、完成预订或删除用户无法轻易找回的内容,模型就会在执行操作前明确询问用户是否同意。
其次,敏感数据会显示,而不是隐藏。
因此,我们的产品会检查哪些个人信息可能会与您的应用分享。
如果检测到敏感信息,我们会向用户确切显示正在分享的内容,以便用户在当下决定是否继续使用您的应用。
第三,我们在询问时会具体说明。
我们不会发出模糊的“您确定吗?”提示,而是会明确指出是哪个应用以及实际发送或更改的内容。
这样,确认对话框就能帮助用户真正做出决定,而不仅仅是他们随意点击的内容。
而且,由于没有人希望在旅程中频繁收到确认提示,用户将能够更好地控制系统询问的频率。
例如,在 Gemini 应用中,用户可以针对每个应用甚至每项操作选择是否始终允许执行该操作。
对您而言,这意味着您需要如实标记您的工具。
标记哪些是只读数据、哪些是更改数据、哪些是删除数据。
这些信号有助于我们的产品决定何时让用户参与进来。
稍后,Kate 将向您展示具体的操作方法。
好了,让我们回到刚才讨论的周末行程,即规划部分。
还记得当时有多难、多零散吗?
你为一群朋友制定了很棒的计划,但随后遇到了障碍,你不得不复制粘贴内容,在应用之间来回切换。
Viator 和 Ticketmaster 是我们早期合作的两个优秀伙伴,他们看到了在用户所在位置满足其需求的真正机遇。
他们决定与我们合作,打破这道壁垒,让这些高意向用户能够直接从 Gemini 内部进入他们的应用。
得益于这些合作伙伴打造的关联应用,整个旅程变得更加顺畅、无缝。
我们来看一下。
用户关联了这些应用,并让 Gemini 在 Viator 上查找适合 4 人参加的日间美食之旅,以及在 Ticketmaster 上查找一些音乐会门票。
Gemini 能够识别该功能,并直接调用 Viator 和 Ticketmaster 工具,同时自动填充正确的团队人数、日期和偏好设置。
无需离开对话,两个应用都能实时获取可用性信息,并在聊天界面中为用户呈现丰富的互动体验。
Viator 和 Ticketmaster 等合作伙伴让用户在发现需求时就能立即采取行动,探索美食之旅的停靠点、挑选演唱会座位,从发现到行动无缝衔接,避免了用户陷入死胡同和在多个标签页之间来回切换的困扰。
所以,静态应用启动器的时代即将过去,取而代之的是智能、主动、代理化的体验。
您的用户已经在使用 Google 搜索和 Gemini 寻求帮助。
我们可以携手帮助他们超越简单的问答,提供真正强大且神奇的体验。
我的分享到此结束。
现在,我将把时间交给 Kate,她将详细介绍如何构建关联的应用。
请上台。
大家好!
我是 Kate,一名开发技术推广工程师,负责帮助像您这样的开发者与 Connected Apps Platform 集成。
因此,我将引导您完成关联应用的测试、构建和部署。
正如 Mai 之前提到的,与 Connected Apps Platform 集成主要有两种方法:一种是通过远程 MCP 服务器,使用 MCP 协议;另一种是通过 Android MCP,使用 AppFunctions 库在设备上构建远程 MCP 服务器。
如果您想在 Android、iOS 和 Web 等平台上进行集成,我们建议您使用远程 MCP 服务器。
此外,还有一些开发者向我们反馈,当应用数据仅在设备上可用时,他们有时更倾向于在本地执行。
对于此用例,我们建议使用 AppFunctions Jetpack 库来使用 Android MCP。
此外,请观看 Dan 和 Sarah 的专题演讲,深入了解如何通过 AppFunctions 和 Android MCP 与 Connected Apps Platform 集成。
现在,我们来了解一下如何构建远程 MCP 服务器。
为了向您展示实际运作方式,我们构建了官方 AndroidDevSummit 关联应用。
下面我来演示一下它的运作方式。
我们切换回现场演示。
想象一下,您可以这样问:“AndroidDevSummit,请详细介绍一下 XR 专题演讲。”
现在,Gemini 会连接到我们为此关联应用构建的 MCP 服务器。
它会找到要调用的合适工具,并使用其数据来构建用户友好的回答。
因此,它会在这里找到第 1 天和第 2 天与 XR 相关的会议信息,最后使用 Android 机器人呈现 AndroidDevSummit 的自定义品牌微件。
因此,你可以直接在 Gemini 中与此微件互动。
您可以查看日程,例如,您可以切换地点,也可以按日期过滤。
您还可以按不同主题进行过滤,例如,如果您想搜索 XR 相关会议,还可以查看详细信息和演讲者。
所以,太棒了!
Gemini 内部的一切,您的自定义品牌体验,用户无需切换,用户无需在其他应用中查找其他信息,一切都在一个地方,无需交互,无需任何切换或离开应用本身。
现在,我们切换回幻灯片。
接下来,我们来探索如何构建这款互联应用。
因此,使用 FastMCP 库启动 MCP 服务器非常简单,但有四个非常重要的最佳实践需要遵循。
首先,您需要提供明确的服务器指令。
from mcp.server.fastmcp import FastMCP
mcp = FastMCP(
name="ADS-MCP",
instructions=(
"A Model Context Protocol server providing event "
"overview, schedules, sessions, speakers, and "
"sandbox demos for the Android Developer Summit "
),
)初始化 MCP 服务器时,请务必定义清晰的指令,描述关联的应用网域和功能。
Connected Apps Platform 会根据这些指令来确定何时将任务委托给你的服务器。
此外,Google 一站式管理中心(我稍后会向您展示)也会明确验证这些指令是否存在。
其次,添加工具注释,以确保安全性和控制力。
@mcp.tool(
title="List Sessions",
annotations=ToolAnnotations(
readOnlyHint=True,
destructiveHint=False,
),
meta={ … },
)
def list_sessions( … )
…对于 ADS 服务器,我们有以下两个注解。
让模型知道您的工具何时是只读的或何时会修改数据,这一点非常重要。
因此,如果您有任何用于修改或删除用户信息的操作,请务必使用此 destructiveHint 将其标记为可执行修改或删除操作。
这样,Connected Apps Platform 就会知道它需要向用户显示一条确认消息,询问用户是否同意完成此操作。
您还可以在 Google 一站式管理中心内配置工具,我稍后会向您展示。
第三,强类型架构和语义文档字符串。
def list_sessions(
track: Optional[str] = None,
location: Optional[str] = None,
) -> List[Dict[str, Any]]:
"""Lists all sessions, optionally filtered by track
(e.g. 'Tools and performance', 'Apps Foundation',
'AI experiences', 'Android XR') or location
(e.g. 'MTV', 'Mountain View', 'London', 'LON').
"""
…将参数文档字符串视为提示的一部分。
在此 list_sessions 工具中,我们明确记录了预期值,例如工具和性能,或 MTV 与伦敦的位置。
影响工具调用准确性的最大因素是清晰且具有描述性的架构。
最后一个是界面资源元数据绑定。
@mcp.tool(
…
meta={
"ui": {
"resourceUri": "ui://ads-mcp/summit-app",
},
…
},
)
def list_sessions(…)
…查看 meta 中的界面定义。
此元数据是桥梁,可指示 Gemini 将工具输出直接绑定到我们的自定义界面资源。
这就引出了界面渲染。
@mcp.resource(
"ui://ads-mcp/summit-app",
name="summit-app",
mime_type="text/html",
)
def get_summit_ui() -> ResourceResult:
"""Renders the interactive ADS 2026 dashboard."""
return ResourceResult([
ResourceContent(
_build_summit_ui_html(),
mime_type="text/html",
)
])借助 Connected Apps Platform,您可以通过 MCP 应用界面从 MCP 服务器呈现丰富的界面。
如果您希望灵活打造彰显品牌特色的自定义界面(例如我们的 Android 开发者峰会),可以公开 MCP 界面资源。
Gemini 可以在安全的沙盒化 iframe 中呈现。
接下来,我将引导您在本地机器上测试和部署关联的应用,并将其直接发布到生产环境。
没错
接下来,我们来看看如何在本地进行开发和测试。
在开发期间,您可以使用第一个命令轻松地在本地启动服务器。
./venv/bin/python server.py
npx @modelcontextprotocol/inspector然后,您可以使用 MCP Inspector 调试服务器、查看可用工具,并与界面进行交互。
这只是 MCP Inspector 在 Android 开发者峰会上的一个示例。
这样,您就可以看到工具和界面,并在本地进行测试。
其次,您需要将 MCP 服务器部署到某个远程端点,以便在 Gemini 开发者模式下访问并验证它。
您可以将 MCP 端点托管在任何基础设施或任何云服务提供商上。
但如果您更喜欢 Google Cloud,则可以非常简单地通过 Google Cloud CLI 使用它。
只需使用这个简单的命令进行部署,您的应用就可以远程访问了。
gcloud run deploy ads-mcp-server下一步是在 Gemini 开发者模式中验证您的公共端点。
现在,让我们切换回实时演示,我将向您展示如何在实践中使用开发者模式。
因此,只需前往“设置”并点击“开发者模式”,即可轻松找到开发者模式。
然后,您需要选择要测试的关联应用。
例如,您只需在此处提供 MCP 服务器网址,即可创建一个新服务器。
我已经创建了一个用于测试的 MCP,名为 ADS MCP,并配置了我的测试端点。
我只是想测试一下它与 Gemini 的端到端集成效果。
我们来问点问题。
“ADS MCP,告诉我更多关于这次活动的信息。”
现在,Gemini 会调用我们的 MCP 服务器,您还可以在开发者模式下查看正在调用的工具。
例如,对于这个特定的提示“Tell me more about the event”(详细介绍一下该活动),系统调用了 get_summit_info。
您还可以看到成功的响应。
您还可以看到延迟时间。
您还可以查看所有请求和响应详情。
例如,对于我们的响应,我们有很多信息。
您还可以稍微放大一下,看看如何调试您可能需要的信息,并探索一切是否准确。
您还可以复制该链接,以便与团队成员分享,非常方便。
您还可以导出整个事件日志,并根据需要进行分享。
我还喜欢的一点是,您还可以探索其他可用工具,因此在开发者模式下,您可以看到获取峰会信息、列出会议和其他工具。
您还可以更改环境,以模拟不同的用户使用场景。
例如,您可以更改白天时间或语言等偏好设置,还可以设置身份验证。
以上就是开发者模式。
没错,从今天起,您就可以开始构建 MCP 服务器,并使用开发者模式进行测试。
现在,所有人都可以使用。
现在,我们切换回幻灯片。
好的。
假设您已经使用开发者模式进行了测试,一切看起来都很棒,接下来该怎么做?
您需要注册才能访问我们的平台,并且需要先填写此意向调查表。
您也可以在我们的文档和 Google 一站式管理中心内找到这些信息。
提交内容获得批准后,您将获得 Google 一站式管理中心的访问权限,并可在其中为应用发布正式版做好准备。
在管理中心内,只需几个步骤即可准备好您的应用。
首先,您需要在其中创建一个新的关联应用,并提供一个名称。
然后,您只需选择功能和类别。
例如,在本示例中,我们选择了“效率”,然后点击“创建”。
接下来,在应用详细信息下,您需要提供公开数据,例如显示名称、图标,以及面向用户的说明、应用功能、限制、示例提示和其他数据。
然后,在配置 MCP 服务器时,您需要提供端点。
您需要验证此网域归您所有,还可以配置同步工具的凭据。
请注意,Google 控制台会为您的 MCP 架构创建快照,因此,每当您更改架构时,都需要返回并重新部署。
之后,您只需配置应用的分发范围即可。
您可以选择应用应在哪些地区提供、支持哪些语言、在哪些平台上架,以及其他个别工具配置。
然后,您只需点击“推送更改”,并提交以供 Gemini 阶段审核。
然后,您还可以在“管理测试人员”下添加测试账号。
并立即使用此测试账号在网页、移动设备或您之前选择的任何平台(例如 Gemini 或 Google 搜索)上进行实时测试,然后提交以进行最终预览。
应用准备就绪后,您只需点击提交按钮,即可面向全球用户或所选地区的用户发布正式版。
就是这么简单!
无论您是通过远程 MCP 服务器还是通过 Android MCP 公开应用功能,我们都非常期待看到您使用 Connected Apps Platform 构建出色的应用。
我们很乐意为您提供支持,帮助您打造出色的集成。
只需按照本文档和我们的示例操作即可,您可以使用此条形码获取这些示例。
非常感谢各位今天的参与!
祝大家编码顺利!
from mcp.server.fastmcp import FastMCP
mcp = FastMCP(
name="ADS-MCP",
instructions=(
"A Model Context Protocol server providing event "
"overview, schedules, sessions, speakers, and "
"sandbox demos for the Android Developer Summit "
),
)@mcp.tool(
title="List Sessions",
annotations=ToolAnnotations(
readOnlyHint=True,
destructiveHint=False,
),
meta={ … },
)
def list_sessions( … )
…def list_sessions(
track: Optional[str] = None,
location: Optional[str] = None,
) -> List[Dict[str, Any]]:
"""Lists all sessions, optionally filtered by track
(e.g. 'Tools and performance', 'Apps Foundation',
'AI experiences', 'Android XR') or location
(e.g. 'MTV', 'Mountain View', 'London', 'LON').
"""
…@mcp.tool(
…
meta={
"ui": {
"resourceUri": "ui://ads-mcp/summit-app",
},
…
},
)
def list_sessions(…)
…@mcp.resource(
"ui://ads-mcp/summit-app",
name="summit-app",
mime_type="text/html",
)
def get_summit_ui() -> ResourceResult:
"""Renders the interactive ADS 2026 dashboard."""
return ResourceResult([
ResourceContent(
_build_summit_ui_html(),
mime_type="text/html",
)
])./venv/bin/python server.py
npx @modelcontextprotocol/inspectorgcloud run deploy ads-mcp-server