Extensions.yaml 的參考資料

擴充功能的規格檔案 (extension.yaml) 包含擴充功能的結構描述資料,並宣告擴充功能建立的資源、擴充功能所需的 API 和存取權限,以及定義擴充功能提供的任何使用者設定參數。

本頁的表格說明了 extension.yaml 檔案可用的欄位。

基本和身分資訊

name: your-extension-name
version: 1.0.0         # Semantic versioning (semver)
specVersion: v1beta    # Always "v1beta"
license: Apache-2.0    # Always "Apache-2.0" (required to publish on extensions.dev)
billingRequired: true  # Always "true"

displayName: Your extension name
description: >-
  Description of the extension. (One or two
  sentences.)
icon: icon.png
tags: [tag, anothertag]

sourceUrl: https://github.com/your-org/your-repo   # GitHub repo URL
releaseNotesUrl: https://github.com/your-org/your-repo/blob/main/CHANGELOG.md

author:
  authorName: Your Company
  email: extensions@example.com
  url: https://example.com/
contributors:
  - authorName: Your Name
  - authorName: Another Contributor
    email: colleague@example.net
    url: https://github.com/their-org/
基本欄位
name
字串
(必要)

擴充功能的 ID。

只能由小寫英文字母、數字和破折號組成,長度上限為 40 個半形字元。

注意:這個值會用來產生擴充功能的執行個體 ID (之後會用來產生擴充功能的服務帳戶和擴充功能專屬資源名稱)。

version
字串
(必填)

擴充功能的版本。

必須遵循 semver 版本編號規則 (例如 1.2.0)。

specVersion
字串
(必要)

Firebase Extensions 規格的版本。

目前的值:v1beta

license
string
(選填)

擴充功能的授權。

擴充功能必須使用 Apache-2.0 授權。

billingRequired
布林值
(選用)

擴充功能使用的服務是否需要付費層級的 Firebase 帳單帳戶。

一律設為 true

displayName
string
(選填)

擴充功能的友善顯示名稱 (3 到 5 個字詞)。

長度上限為 40 個半形字元。

description
string
(選填)
簡要說明擴充功能執行的工作 (約 1 句話)。
icon
字串
(選用)

extensions.devFirebase 主控台上用於擴充功能圖示的檔案。

這個檔案必須是正方形 PNG,大小介於 512x512 和 1024x1024 像素之間。 將檔案放在與 extension.yaml 相同的目錄中;您無法指定子目錄。

設計擴充功能圖示時,請遵守下列規範:

  • 選取適合品牌的背景和圖片顏色。
  • 僅使用 2 種顏色,讓圖示顏色保持精簡。多種顏色可能會讓圖示看起來過於擁擠。
  • 基於同樣的理由,請勿在圖示中使用漸層效果。漸層在小尺寸下難以辨識,且會讓圖示看起來複雜。
  • 使用簡單且獨特的圖像,傳達擴充功能的功能。
  • 如果貴公司建構多個擴充功能,請勿使用標誌做為圖示。使用者很難分辨不同的擴充功能。
  • 將圖片設為粗體。請勿使用精緻或複雜的圖像,因為這類圖像在較小的尺寸下無法正確顯示。
  • 請勿加入說明擴充功能功能的字詞。文字縮小後,通常會難以辨識。
tags
字串清單
(選用)
協助使用者找到擴充功能的標記。以下標記會對應至 Extensions Hub 中的類別:marketingmessagingpaymentssearchshippingsocialutilitiesai
sourceUrl
字串
(選用)
可存取擴充功能目錄的公開網址。
releaseNotesUrl
字串
(選用)
可存取擴充功能版本資訊的公開網址。
author
一個作者物件
(選用)

擴充功能的主要作者和聯絡窗口。

author:
  authorName: Your Company
  email: extensions@example.com
  url: https://example.com/
作者欄位
authorName
字串
(必要)

作者的名稱。

可以是個人、公司或機構等。

email
字串
(選填)
作者的電子郵件地址。
url
字串
(選填)
可存取作者資訊的公開網址。
contributors
作者物件清單
(選用)

擴充功能的其他作者。

contributors:
  - authorName: Your Name
  - authorName: Another Contributor
    email: colleague@example.net
    url: https://github.com/their-org/
作者欄位
authorName
字串
(必要)

作者的名稱。

可以是個人、公司或機構等。

email
字串
(選填)
作者的電子郵件地址。
url
字串
(選填)
可存取作者資訊的公開網址。

Firebase 和 Google Cloud API

這些欄位會指定擴充功能使用的 Firebase 和 Google API。使用者安裝擴充功能時,可選擇在專案中自動啟用這些 API。

apis:
  - apiName: apiname.googleapis.com
    reason: Explanation of why the extension uses this API
  - apiName: anotherapiname.googleapis.com
    reason: Explanation of why the extension uses this API
API 欄位
apiName
字串
(必要)

Google API 名稱

必須與 Google Cloud API 程式庫 中各個 API 總覽頁面 (示例) 所列的「Service name」欄位相符

reason
字串
(必要)
簡要說明擴充功能為何需要使用這個 API

IAM 角色

這些欄位會指定擴充功能所需的 Cloud IAM 角色。為擴充功能配置的服務帳戶會取得這些角色。

您只能指定其中一種支援角色

roles:
  - role: product.role
    reason: Explanation of why the extension needs this level of access
  - role: anotherproduct.role
    resource: projects/${project_id}/resource_type/*
    reason: Explanation of why the extension needs this level of access
角色欄位
role
字串
(必填)

擴充功能運作所需的 IAM 角色名稱

必須是支援的角色之一

reason
字串
(必要)
簡要說明擴充功能為何需要由此角色授予的存取權
resource
string
(選填)

將角色的範圍限制在這項資源。

如果省略此屬性,系統會預設為 projects/${project_id}。請參閱「縮小角色範圍」。

外部服務

這些欄位會指定擴充功能使用的非 Firebase 和非 Google 服務 (通常是 REST API)。Firebase Extensions 平台不提供任何自動啟用或停用這些服務的授權方式。

externalServices:
  - name: Example API
    pricingUri: https://developers.example.com/pricing
  - name: Another Example API
    pricingUri: https://developers.example.com/pricing
外部服務欄位
name
字串
(必要)
讓擴充功能運作所需的外部服務名稱
pricingUri
字串
(必要)
服務定價資訊的 URI

使用者可設定的參數

這些欄位定義了擴充功能可供使用者設定的參數。

params:
  - param: PARAM_ID
    label: Short description of the parameter
    description: >-
      What do you want to set PARAM_ID to?
      This is a longer description of the parameter, often phrased as a prompt
      to the user.
  - param: ANOTHER_PARAM_ID
    label: Short description of the parameter
    description: >
      What do you want to set ANOTHER_PARAM_ID to?
      This is a longer description of the parameter.
    example: example-input
    validationRegex: "^[a-zA-Z][a-zA-Z-]*[a-zA-Z]?$"
    validationErrorMessage:
      Must be a hyphen-delimited string of alphabetic characters
    default: default-value
    required: false
    immutable: true
參數欄位
param
字串
(必要)
參數名稱。這個名稱可用來在程式碼中參照參數值。
label
字串
(必填)
參數的簡短說明。當系統提示使用者輸入參數值時,會向使用者顯示這項資訊。
description
字串
(選用)

參數的詳細說明。當系統提示使用者輸入參數值時,會向使用者顯示這項資訊。

支援 Markdown。

example
字串
(選用)
參數值範例。
default
string
(選填)
如果使用者將參數值留空,參數的預設值。
validationRegex
string
(選填)
用於驗證使用者設定的參數值的規則運算式。Google RE2 語法
validationErrorMessage
string
(選填)
如果規則運算式驗證失敗,系統會顯示這項錯誤訊息。
required
boolean
(選用)
定義使用者在系統提示輸入參數值時,是否可以提交空字串。預設值為 true
immutable
布林值
(選用)

定義使用者在安裝後是否可以變更參數值 (例如使用者重新設定擴充功能時)。預設值為 false

注意:如果要為已部署的擴充功能函式定義「location」參數,請將這個欄位設為 true

type
string
(選填)
參數類型。特殊參數類型可能會有額外規定或不同的 UI 呈現方式。請參閱下列各節。

可選取和多選參數

「可選取」和「可選取」參數會提示使用者從預先定義的選項清單中選擇。

params:
  - param: PARAM_ID
    label: Short description of the parameter
    description: >-
      Do you want to enable the option?
    type: select
    options:
      - label: Yes
        value: true
      - label: No
        value: false
  - param: ANOTHER_PARAM_ID
    label: Short description of the parameter
    description: >-
      Which options do you want to enable?
    type: multiselect
    options:
      - value: red
      - value: green
      - value: blue
多項選擇參數欄位
type
字串

selectmultiselect

指定參數可從一組預先定義的選項中選取一個值 (select) 或多個值 (multiselect)

options
選項清單
(必填)

使用者可選擇的選項

選項欄位
value
字串
(必填)
使用者可選擇的其中一個值。這是在程式碼中讀取參數值時所取得的值。
label
字串
(選填)
可選選項的簡短說明。如果省略,則預設為 value

可選取的資源參數

可選取的資源參數會提示使用者從專案中選取資源 (資料庫執行個體、儲存空間值區等)。

params:
  - param: PARAM_ID
    label: Short description of the parameter
    description: >-
      Which resource do you want to use?
    type: selectresource
    resourceType: product.googleapis.com/ResourceType
資源參數欄位
type
字串

selectresource

指定參數代表專案資源

resourceType
字串
(必填)

系統要提示使用者選取的資源類型。

有效值:

  • storage.googleapis.com/Bucket
  • firestore.googleapis.com/Database
  • firebasedatabase.googleapis.com/DatabaseInstance

不過,目前只有 Cloud Storage 儲存桶有選取 UI (其他資源類型會以自由格式文字輸入欄位呈現)。

密鑰參數

使用者提供的密鑰值 (例如 API 金鑰) 會以不同方式處理:

  • 密鑰值會使用 Cloud Secret Manager 儲存。只有授權用戶端 (例如擴充功能已安裝的執行個體) 才能存取這些值。
  • 當系統提示使用者提供這些值時,系統不會顯示使用者輸入的內容。
params:
  - param: PARAM_ID
    label: Short description of the parameter
    description: >-
      What is the secret value?
    type: secret
機密參數欄位
type
字串

secret

指定參數為密鑰值

Cloud 函式資源

這些欄位會宣告擴充功能中包含的 Cloud Functions。資源宣告語法在第 1 代和第 2 代函式之間略有不同,但這兩種函式可以在擴充功能中共存。

第 1 代 Cloud Functions

resources:
  - name: functionName
    type: firebaseextensions.v1beta.function
    description: >-
      Description of what the function does. (One or two
      sentences.)
    properties:
      runtime: runtime-version
      eventTrigger:
        eventType: google.product.event
        resource: projects/_/resource/specifier
資源欄位
name
字串
(必填)

匯出函式的易記名稱。

如果您未指定 entryPoint 屬性 (請參閱下文),這個值必須與函式來源程式碼中的函式名稱相符。

部署函式的最終名稱格式如下:ext-extension-instance-id-name

type
字串
(必填)
第 1 代函式資源: firebaseextensions.v1beta.function
description
字串
(必要)

簡短說明函式會對擴充功能執行的工作。

properties
(必要)

第 1 代 Cloud Functions 資源。以下列出最重要的屬性,但您可以在 Cloud Functions 參考資料中找到完整清單。

資源
location
(選用)

要部署函式的地點。預設值為 us-central1

entryPoint
(選用)
擴充功能原始碼中匯出函式的名稱,擴充功能應尋找。預設值為上述的 name 值。
sourceDirectory
(選用)

根目錄中含有 package.json 的目錄。函式原始碼的檔案必須位於這個目錄中。預設值為 functions

注意:package.jsonmain 欄位會指定函式來源程式碼 (例如 index.js) 的檔案。

timeout
(選用)

函式的執行時間上限。

  • 預設:60s
  • 最大值:540s
availableMemoryMb
(選用)

函式可用的記憶體量 (以 MB 為單位)。

  • 預設:256
  • 有效值:12825651210242048
runtime
(建議)

函式的執行階段環境。

  • 預設為 Cloud Functions 目前支援的 Node.js 版本中最新的版本。
  • 有效值:nodejs14nodejs16nodejs18
httpsTrigger

eventTrigger

scheduleTrigger

taskQueueTrigger
(必須使用其中一種函式觸發條件類型)
如要進一步瞭解各種觸發條件類型,請參閱「為擴充功能編寫 Cloud Functions」。

第 2 代 Cloud Functions

resources:
  - name: functionName
    type: firebaseextensions.v1beta.v2function
    description: >-
      Description of what the function does. (One or two
      sentences.)
    properties:
      buildConfig:
        runtime: nodejs16
      serviceConfig:
        availableMemory: 512M
      eventTrigger:
        eventType: google.firebase.firebasealerts.alerts.v1.published
        triggerRegion: global
        eventFilters:
          - attribute: alerttype
            value: crashlytics.newFatalIssue

資源欄位
name
字串
(必填)

匯出函式的易記名稱。

如果您未指定 entryPoint 屬性 (請參閱下文),這個值必須與函式來源程式碼中的函式名稱相符。

部署函式的最終名稱格式如下:ext-extension-instance-id-name

type
字串
(必要)
針對第 2 代函式資源: firebaseextensions.v1beta.v2function
description
字串
(必填)

簡短說明函式會對擴充功能執行的工作。

properties
(必填)

第 2 代 Cloud Functions 屬性。以下列出最重要的屬性,但您可以在 Cloud Functions 參考資料中找到完整清單。

資源
location
(選用)

要部署函式的地點。預設值為 us-central1

sourceDirectory
(選用)

根目錄中含有 package.json 的目錄。函式原始碼的檔案必須位於這個目錄中。預設值為 functions

注意:package.jsonmain 欄位會指定函式來源程式碼 (例如 index.js) 的檔案。

另外還有三個物件類型欄位,各自具有以下屬性:

buildConfig 屬性
buildConfig.runtime
(建議)

函式的執行階段環境。

  • 預設為 Cloud Functions 目前支援的 Node.js 版本中最新的版本。
  • 有效值:nodejs14nodejs16nodejs18
buildConfig.entryPoint
(選用)
擴充功能原始碼中匯出函式的名稱,擴充功能應尋找。預設為上述 name 的值。
serviceConfig 屬性
serviceConfig.timeoutSeconds
(選用)

函式的執行時間上限。

  • 預設:60
  • 最大值:540
serviceConfig.availableMemory
(選用)
函式可用的記憶體量。預設值為 256M。支援的單位為 kMGMiGi。如未提供單位,系統會將值解讀為位元組。
eventTrigger 屬性
eventTrigger.eventType
(必要)
要監聽的事件類型。如要瞭解各項產品適用的事件類型,請參閱「為擴充功能編寫 Cloud Functions」。
eventTrigger.eventFilters
(選用)
進一步限制要監聽的事件的篩選器。舉例來說,您只能監聽符合特定資源模式的事件。如要進一步瞭解如何篩選各類型事件,請參閱「為擴充功能編寫 Cloud 函式」一文。
eventTrigger.channel
(選用)
與觸發條件相關聯的管道名稱,格式為 projects/{project}/locations/{location}/channels/{channel}。如果省略這個屬性,函式會監聽專案預設管道的事件。
eventTrigger.triggerRegion
(選填)
觸發條件只會接收來自這個區域的事件。可以是與函式相同的區域、不同的區域或多個區域,也可以是全球區域。如未提供,則預設為與函式相同的區域。

生命週期事件

生命週期事件可讓您指定在使用者安裝、更新或設定擴充功能的例項時執行的函式。請參閱「處理擴充功能的生命週期事件」。

lifecycleEvents:
  onInstall:
    function: myTaskFunction
    processingMessage: Describes the task being completed
  onUpdate:
    function: myOtherTaskFunction
    processingMessage: Describes the task being completed
  onConfigure:
    function: myOtherTaskFunction
    processingMessage: Describes the task being completed
生命週期事件欄位
onInstall
(選填)

指定在使用者安裝擴充功能時執行的函式。

函式規格
function
字串
(必要)

負責處理事件的工作佇列觸發函式名稱。

這個函式必須在 resources 區段中宣告,且必須定義 taskQueue

processingMessage
字串
(必要)
在工作進行期間,在 Firebase 控制台中顯示的訊息。
onUpdate
(選填)

指定使用者更新擴充功能時要執行的函式。

函式規格
function
字串
(必要)

負責處理事件的工作佇列觸發函式名稱。

這個函式必須在 resources 區段中宣告,且必須定義 taskQueue

processingMessage
字串
(必要)
在工作進行期間,在 Firebase 控制台中顯示的訊息。
onConfigure
(選填)

指定使用者重新設定擴充功能時執行的函式。

函式規格
function
字串
(必要)

負責處理事件的工作佇列觸發函式名稱。

這個函式必須在 resources 區段中宣告,且必須定義 taskQueue

processingMessage
字串
(必要)
在工作進行期間,在 Firebase 控制台中顯示的訊息。

自訂事件 (Eventarc)

自訂事件是擴充功能發出的事件,可讓使用者在擴充功能中插入自己的邏輯。請參閱「在擴充功能中新增使用者掛鉤」中的「Eventarc」部分。

events:
  - type: publisher-id.extension-name.version.event-name
    description: Description of the event
  - type: publisher-id.extension-name.version.another-event-name
    description: Description of the other event
自訂事件欄位
type
字串
(必要)
事件類型 ID。使用 3 到 4 個以點號分隔的欄位建立 ID:發布商 ID、擴充功能名稱和事件名稱欄位為必填欄位;建議使用版本欄位。請為每個發布的事件類型選擇不重複且具描述性的事件名稱。
description
字串
(必要)
事件說明。