智慧型應用程式

透過 Connected Apps Platform,將應用程式擴充至 Gemini 和 Google 搜尋

喇叭

  • Kateryna Semenova

    開發人員關係工程師

  • Mai Lowe

    產品群經理

關於

講座簡介

透過全新的連結應用程式平台,您可以將應用程式服務直接整合至 Gemini、Google 搜尋的 AI 模式和 Android 智慧系統。本課程提供實用指南,協助您踏出第一步。我們將透過程式碼範例和實際案例研究,逐步介紹開發生命週期:建構、測試及發布第一個連結應用程式,在 AI 輔助的工作流程中觸及使用者。

完成本課程後,您將能夠:

  • 將服務與連結的應用程式平台整合。
  • 在不同的 AI 介面測試整合項目。
  • 將應用程式功能發布到使用者的 AI 工作流程。

摘要

  • 連結的應用程式平台提供單一進入點,可使用宣告式結構定義,在 Gemini 和 Google 搜尋中啟動應用程式功能。這項功能將分階段推出,首先開放美國開發人員試用。
  • 整合功能會透過遠端伺服器或本機裝置端伺服器 (經由 AppFunctions Jetpack 程式庫),使用 Model Context Protocol (MCP) 標準。遠端伺服器也可以傳回在 iframe 內轉譯的自訂 UI。
  • 確認機制會根據風險程度調整,以維護使用者信任。開發人員會將工具標示為唯讀或 destructiveHint,讓 Gemini 在動作會修改或刪除資料時,明確要求確認。
  • Gemini 開發人員模式可讓您檢查工具呼叫和公開端點的延遲時間。目前已開放美國開發人員使用。
  • Google Connected Console 會為通過核准的開發人員推出正式版。您可以設定端點、管理所選途徑的測試人員,以及將應用程式送審。

資源

Gemini Notebook

主題

  • gemini
  • 搜尋
  • connected-apps
  • mcp
  • appfunctions
  • Android

轉錄稿

簡介

  • 大家好

  • 我是 Mai,目前擔任 Gemini 連結的應用程式平台產品負責人。

  • 稍後,開發人員關係工程師 Kate 也會與大家分享。

  • 她要上台了。

  • 今天,我們很高興能與大家分享,如何將應用程式擴充至 Google 最受歡迎的代理產品:Gemini 和 Google 搜尋。

  • 我們將說明連結的應用程式如何為使用者提供實用、神奇的體驗,以及背後的原理。

  • 更棒的是,我們還會說明如何建構這類模型。

  • 現在就切入正題吧。

  • 相信許多人都注意到,應用程式生態系統發生了重大變化。

  • 使用者操作裝置、搜尋答案和完成工作的方式,不只是在演變,

  • 已徹底改變。

  • 人們不再開啟瀏覽器並四處點選。

  • 而是直接與 Gemini 等助理對話。

  • 他們會透過 Google 搜尋,以多模態方式向 Gemini 提出複雜問題,尋找答案。

  • 他們希望 Android 裝置不只能理解他們說的話,還能知道他們想完成什麼事。

  • 想想您在任何一天可能執行的工作流程。

  • 假設您請 Gemini 幫忙發想一些點子,想在特定時間和地點與朋友共度有趣的週末。

  • 現今的模型只要幾秒鐘就能處理完畢。

  • 太棒了。

  • 井然有序。

  • 接下來呢?

  • 結束。

  • 使用者遇到阻礙,只能停留在原地,只有計畫,沒有任何確認。

  • 模型知道該怎麼做,但無法實際執行。

  • 因此,你必須將與 Gemini 對話中的資訊複製並貼到其他應用程式。

  • 有時在行動裝置上,會變得很笨重。

  • 你必須記住所有內容,然後再輸入。

  • 這種認知落差和不便會完全破壞魔法。

  • 這對各位有什麼影響?

  • 這表示您有高意願的使用者需求,但他們受限於聊天泡泡,無法進入應用程式,成為高價值且高參與度的使用者。

  • 這就是為什麼連結應用程式能帶來顛覆性的改變,因為這類應用程式能協助我們在使用者所在之處與他們互動。

  • 目前,他們會花大量時間與 Gemini 等助理對話。

  • 當使用者表達出實際行動意圖時,就是他們歷程中的關鍵時刻。

  • 而不是被動瀏覽。

  • 他們有明確想立即完成的事。

  • 只要整合應用程式和這些生成式模型,Gemini 等助理就能從回答問題,進階到協助完成工作。

  • 當使用者要求優先處理待辦事項清單、想租車準備近期行程,或想購買剛找到的食譜食材時,您的應用程式不會以靜態連結的形式出現在頁面底部。

  • 你可以協助實現這項神奇功能,並立即執行該動作。

  • 我想特別強調一點,因為我知道每位開發人員和產品主管都在思考這個問題:連結應用程式並不是要將應用程式抽象化。

  • 您的品牌、商業邏輯、經過驗證的關係和自訂 UI 體驗,全都屬於您。

  • 連結應用程式是指將服務整合至代理 API 介面,讓 Google 的代理產品能順暢地將高意願使用者直接帶往您的產品。

連結的應用程式平台

  • 因此,今天我非常高興能正式宣布推出連結的應用程式平台。

  • 過去,如要透過 Google 產品觸及使用者,必須分別整合各項產品。

  • 如要使用 Android 應用程式動作或捷徑,必須自行建構。

  • 另一個搜尋整合項目。

  • 但我們希望盡可能為你提供最輕鬆、最棒的體驗。

  • 因此,我們將新手上路流程標準化,讓您能透過單一入口,在多項 Google 代理產品中推出應用程式。

  • 現在,您只要使用標準宣告式結構定義建構應用程式功能,就能在 Gemini 和 Google 搜尋這兩項重要產品中啟用。

  • 我們也即將推出更多產品。

  • 接下來,我們將說明觸及率,以及這對您的意義。

  • 您不應該為了觸及 Android、Gemini 和 Google 搜尋的使用者,而必須建構多個自訂外掛程式、管理四個不同的開發人員控制台,以及維護各種經過驗證的信號交換。

  • 有了我們的整合式平台,您只需建構及註冊工具定義一次,

  • 您只要選擇所需的 Google 產品,就能透過新版 Google Connected Console 的單一啟動按鈕,輕鬆開始使用。

  • 發布後,任何人都能在 Gemini 或 Google 搜尋中找到你的功能。

  • 無論使用者是在筆電上輸入 Gemini 提示、在網頁上搜尋一系列查詢,還是在 Android 上使用 Google 助理功能,都能在最需要的時候,直接使用您的應用程式。

  • 因此,我們將分階段開放平台,首先推出預先發布版。

  • 請放心,整個團隊正全力以赴,希望盡快讓更多人使用所有功能。

  • 在預先發布版的這個階段,我們僅開放美國開發人員使用平台。

  • 您可以填寫表單申請存取權,表單位於開發人員指南 (developers.google.com/connected-apps),如果您是 Play 開發人員,也可以在 Google Play 管理中心首頁找到。

  • 下一個問題是,實際建構這類模型有多難?

  • 如果您有 REST API 或 Android 意圖,就已經有很好的起點。

  • 我們是以開發人員熟悉的概念為基礎。

  • 我們的平台透過伺服器端和 Android 原生 MCP,與 Model Context Protocol (MCP) 標準整合。

  • 為了讓您更輕鬆地使用 Gemini,我們今天推出全新功能「開發人員模式」,美國的所有使用者現在都能使用。

  • 您可以在 Gemini 中試用應用程式,即時取得錯誤狀態、延遲時間和模型回覆的意見回饋。

  • 不久後,您將能生成自己的評估集,取得品質指標評量表和基準。

  • 一定會很棒。

  • 無論您在平台上的存取權為何,都可以隨時在開發人員模式下試用應用程式。

  • 我知道大家一定很想瞭解更多細節,Kate 稍後就會上台,在幾分鐘內為大家詳細說明。

信任、隱私權和使用者控制項

  • 首先,我想談談越來越重要的使用者信任。

  • 每當我們談到代理代表某人採取行動時,第一個問題通常是:「如何讓使用者保有控制權?」

  • 以下用幾個簡單的概念來說明。

  • 首先,確認機制會依風險程度調整。

  • 我們不會在每次工具呼叫前顯示彈出式視窗。

  • 無論是查詢資訊、查看菜單供應情況,還是追蹤訂單,都應該要流暢無阻。

  • 不過,如果動作會產生實際後果,例如編輯共用內容、完成預訂,或刪除使用者無法輕易復原的內容,模型就會在執行前明確徵求使用者同意。

  • 第二,機密資料會顯示,不會隱藏。

  • 因此,我們的產品會檢查哪些個人資訊可能會與應用程式分享。

  • 如果偵測到機密內容,我們會向使用者顯示分享的內容,讓使用者決定是否要繼續使用應用程式。

  • 第三,我們在提出要求時會具體說明。

  • 我們不會只模糊地詢問「你確定嗎?」,而是會明確指出是哪個應用程式,以及實際傳送或變更的內容。

  • 這樣一來,確認訊息就能協助使用者真正做出決定,而不是隨意點選。

  • 此外,由於使用者不希望在旅程中不斷收到確認提示,因此他們可以進一步控管系統詢問的頻率。

  • 舉例來說,在 Gemini 應用程式中,使用者可以選擇是否一律允許特定應用程式執行特定動作。

  • 對您來說,這代表您必須如實標示工具。

  • 標示唯讀、變更和刪除資料的項目。

  • 我們的產品會根據這些信號,決定何時將使用者帶入。

  • Kate 稍後會示範具體做法。

合作夥伴體驗和正式環境路徑

  • 好的,讓我們回到剛才提到的週末行程規劃。

  • 還記得當時有多困難、多零碎嗎?

  • 你為一群朋友制定了很棒的計畫,但後來遇到瓶頸,必須複製貼上內容,在應用程式之間切換。

  • Viator 和 Ticketmaster 是我們最早的兩家優秀合作夥伴,他們發現了在使用者所在位置提供服務的商機。

  • 他們決定與我們合作,打破這道牆,讓這些高意願使用者直接從 Gemini 進入應用程式。

  • 這些合作夥伴建構的連結應用程式,讓整個旅程更加順暢無阻。

  • 現在就來看看吧。

  • 使用者連結應用程式,並要求 Gemini 在 Viator 尋找 4 人日間美食之旅,以及在 Ticketmaster 尋找 4 張演唱會門票。

  • Gemini 辨識出這項功能後,會直接呼叫 Viator 和 Ticketmaster 工具,並填入正確的人數、日期和偏好設定。

  • 這兩個應用程式會擷取即時空房資訊,並在即時通訊中為使用者提供豐富的互動式體驗,使用者不必離開對話。

  • Viator 和 Ticketmaster 等合作夥伴,讓使用者不必在多個分頁間切換,就能直接完成所需操作,例如探索美食行程、挑選演唱會座位,從探索到採取行動一氣呵成。

  • 因此,靜態應用程式啟動器的時代即將結束,取而代之的是智慧、主動且具備代理功能的體驗。

  • 使用者已開始透過 Google 搜尋和 Gemini 尋求協助。

  • 我們攜手合作,就能協助他們超越答案,提供真正強大且神奇的體驗。

  • 以上就是我的分享。

  • 現在,我將交棒給 Kate,由她帶領各位瞭解如何建構連結應用程式。

  • 請上台。

  • 大家好

  • 我是開發人員關係工程師 Kate,負責協助開發人員整合連結的應用程式平台。

  • 因此,我會逐步說明如何測試、建構及部署連結應用程式。

  • 正如 Mai 先前提到的,與 Connected Apps Platform 整合的方法主要有兩種:一種是透過遠端 MCP 伺服器使用 MCP 通訊協定,另一種是透過 Android MCP,在裝置上使用 AppFunctions 程式庫建構遠端 MCP 伺服器。

  • 如要整合 Android、iOS 和網頁等平台,建議使用遠端 MCP 伺服器。

  • 另外,有些開發人員也反應,有時應用程式資料只在裝置上可用,因此偏好在本機執行。

  • 針對這類用途,建議使用 AppFunctions Jetpack 程式庫,透過 Android MCP 執行。

  • 此外,也歡迎觀看 Dan 和 Sarah 的專題演講,深入瞭解如何透過 AppFunctions 和 Android MCP 整合 Connected Apps Platform。

遠端 MCP 伺服器整合和示範

  • 接著來瞭解如何建構遠端 MCP 伺服器。

  • 為了示範實際運作情形,我們建構了官方 AndroidDevSummit 連結應用程式。

  • 以下說明這項功能的操作方式。

  • 我們切換回即時示範。

  • 舉例來說,您可以詢問「AndroidDevSummit,請提供更多 XR 研討會的資訊」。

  • Gemini 會連結到我們為這個連結應用程式建構的 MCP 伺服器。

  • 它會找出要呼叫的合適工具,並使用該工具的資料,建構容易理解的回覆。

  • 因此,它會在這裡找到第 1 天和第 2 天與 XR 相關的工作階段資訊,最後使用 Android 機器人轉譯 AndroidDevSummit 的自訂品牌小工具。

  • 因此,你可以直接在 Gemini 中與這個小工具互動。

  • 你可以查看時間表,例如切換地點,或依日期篩選。

  • 你也可以依不同主題篩選,例如搜尋 XR 相關課程,以及查看詳細資料和講者。

  • 太棒了!

  • Gemini 內建所有功能,提供自訂品牌體驗,使用者不必切換,也不必在其他應用程式中尋找其他資訊,所有功能都在同一個地方,不必互動,也不必切換或離開應用程式本身。

  • 現在切換回投影片。

MCP 伺服器開發和自訂 UI

  • 接著,我們來看看如何建構這類連結應用程式。

  • 因此,使用 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 伺服器時,請務必定義明確的操作說明,描述連結的應用程式網域和功能。

  • 連結的應用程式平台會根據這些指示,判斷何時要將工作委派給您的伺服器。

  • 此外,稍後會介紹的 Google Connected Console,也會明確驗證這些指令是否存在。

  • 第二,新增工具註解,確保安全性和控管。

    @mcp.tool(
        title="List Sessions",
    
        annotations=ToolAnnotations(
            readOnlyHint=True,
            destructiveHint=False,
        ),
    
        meta={ … },
    )
    def list_sessions( … )
    …
  • 對於 ADS 伺服器,我們有這兩個註解。

  • 模型必須知道工具何時為唯讀,或何時會修改資料。

  • 因此,如果您有任何工具可以編輯或刪除使用者資訊,請一律使用這個 destructiveHint 將其標示為可編輯或刪除作業。

  • 這樣一來,連結的應用程式平台就會知道,需要向使用者顯示確認訊息,確認他們同意完成這項動作。

  • 您也可以在 Connected Google Connected Console 中設定工具,我稍後會說明。

  • 第三,強型別結構定義和語意 docstring。

    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 與倫敦的位置。

  • 要準確呼叫工具,最關鍵的因素是結構定義必須清楚且具描述性。

  • 最後一個是 UI 資源中繼資料繫結。

    @mcp.tool(
        …
        meta={
            "ui": {
                "resourceUri": "ui://ads-mcp/summit-app",
            },
            …
        },
    )
    def list_sessions(…)
    …
  • 查看中繼資料中的 UI 定義。

  • 這項中繼資料是橋梁,可指示 Gemini 將工具輸出內容直接繫結至這裡的自訂 UI 資源。

  • 接下來要說明如何轉譯 UI。

    @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",
            )
        ])
  • 連結的應用程式平台可讓您透過 MCP 應用程式 UI,從 MCP 伺服器轉譯豐富的使用者介面。

  • 如果想充分發揮彈性,打造能展現品牌特色的自訂介面 (例如 Android 開發人員高峰會),則可公開 MCP UI 資源。

  • Gemini 則可在安全的沙箱 iframe 中算繪。

測試和驗證工作流程

  • 接著,我會逐步說明如何直接從本機電腦測試及部署連結的應用程式,並直接部署至正式環境。

  • 是啊

  • 接著來看看如何在本機開發及測試。

  • 開發期間,您可以使用第一個指令,在本機輕鬆啟動伺服器。

    ./venv/bin/python server.py
    npx @modelcontextprotocol/inspector
  • 接著,您可以使用 MCP Inspector 對伺服器進行偵錯、查看可用工具,以及與 UI 互動。

  • 這是 MCP Inspector 在 Android 開發人員高峰會的範例。

  • 因此,您可以查看工具、查看 UI,並在本機測試。

  • 第二,您需要將 MCP 伺服器部署至遠端端點,才能在 Gemini 開發人員模式中存取及驗證。

  • 您可以在任何基礎架構或雲端服務供應商託管 MCP 端點。

  • 不過,如果您偏好 Google Cloud,可以輕鬆搭配 Google Cloud CLI 使用。

  • 只要使用這個簡單的指令進行部署,即可從遠端存取應用程式。

    gcloud run deploy ads-mcp-server
  • 下一步是在 Gemini 開發人員模式中驗證公開端點。

  • 現在,讓我們切換回即時示範,我會示範如何實際使用開發模式。

  • 只要前往「設定」並點選「開發人員模式」,就能輕鬆找到開發人員模式。

  • 接著,您需要選擇要測試的連結應用程式。

  • 舉例來說,只要在這裡提供 MCP 伺服器網址,就能建立新的伺服器。

  • 我已建立一個名為 ADS MCP 的測試端點。

  • 我想測試 Gemini 的端對端運作方式。

  • 我們來問個問題。

  • 「ADS MCP,請提供更多活動資訊。」

  • 因此,Gemini 現在會呼叫 MCP 伺服器,您也可以在開發人員模式中查看正在呼叫的工具。

  • 舉例來說,如果提示是「告訴我更多關於活動的資訊」,系統就會呼叫 get_summit_info。

  • 您也可以看到成功的回應。

  • 您會看到延遲時間

  • 您也可以查看所有要求和回應詳細資料。

  • 舉例來說,我們的回應包含許多資訊。

  • 您也可以稍微放大,看看如何偵錯、需要哪些資訊,並確認所有內容都正確無誤。

  • 您也可以複製連結,方便與團隊成員分享。

  • 您也可以匯出整個事件記錄,並視需要分享。

  • 我也很喜歡可以探索其他可用工具的功能,在開發人員模式中,您可以看到取得高峰會資訊、列出工作階段和其他工具。

  • 您也可以變更環境,模擬不同的使用者情境。

  • 舉例來說,您可以變更日期時間或語言等偏好設定,也可以設定驗證。

  • 以上就是開發模式。

  • 您現在就能開始建構 MCP 伺服器,並透過開發人員模式進行測試。

  • 現在所有人都能使用。

  • 現在切換回投影片。

  • 好的。

  • 假設您已使用開發人員模式進行測試,一切看起來都很順利,接下來該怎麼做?

  • 如要使用我們的平台,請先填寫這份意願調查表,申請存取權。

  • 您也可以在說明文件和 Google Connected Console 中找到這項資訊。

準備正式環境和資源

  • 申請獲准後,您就能存取 Google Connected Console,準備推出正式版應用程式。

  • 只要在控制台中完成幾個步驟,就能準備好應用程式。

  • 首先,您需要建立新的連結應用程式,並提供名稱。

  • 接著,只要選取功能和類別即可。

  • 舉例來說,我們在這個範例中選取了「效率提升」,然後按一下「建立」。

  • 接著,在應用程式詳細資料下方,您需要提供公開資料,例如顯示名稱、圖示,以及面向使用者的說明、應用程式功能、限制、提示範例和其他資料。

  • 設定 MCP 伺服器時,您需要提供端點。

  • 您必須驗證這個網域屬於您,也可以設定同步工具的憑證。

  • 請注意,Google 控制台會擷取 MCP 結構定義的快照,因此每當您變更結構定義時,都必須返回並重新部署。

  • 接著,您就可以設定應用程式供應情形。

  • 您可以選擇應用程式適用的區域、語言、平台和其他個別工具設定。

  • 接著,只要按下「推送變更」,並提交給 Gemini 階段審查即可。

  • 接著,您也可以在「管理測試人員」下方新增測試帳戶。

  • 並立即在網頁、行動裝置或先前選取的任何介面 (例如 Gemini 或 Google 搜尋) 上,使用這個測試帳戶進行即時測試,然後提交最終預覽。

  • 應用程式準備就緒後,只要按下提交按鈕,就能在全球或指定區域推出正式版。

  • 就是這麼簡單!

  • 無論是透過遠端 MCP 伺服器或 Android MCP 公開應用程式功能,我們都很期待看到您使用連結的應用程式平台建構的成果。

  • 我們很樂意協助您打造這項出色的整合功能。

  • 只要按照這份文件和範例操作,即可使用這個條碼。

  • 非常感謝各位的參與!

  • 祝您編寫程式一切順利!

程式碼

程式碼片段

「MCP 伺服器開發和自訂 UI」影片 14:56 處的 Python 程式碼片段
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 伺服器開發和自訂 UI」影片 15:22 處的 Python 程式碼片段
@mcp.tool(
    title="List Sessions",

    annotations=ToolAnnotations(
        readOnlyHint=True,
        destructiveHint=False,
    ),

    meta={ … },
)
def list_sessions( … )
…
「MCP 伺服器開發和自訂 UI」影片 16:08 處的 Python 程式碼片段
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 伺服器開發和自訂 UI」影片 16:32 處的 Python 程式碼片段
@mcp.tool(
    …
    meta={
        "ui": {
            "resourceUri": "ui://ads-mcp/summit-app",
        },
        …
    },
)
def list_sessions(…)
…
「MCP 伺服器開發和自訂 UI」影片 16:49 處的 Python 程式碼片段
@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",
        )
    ])
「測試和驗證工作流程」影片 17:29 處的殼層程式碼片段
./venv/bin/python server.py
npx @modelcontextprotocol/inspector
「測試和驗證工作流程」影片 18:16 處的殼層程式碼片段
gcloud run deploy ads-mcp-server