在使用者所在位置觸及他們,提升應用程式參與度。整合 Engage SDK,即可在多個裝置端途徑直接向使用者提供個人化推薦內容和續播內容,例如收藏、Entertainment Space 和 Play 商店。整合後,平均每個 APK 會增加不到 50 KB (壓縮後),且大多數應用程式的開發人員只需約一週時間即可完成。詳情請造訪商家網站。
本指南適用於開發合作夥伴,提供將旅遊和活動內容傳送至 Engage 內容途徑的操作說明。
整合詳情
術語
這項整合包含以下叢集類型:推薦、精選、預訂和繼續搜尋。
- 「推薦」叢集會顯示個別開發合作夥伴提供的個人化旅遊和活動建議。推薦內容可以根據使用者的個人需求提供,或是一般項目 (例如熱門項目)。您可以使用這些建議,顯示文章、活動、住宿或景點。 - 推薦叢集可由 ArticleEntity、EventEntity、LodgingEntity、PointOfInterestEntity或StoreEntity清單組成,但不能混合不同實體類型的推薦內容。
 - 推薦內容採用以下結構: - 推薦叢集:此 UI 檢視畫面包含相同開發合作夥伴提供的一組推薦內容。 
- 實體:代表叢集中單一項目的物件。這項整合功能提供一些實體,可透過推薦叢集顯示: - ArticleEntity:ArticleEntity 代表與旅遊和活動相關的文字內容建議。可用於文章、網誌文章、行銷內容、新聞摘要等。   - 圖 1:UI 顯示推薦叢集內的單一 ArticleEntity。 
- EventEntity:EventEntity 代表未來發生的活動。活動開始時間是必須傳達給使用者的重要資訊。   - 圖 2:UI 顯示推薦叢集內的單一 EventEntity。 
- LodgingEntity:LodgingEntity 代表住宿,例如飯店、公寓、短期和長期出租的度假屋。   - 圖 3:UI 顯示推薦叢集內的單一 LodgingEntity。 
- StoreEntity:StoreEntity 代表商店、餐廳、咖啡廳等。如果用餐地點或商店是需要傳達給使用者的重要資訊,系統就會醒目顯示相關內容。   - 圖 4:UI 顯示推薦叢集內的單一 StoreEntity。 
- PointOfInterestEntity:PointOfInterestEntity 代表加油站、活動場地、主題樂園、博物館、觀光景點、登山步道等景點。如果地點是需要傳達給使用者的重要資訊,請使用這個實體。不適用於住宿、商店或餐廳。   - 圖 5:UI 顯示「推薦」叢集內的單一 PointOfInterestEntity。 
 
 
- 推薦叢集可由 
- 預訂叢集會在單一 UI 群組中,顯示多個開發合作夥伴所提供使用者最近互動的內容。每個開發合作夥伴最多可在預訂叢集中播送 10 個實體。 - 預訂內容可採用下列結構: - RestaurantReservationEntity:RestaurantReservationEntity 代表餐廳或咖啡廳的預訂,可協助使用者追蹤即將到來或進行中的餐廳預訂。  - 圖 6. 使用者介面顯示預訂叢集內的單一 RestaurantReservationEntity。 
- EventReservationEntity:EventReservationEntity 代表活動預訂,可協助使用者追蹤即將到來或正在進行的活動預訂。活動包括但不限於: - 預訂足球賽等運動賽事
- 遊戲活動,例如預訂電競賽事
- 娛樂活動,例如預訂電影院的電影、演唱會、戲劇、簽書會
- 旅遊或景點預訂,例如導覽行程、博物館門票
- 社交 / 研討會 / 會議預約
- 預約教育 / 訓練課程
   - 圖 7. 使用者介面顯示預訂叢集內的單一 EventReservationEntity。 
- LodgingReservationEntity:LodgingEntityReservation 代表旅遊住宿的預訂,可協助使用者追蹤即將到來或進行中的飯店或度假民宿預訂。  - 圖 8.UI 顯示預訂叢集內的單一 LodgingReservationEntity。 
- TransportationReservationEntity:TransportationReservationEntity 代表任何交通方式的預訂,可協助使用者追蹤即將到來或進行中的航班、渡輪、火車、公車、叫車服務或郵輪預訂。  - 圖 9.使用者介面顯示預訂叢集內的單一 TransportationReservationEntity。 
- VehicleRentalReservationEntity:VehicleRentalReservationEntity 代表租車預約,可協助使用者追蹤即將到來或進行中的租車預約。   - 圖 10. 使用者介面顯示預訂叢集內的單一 VehicleRentalReservationEntity。 
 
- 「精選」叢集會在一個 UI 群組中展示多個開發合作夥伴提供的精選實體。這個單一精選叢集會顯示在靠近 UI 頂端的位置,並且優先放置在所有推薦叢集的上方。每個開發合作夥伴最多可在精選叢集中播送 10 個實體。 - GenericFeaturedEntity:GenericFeaturedEntity 與建議項目不同,精選項目應僅用於開發人員提供的單一頂尖內容,且應代表對使用者而言最重要、最有趣且最相關的內容。   - 圖 11:UI 顯示 FeaturedCluster,其中包含 GenericFeaturedEntity 清單 
 
- 繼續搜尋叢集會顯示使用者最近在所有旅遊應用程式中搜尋的查詢清單,協助他們繼續先前的旅遊搜尋歷程。叢集會固定在第二個位置,也就是預訂之後,以及精選和推薦叢集之前。每個開發合作夥伴最多可在「繼續搜尋」叢集中播送 3 個實體。 - PointOfInterestEntity:PointOfInterestEntity 代表感興趣的地點,例如加油站、活動場地、主題樂園、博物館、旅遊景點、登山步道等。這類實體會醒目顯示使用者先前搜尋過的內容。
 
事前作業
最低 API 級別:19
將 com.google.android.engage:engage-core 程式庫新增至應用程式:
dependencies {
    // Make sure you also include that repository in your project's build.gradle file.
    implementation 'com.google.android.engage:engage-core:1.5.2'
}
摘要
這項設計是以繫結服務的實作為基礎。
用戶端可發布的資料受到不同叢集類型的限制,如下所示:
| 叢集類型 | 叢集限制 | 單一叢集中的實體數量下限 | 單一叢集中的實體數量上限 | 
|---|---|---|---|
| 推薦叢集 | 最多 7 個 | 至少 1 個 | 最多 50 個 ( ArticleEntity、EventEntity、LodgingEntity、StoreEntity或PointOfInterestEntity) | 
| 預留叢集 | 最多 1 個 | 至少 1 個 | 最多 20 個 ( RestaurantReservationEntity、EventReservationEntity、LodgingReservationEntity、TransportationReservationEntity或VehicleRentalReservationEntity) | 
| 精選叢集 | 最多 1 個 | 至少 1 個 | 最多 20 個 ( GenericFeaturedEntity) | 
| 繼續搜尋叢集 | 最多 1 個 | 至少 1 個 | 最多 3 個 ( PointOfInterestEntity) | 
步驟 1:提供實體資料
SDK 定義了不同實體,用來代表各種項目類型。Travel & Events 類別支援下列實體:
- GenericFeaturedEntity
- ArticleEntity
- EventEntity
- LodgingEntity
- StoreEntity
- PointOfInterestEntity
- RestaurantReservationEntity
- EventReservationEntity
- LodgingReservationEntity
- TransportationReservationEntity
- VehicleRentalReservationEntity
下方圖表列出各類型的可用屬性和必要性。
GenericFeaturedEntity
| 屬性 | 必要性 | 說明 | 格式 | 
|---|---|---|---|
| 動作 URI | 必要 | 服務供應商應用程式中實體的深層連結。 注意:您可以使用深層連結追蹤歸因。 請參閱這篇常見問題文章 | URI | 
| 代表圖片 | 必要 | 如果提供多張圖片,系統只會顯示 1 張。 建議顯示比例為 16:9 注意:如果提供徽章,請確保圖片頂端和底部都有 24 dp 的安全空間 | 如需相關指南,請參閱「圖片規格」一節。 | 
| 標題 | 選用 | 實體名稱。 | 任意文字 建議文字長度:50 個半形字元 | 
| 說明 | 選用 | 描述實體的單一段落文字。 注意:系統會向使用者顯示說明或副標題清單,但不會同時顯示兩者。 | 任意文字 建議文字長度:最多 180 個半形字元 | 
| 字幕清單 | 選用 | 最多 3 個副標題,每個副標題為一行文字。 注意:系統會向使用者顯示說明或副標題清單,但不會同時顯示兩者。 | 任意文字 每個副標題的建議文字長度:最多 50 個半形字元 | 
| 徽章 | 選用 | 每個徽章可以是任意文字 (最多 15 個字元),也可以是小型圖片。 在圖片/影片上顯示特殊使用者體驗,例如在圖片上疊加徽章 
 | |
| 徽章 - 文字 | 選用 | 徽章名稱 注意:徽章必須包含文字或圖片 | 任意文字 建議文字長度:最多 15 個半形字元 | 
| 徽章 - 圖片 | 選用 | 小型圖片 特殊使用者體驗處理方式,例如在圖片/影片縮圖上疊加徽章。 注意:徽章必須包含文字或圖片 | 如需相關指南,請參閱「圖片規格」一節。 | 
| 內容類別 | 選用 | 描述實體中內容的類別。 | 列舉清單 如需相關指引,請參閱「內容類別」一節。 | 
| DisplayTimeWindow (選用) - 設定內容在途徑上顯示的時間長度 | |||
| 開始時間戳記 | 選用 | Epoch 時間戳記,內容應會在此時間過後顯示在途徑上。 如未設定,表示內容一律會顯示在途徑上。 | 以毫秒為單位的 Epoch 時間戳記 | 
| 結束時間戳記 | 選用 | Epoch 時間戳記,內容在此時間後將不會顯示在途徑上。 如未設定,表示內容一律會顯示在途徑上。 | 以毫秒為單位的 Epoch 時間戳記 | 
ArticleEntity
| 屬性 | 必要性 | 說明 | 格式 | 
|---|---|---|---|
| 動作 URI | 必要 | 服務供應商應用程式中實體的深層連結。 注意:您可以使用深層連結追蹤歸因。 請參閱這篇常見問題文章 | URI | 
| 標題 | 必要 | 實體名稱。 | 任意文字 建議文字長度:最多 50 個半形字元 | 
| 代表圖片 | 選用 | 如果提供多張圖片,系統只會顯示 1 張。 建議顯示比例為 16:9 注意:強烈建議提供圖片。如果提供徽章,請確保圖片頂端和底部都有 24 dp 的安全空間 | 如需相關指南,請參閱「圖片規格」一節。 | 
| 來源 - 標題 | 選用 | 作者、機構或記者的名稱 | 任意文字 建議文字長度:最多 25 個半形字元 | 
| 來源 - 圖片 | 選用 | 來源圖片,例如作者、機構、記者 | 如需相關指南,請參閱「圖片規格」一節。 | 
| 說明 | 選用 | 描述實體的單一段落文字。 注意:系統會向使用者顯示說明或副標題清單,但不會同時顯示兩者。 | 任意文字 建議文字長度:最多 180 個半形字元 | 
| 字幕清單 | 選用 | 最多 3 個副標題,每個副標題為一行文字。 注意:系統會向使用者顯示說明或副標題清單,但不會同時顯示兩者。 | 任意文字 每個副標題的建議文字長度:最多 50 個半形字元 | 
| 徽章 | 選用 | 每個徽章可以是任意文字 (最多 15 個字元),也可以是小型圖片。 在圖片/影片上進行特殊使用者體驗處理,例如在圖片上疊加徽章 
 | |
| 徽章 - 文字 | 選用 | 徽章名稱 注意:徽章必須包含文字或圖片 | 任意文字 建議文字長度:最多 15 個半形字元 | 
| 徽章 - 圖片 | 選用 | 小型圖片 特殊使用者體驗處理方式,例如在圖片/影片縮圖上疊加徽章。 注意:徽章必須包含文字或圖片 | 如需相關指南,請參閱「圖片規格」一節。 | 
| 內容發布時間 | 選用 | 這是內容在應用程式中發布 / 更新時的 Epoch 時間戳記 (以毫秒為單位)。 | 以毫秒為單位的 Epoch 紀元時間戳記 | 
| 上次互動時間 | 選用 | 使用者上次與這個實體互動時的毫秒級時間戳記。 | 以毫秒為單位的 Epoch 紀元時間戳記 | 
| 進度百分比 | 選用 | 使用者至今觀看完整內容的百分比。 | 介於 0 到 100 之間 (含 0 和 100) 的 int 值。 | 
| 內容類別 | 選用 | 描述實體中內容的類別。 | 列舉清單 如需相關指引,請參閱「內容類別」一節。 | 
| DisplayTimeWindow (選用) - 設定內容在途徑上顯示的時間長度 | |||
| 開始時間戳記 | 選用 | Epoch 時間戳記,內容應會在此時間過後顯示在途徑上。 如未設定,表示內容一律會顯示在途徑上。 | 以毫秒為單位的 Epoch 時間戳記 | 
| 結束時間戳記 | 選用 | Epoch 時間戳記,內容在此時間後將不會顯示在途徑上。 如未設定,表示內容一律會顯示在途徑上。 | 以毫秒為單位的 Epoch 時間戳記 | 
EventEntity
| 屬性 | 必要性 | 說明 | 格式 | 
|---|---|---|---|
| 動作 URI | 必要 | 服務供應商應用程式中實體的深層連結。 注意:您可以使用深層連結追蹤歸因。 請參閱這篇常見問題文章 | URI | 
| 標題 | 必要 | 實體名稱。 | 字串 建議文字長度:最多 50 個半形字元 | 
| 本地化開始時間 - 時間戳記 | 必要 | 活動預計開始的 Epoch 時間戳記。 | Joda-Time Instant | 
| 本地化開始時間 - 時區 | 必要 | 活動預定開始的時區。 | Joda-Time DateTimeZone 如需相關指南,請參閱「時區規格」一節。 | 
| 活動模式 | 必要 | 這個欄位用於指出活動是線上、現場或混合式。 | 列舉:VIRTUAL、IN_PERSON 或 HYBRID | 
| 代表圖片 | 必要 | 如果提供多張圖片,系統只會顯示 1 張。 建議顯示比例為 16:9 注意:強烈建議提供圖片。如果提供徽章,請確保圖片頂端和底部都有 24 dp 的安全空間 | 如需相關指南,請參閱「圖片規格」一節。 | 
| 地點 - 國家/地區 | 在特定情況下為必要 | 活動舉辦的國家/地區。 注意:如果活動為「IN_PERSON」或「HYBRID」,則必須提供這項資訊。 | 任意文字 建議文字長度:最多約 20 個半形字元 | 
| 地點 - 城市 | 在特定情況下為必要 | 活動舉辦的城市。 注意:如果活動為「IN_PERSON」或「HYBRID」,則必須提供這項資訊。 | 任意文字 建議文字長度:最多約 20 個半形字元 | 
| 位置 - 顯示地址 | 在特定情況下為必要 | 活動地點的地址或名稱,會向使用者顯示。 注意:如果活動為「IN_PERSON」或「HYBRID」,則必須提供這項資訊。 | 任意文字 建議文字長度:最多約 20 個半形字元 | 
| 地點 - 街道地址 | 選用 | 活動主辦地點的街道地址 (如適用)。 | 任意文字 建議文字長度:最多約 20 個半形字元 | 
| 地點 - 州/省 | 選用 | 活動主辦地點的州或省 (如適用)。 | 任意文字 建議文字長度:最多約 20 個半形字元 | 
| 地點 - 郵遞區號 | 選用 | 活動舉辦地點的郵遞區號 (如適用)。 | 任意文字 建議文字長度:最多約 20 個半形字元 | 
| 地點 - 鄰近地區 | 選用 | 活動主辦地點的鄰里 (如適用)。 | 任意文字 建議文字長度:最多約 20 個半形字元 | 
| 結束時間 | 選用 | 預計活動結束時間的 Epoch 時間戳記。 注意:這項指標會以毫秒為單位表示。 | 以毫秒為單位的 Epoch 紀元時間戳記 | 
| 說明 | 選用 | 描述實體的單一段落文字。 注意:系統會向使用者顯示說明或副標題清單,但不會同時顯示兩者。 | 任意文字 建議文字長度:最多 180 個半形字元 | 
| 字幕清單 | 選用 | 最多 3 個副標題,每個副標題為一行文字。 注意:系統會向使用者顯示說明或副標題清單,但不會同時顯示兩者。 | 任意文字 每個副標題的建議文字長度:最多 50 個半形字元 | 
| 徽章 | 選用 | 每個徽章可以是任意文字 (最多 15 個字元),也可以是小型圖片。 | |
| 徽章 - 文字 | 選用 | 徽章名稱 注意:徽章必須包含文字或圖片 | 任意文字 建議文字長度:最多 15 個半形字元 | 
| 徽章 - 圖片 | 選用 | 小型圖片 特殊使用者體驗處理方式,例如在圖片/影片縮圖上疊加徽章。 注意:徽章必須包含文字或圖片 | 如需相關指南,請參閱「圖片規格」一節。 | 
| 價格 - CurrentPrice | 在特定情況下為必要 | 活動票券/通行證的目前價格。 如果提供了原價,則必須提供這項屬性。 | 任意文字 | 
| 價格 - StrikethroughPrice | 選用 | 活動票券/通行證的原始價格。 | 任意文字 | 
| 價格摘要 | 選用 | 價格宣傳,用來主打促銷、活動、會員折扣 (如有)。 | 任意文字 建議文字長度:最多 45 個半形字元,過長部分會以刪節號顯示 | 
| 內容類別 | 選用 | 描述實體中內容的類別。 | 符合資格的列舉清單 
 如需相關指引,請參閱「內容類別」一節。 | 
| DisplayTimeWindow (選用) - 設定內容在途徑上顯示的時間長度 | |||
| 開始時間戳記 | 選用 | Epoch 時間戳記,內容應會在此時間過後顯示在途徑上。 如未設定,表示內容一律會顯示在途徑上。 | 以毫秒為單位的 Epoch 時間戳記 | 
| 結束時間戳記 | 選用 | Epoch 時間戳記,內容在此時間後將不會顯示在途徑上。 如未設定,表示內容一律會顯示在途徑上。 | 以毫秒為單位的 Epoch 時間戳記 | 
LodgingEntity
| 屬性 | 必要性 | 說明 | 格式 | 
|---|---|---|---|
| 動作 URI | 必要 | 服務供應商應用程式中實體的深層連結。 注意:您可以使用深層連結追蹤歸因。 請參閱這篇常見問題文章 | URI | 
| 標題 | 必要 | 實體名稱。 | 字串 建議文字長度:最多 50 個半形字元 | 
| 代表圖片 | 必要 | 當您提供多張圖片時,系統只會顯示 1 張圖片。建議長寬比為 16:9 注意:如果提供徽章,請確保圖片頂端和底部都有 24 dp 的安全空間 | 如需相關指南,請參閱「圖片規格」一節。 | 
| 地點 - 國家/地區 | 必要 | 住宿地點所在的國家/地區。 | 任意文字 建議文字長度:最多約 20 個半形字元 | 
| 地點 - 城市 | 必要 | 住宿所在的城市。 | 任意文字 建議文字長度:最多約 20 個半形字元 | 
| 位置 - 顯示地址 | 必要 | 向使用者顯示的地址。建議您加入城市名稱,並視情況加入州/省或國家/地區,只有在使用者位於附近、熟悉該地點,或叢集標題中包含城市時,才加入街道地址或鄰近地區。如果包含街道地址,請提供簡潔的地址,並盡可能使用縮寫 (例如「St」代表「Street」、「Ave」代表「Avenue」)。 | 任意文字 建議文字長度:最多約 20 個半形字元 | 
| 地點 - 街道地址 | 選用 | 住宿的街道地址 (如適用)。 | 任意文字 建議文字長度:最多約 20 個半形字元 | 
| 地點 - 州/省 | 選用 | 住宿地點所在的州或省 (如適用)。 | 任意文字 建議文字長度:最多約 20 個半形字元 | 
| 地點 - 郵遞區號 | 選用 | 住宿的郵遞區號 (如適用)。 | 任意文字 建議文字長度:最多約 20 個半形字元 | 
| 地點 - 鄰近地區 | 選用 | 住宿地點的鄰近區域 (如適用)。 | 任意文字 建議文字長度:最多約 20 個半形字元 | 
| 徽章 | 選用 | 每個徽章可以是任意文字 (最多 15 個字元),也可以是小型圖片。 | |
| 徽章 - 文字 | 選用 | 徽章名稱 注意:徽章必須包含文字或圖片 | 任意文字 建議文字長度:最多 15 個半形字元 | 
| 徽章 - 圖片 | 選用 | 小型圖片 特殊使用者體驗處理方式,例如在圖片/影片縮圖上疊加徽章。 注意:徽章必須包含文字或圖片 | 如需相關指南,請參閱「圖片規格」一節。 | 
| 說明 | 選用 | 描述實體的單一段落文字。 注意:系統會向使用者顯示說明或副標題清單,但不會同時顯示兩者。 | 任意文字 建議文字長度:最多 180 個半形字元 | 
| 字幕清單 | 選用 | 最多 3 個副標題,每個副標題為一行文字。 注意:系統會向使用者顯示說明或副標題清單,但不會同時顯示兩者。 | 任意文字 每個副標題的建議文字長度:最多 50 個半形字元 | 
| AvailabilityTimeWindow - Localized Start Time - Timestamp | 選用 | 住宿預計開放/可入住的紀元時間戳記。 | Joda-Time Instant | 
| AvailabilityTimeWindow - Localized Start Time - Timezone | 選用 | 住宿預計開放/可預訂的時區。 | Joda-Time DateTimeZone 如需相關指南,請參閱「時區規格」一節。 | 
| AvailabilityTimeWindow - Localized End Time - Timestamp | 選用 | 住宿預計開放/可供預訂的紀元時間戳記。 | Joda-Time Instant | 
| AvailabilityTimeWindow - Localized End Time - Timezone | 選用 | 住宿預計開放/可預訂的時區。 | Joda-Time DateTimeZone 如需相關指南,請參閱「時區規格」一節。 | 
| 評分 - 最高值 | 選用 | 分級量表的最高值。 如果同時提供目前的評分值,則必須提供這項屬性。 | 大於或等於 0.0 的數字 | 
| 評分 - 目前的值 | 選用 | 評分量表的目前值。 如果同時提供最高評分值,則須提供這項屬性。 | 大於或等於 0.0 的數字 | 
| 評分 - 次數 | 選用 | 住宿的評分次數。 注意:如果應用程式要控管這項資訊的顯示方式,請提供這個欄位。提供可向使用者顯示的簡短字串。舉例來說,如果計數為 1,000,000,請考慮使用 1M 等縮寫,以免在較小的螢幕上遭到截斷。 | 字串 | 
| 評分 - 次數值 | 選用 | 住宿的評分次數。 注意:如果您不想自行處理顯示縮寫邏輯,請提供這個欄位。如果同時提供「數量」和「數量值」,系統會使用「數量」向使用者顯示 | 長 | 
| 價格 - CurrentPrice | 在特定情況下為必要 | 住宿目前的價格。 如果提供了原價,則必須提供這項屬性。 | 任意文字 | 
| 價格 - StrikethroughPrice | 選用 | 住宿的原始價格,在 UI 中會加上刪除線表示這個價格。 | 任意文字 | 
| 價格摘要 | 選用 | 價格宣傳,用來主打促銷、活動、會員折扣 (如有)。 | 任意文字 建議文字長度:最多 45 個半形字元,過長部分會以刪節號顯示 | 
| DisplayTimeWindow (選用) - 設定內容在途徑上顯示的時間長度 | |||
| 開始時間戳記 | 選用 | Epoch 時間戳記,內容應會在此時間過後顯示在途徑上。 如未設定,表示內容一律會顯示在途徑上。 | 以毫秒為單位的 Epoch 時間戳記 | 
| 結束時間戳記 | 選用 | Epoch 時間戳記,內容在此時間後將不會顯示在途徑上。 如未設定,表示內容一律會顯示在途徑上。 | 以毫秒為單位的 Epoch 紀元時間戳記 | 
StoreEntity
StoreEntity 物件代表開發合作夥伴要發布的個別商店,例如與旅遊體驗相關的熱門用餐地點或餐廳。
| 屬性 | 必要性 | 說明 | 格式 | 
|---|---|---|---|
| 代表圖片 | 必要 | 至少須提供一張圖片 | 如需相關指南,請參閱「圖片規格」一節。 | 
| 動作 URI | 必要 | 服務供應商應用程式中實體的深層連結。 注意:您可以使用深層連結追蹤歸因。 請參閱這篇常見問題文章 | URI | 
| 標題 | 選用 | 商店名稱。 | 任意文字 建議文字長度:最多 45 個半形字元,過長部分會以刪節號顯示 | 
| 位置 | 選用 | 商店的位置。 | 任意文字 建議文字長度:最多 45 個半形字元,過長部分會以刪節號顯示 | 
| 摘要 | 選用 | 如果有,會是用來主打商店的促銷、活動或更新。 | 任意文字 建議文字長度:最多 45 個半形字元,過長部分會以刪節號顯示 | 
| 摘要附屬細則 | 選用 | 摘要的附屬細則文字。 | 任意文字 建議文字長度:最多 45 個半形字元,過長部分會以刪節號顯示 | 
| 說明 | 選用 | 商店說明。 | 任意文字 建議文字長度:最多 90 個半形字元,過長部分會以刪節號顯示 | 
| 類別 | 選用 | 商店類別。以餐廳為例,可以是「法式」、「新美式」、「拉麵」、「精緻餐飲」等菜色。 | 任意文字 建議文字長度:最多 45 個半形字元,過長部分會以刪節號顯示 | 
| 評分 - 最高值 | 選用 | 分級量表的最高值。 如果同時提供目前的評分值,則必須提供這項屬性。 | 大於或等於 0.0 的數字 | 
| 評分 - 目前的值 | 選用 | 評分量表的目前值。 如果同時提供最高評分值,則須提供這項屬性。 | 大於或等於 0.0 的數字 | 
| 評分 - 次數 | 選用 | 住宿的評分次數。 注意:如果應用程式要控管這項資訊的顯示方式,請提供這個欄位。提供可向使用者顯示的簡短字串。舉例來說,如果計數為 1,000,000,請考慮使用 1M 等縮寫,以免在較小的螢幕上遭到截斷。 | 字串 | 
| 評分 - 次數值 | 選用 | 住宿的評分次數。 注意:如果您不想自行處理顯示縮寫邏輯,請提供這個欄位。如果同時提供「數量」和「數量值」,系統會使用「數量」向使用者顯示 | 長 | 
| DisplayTimeWindow (選用) - 設定內容在途徑上顯示的時間長度 | |||
| 開始時間戳記 | 選用 | Epoch 時間戳記,內容應會在此時間過後顯示在途徑上。 如未設定,表示內容一律會顯示在途徑上。 | 以毫秒為單位的 Epoch 時間戳記 | 
| 結束時間戳記 | 選用 | Epoch 時間戳記,內容在此時間後將不會顯示在途徑上。 如未設定,表示內容一律會顯示在途徑上。 | 以毫秒為單位的 Epoch 時間戳記 | 
PointOfInterestEntity
| 屬性 | 必要性 | 說明 | 格式 | 
|---|---|---|---|
| 動作 URI | 必要 | 服務供應商應用程式中實體的深層連結。 注意:您可以使用深層連結追蹤歸因。 請參閱這篇常見問題文章 | URI | 
| 標題 | 必要 | 實體名稱。 | 字串 建議文字長度:最多 50 個半形字元 | 
| 代表圖片 | 在特定情況下為必要 | 如果提供多張圖片,系統只會顯示 1 張。 建議顯示比例為 16:9 注意:如果實體屬於推薦叢集,則必須提供圖片。如果提供徽章,請確保圖片頂端和底部都有 24 dp 的安全空間 | 如需相關指南,請參閱「圖片規格」一節。 | 
| 上次互動時間 | 在特定情況下為必要 | 使用者上次與這個實體互動時的紀元時間戳記。 注意:如果實體屬於「繼續搜尋」叢集,則必須填寫這個欄位。 | Joda-Time Instant | 
| 地點 - 國家/地區 | 在特定情況下為必要 | 發生搜尋興趣的國家/地區。 注意:如果實體屬於建議叢集,則必須填寫這個欄位。 | 任意文字 建議文字長度:最多約 20 個半形字元 | 
| 地點 - 城市 | 在特定情況下為必要 | 搜尋點所在的城市。 注意:如果實體屬於建議叢集,則必須填寫這個欄位。 | 任意文字 建議文字長度:最多約 20 個半形字元 | 
| 位置 - 顯示地址 | 在特定情況下為必要 | 向使用者顯示的地址。提供簡潔的地址,盡可能使用縮寫 (例如「St」代表「Street」、「Ave」代表「Avenue」)。視使用者的裝置和設定而定,這個字串可能會遭到截斷。請輸入城市名稱,方便識別。 注意:如果實體屬於建議叢集,則必須填寫這個欄位。 | 任意文字 建議文字長度:最多約 35 個半形字元 | 
| 地點 - 街道地址 | 選用 | 搜尋點的街道地址 (如適用)。 | 任意文字 建議文字長度:最多約 20 個半形字元 | 
| 地點 - 州/省 | 選用 | 興趣點所在的州或省 (如適用)。 | 任意文字 建議文字長度:最多約 20 個半形字元 | 
| 地點 - 郵遞區號 | 選用 | 搜尋點的郵遞區號 (如適用)。 | 任意文字 建議文字長度:最多約 20 個半形字元 | 
| 地點 - 鄰近地區 | 選用 | 搜尋點的鄰近區域 (如適用)。 | 任意文字 建議文字長度:最多約 20 個半形字元 | 
| AvailabilityTimeWindow - Localized Start Time - Timestamp | 選用 | 預計開放/可用的時間戳記 (以 Unix 紀元時間表示)。 | Joda-Time Instant | 
| AvailabilityTimeWindow - Localized Start Time - Timezone | 選用 | 搜尋點預計開放/可用的時區。 | Joda-Time DateTimeZone 如需相關指南,請參閱「時區規格」一節。 | 
| AvailabilityTimeWindow - Localized End Time - Timestamp | 選用 | 這個時間戳記 (以紀元時間表示) 代表預計興趣點開放/可用的時間。 | Joda-Time Instant | 
| AvailabilityTimeWindow - Localized End Time - Timezone | 選用 | 搜尋點預計開放/可用的時區。 | Joda-Time DateTimeZone 如需相關指南,請參閱「時區規格」一節。 | 
| 徽章 | 選用 | 每個徽章可以是任意文字 (最多 15 個字元),也可以是小型圖片。 | |
| 徽章 - 文字 | 選用 | 徽章名稱 注意:徽章必須包含文字或圖片 | 任意文字 建議文字長度:最多 15 個半形字元 | 
| 徽章 - 圖片 | 選用 | 小型圖片 特殊使用者體驗處理方式,例如在圖片/影片縮圖上疊加徽章。 注意:徽章必須包含文字或圖片 | 如需相關指南,請參閱「圖片規格」一節。 | 
| 說明 | 選用 | 描述實體的單一段落文字。 注意:系統會向使用者顯示說明或副標題清單,但不會同時顯示兩者。 | 任意文字 建議文字長度:最多 180 個半形字元 | 
| 字幕清單 | 選用 | 最多 3 個副標題,每個副標題為一行文字。 注意:系統會向使用者顯示說明或副標題清單,但不會同時顯示兩者。 | 任意文字 每個副標題的建議文字長度:最多 50 個半形字元 | 
| 評分 - 最高值 | 選用 | 分級量表的最高值。 如果同時提供目前的評分值,則必須提供這項屬性。 | 大於或等於 0.0 的數字 | 
| 評分 - 目前的值 | 選用 | 評分量表的目前值。 如果同時提供最高評分值,則須提供這項屬性。 | 大於或等於 0.0 的數字 | 
| 評分 - 次數 | 選用 | 搜尋點的評分次數。 注意:如果應用程式要控管這項資訊的顯示方式,請提供這個欄位。提供可向使用者顯示的簡短字串。舉例來說,如果計數為 1,000,000,請考慮使用 1M 等縮寫,以免在較小的螢幕上遭到截斷。 | 字串 | 
| 評分 - 次數值 | 選用 | 搜尋點的評分次數。 注意:如果您不想自行處理顯示縮寫邏輯,請提供這個欄位。如果同時提供「數量」和「數量值」,系統會使用「數量」向使用者顯示 | 長 | 
| 價格 - CurrentPrice | 在特定情況下為必要 | 搜尋點目前的門票/入場證價格。 如果提供了原價,則必須提供這項屬性。 | 任意文字 | 
| 價格 - StrikethroughPrice | 選用 | 景點的票券/入場證原價。 | 任意文字 | 
| 價格摘要 | 選用 | 價格宣傳,用來主打促銷、活動、會員折扣 (如有)。 | 任意文字 建議文字長度:最多 45 個半形字元,過長部分會以刪節號顯示 | 
| 內容類別 | 選用 | 描述實體中內容的類別。 | 符合資格的列舉清單 
 如需相關指引,請參閱「內容類別」一節。 | 
| DisplayTimeWindow (選用) - 設定內容在途徑上顯示的時間長度 | |||
| 開始時間戳記 | 選用 | Epoch 時間戳記,內容應會在此時間過後顯示在途徑上。 如未設定,表示內容一律會顯示在途徑上。 | 以毫秒為單位的 Epoch 時間戳記 | 
| 結束時間戳記 | 選用 | Epoch 時間戳記,內容在此時間後將不會顯示在途徑上。 如未設定,表示內容一律會顯示在途徑上。 | 以毫秒為單位的 Epoch 時間戳記 | 
RestaurantReservationEntity
| 屬性 | 必要性 | 說明 | 格式 | 
|---|---|---|---|
| 動作 URI | 必要 | 服務供應商應用程式中實體的深層連結。 注意:您可以使用深層連結追蹤歸因。 請參閱這篇常見問題文章 | URI | 
| 標題 | 必要 | 實體名稱。 | 字串 建議文字長度:最多 50 個半形字元 | 
| 本地化預訂開始時間 - 時間戳記 | 必要 | 預計開始預訂的紀元時間戳記。 | Joda-Time Instant | 
| 本地化預訂開始時間 - 時區 | 必要 | 預計開始預訂的時區。 | Joda-Time DateTimeZone 如需相關指南,請參閱「時區規格」。 | 
| 地點 - 國家/地區 | 必要 | 餐廳所在的國家/地區。 | 任意文字 建議文字長度:最多約 20 個半形字元 | 
| 地點 - 城市 | 必要 | 餐廳所在的城市。 | 任意文字 建議文字長度:最多約 20 個半形字元 | 
| 位置 - 顯示地址 | 必要 | 向使用者顯示的餐廳地址。 | 任意文字 建議文字長度:最多約 20 個半形字元 | 
| 地點 - 街道地址 | 選用 | 餐廳的街道地址 (如適用)。 | 任意文字 建議文字長度:最多約 20 個半形字元 | 
| 地點 - 州/省 | 選用 | 餐廳所在的州或省 (如適用)。 | 任意文字 建議文字長度:最多約 20 個半形字元 | 
| 地點 - 郵遞區號 | 選用 | 餐廳的郵遞區號 (如適用)。 | 任意文字 建議文字長度:最多約 20 個半形字元 | 
| 地點 - 鄰近地區 | 選用 | 餐廳所在社區 (如適用)。 | 任意文字 建議文字長度:最多約 20 個半形字元 | 
| 代表圖片 | 選用 | 當您提供多張圖片時,系統只會顯示 1 張圖片。建議顯示比例為 16:9 | 如需相關指南,請參閱「圖片規格」一節。 | 
| 說明 | 選用 | 描述實體的單一段落文字。 注意:系統會向使用者顯示說明或副標題清單,但不會同時顯示兩者。 | 任意文字 建議文字長度:最多 180 個半形字元 | 
| 字幕清單 | 選用 | 最多 3 個副標題,每個副標題為一行文字。 注意:系統會向使用者顯示說明或副標題清單,但不會同時顯示兩者。 | 任意文字 每個副標題的建議文字長度:最多 50 個半形字元 | 
| 資料表大小 | 選用 | 預訂群組的人數 | 大於 0 的整數 | 
| DisplayTimeWindow (選用) - 設定內容在途徑上顯示的時間長度 | |||
| 開始時間戳記 | 選用 | Epoch 時間戳記,內容應會在此時間過後顯示在途徑上。 如未設定,表示內容一律會顯示在途徑上。 | 以毫秒為單位的 Epoch 時間戳記 | 
| 結束時間戳記 | 選用 | Epoch 時間戳記,內容在此時間後將不會顯示在途徑上。 如未設定,表示內容一律會顯示在途徑上。 | 以毫秒為單位的 Epoch 時間戳記 | 
EventReservationEntity
| 屬性 | 必要性 | 說明 | 格式 | 
|---|---|---|---|
| 動作 URI | 必要 | 服務供應商應用程式中實體的深層連結。 注意:您可以使用深層連結追蹤歸因。 請參閱這篇常見問題文章 | URI | 
| 標題 | 必要 | 實體名稱。 | 字串 建議文字長度:最多 50 個半形字元 | 
| 本地化開始時間 - 時間戳記 | 必要 | 活動預計開始的 Epoch 時間戳記。 | Joda-Time Instant | 
| 本地化開始時間 - 時區 | 必要 | 活動預定開始的時區。 | Joda-Time DateTimeZone 如需相關指南,請參閱「時區規格」一節。 | 
| 活動模式 | 必要 | 這個欄位用於指出活動是線上、現場或混合式。 | 列舉:VIRTUAL、IN_PERSON 或 HYBRID | 
| 地點 - 國家/地區 | 在特定情況下為必要 | 活動舉辦的國家/地區。 注意:如果活動為「IN_PERSON」或「HYBRID」,則必須提供這項資訊。 | 任意文字 建議文字長度:最多約 20 個半形字元 | 
| 地點 - 城市 | 在特定情況下為必要 | 活動舉辦的城市。 注意:如果活動為「IN_PERSON」或「HYBRID」,則必須提供這項資訊。 | 任意文字 建議文字長度:最多約 20 個半形字元 | 
| 位置 - 顯示地址 | 在特定情況下為必要 | 活動地點的地址或名稱,會向使用者顯示。 注意:如果活動為「IN_PERSON」或「HYBRID」,則必須提供這項資訊。 | 任意文字 建議文字長度:最多約 20 個半形字元 | 
| 地點 - 街道地址 | 選用 | 活動主辦地點的街道地址 (如適用)。 | 任意文字 建議文字長度:最多約 20 個半形字元 | 
| 地點 - 州/省 | 選用 | 活動主辦地點的州或省 (如適用)。 | 任意文字 建議文字長度:最多約 20 個半形字元 | 
| 地點 - 郵遞區號 | 選用 | 活動舉辦地點的郵遞區號 (如適用)。 | 任意文字 建議文字長度:最多約 20 個半形字元 | 
| 地點 - 鄰近地區 | 選用 | 活動主辦地點的鄰里 (如適用)。 | 任意文字 建議文字長度:最多約 20 個半形字元 | 
| 代表圖片 | 選用 | 如果提供多張圖片,系統只會顯示 1 張。 建議顯示比例為 16:9 注意:強烈建議提供圖片。如果提供徽章,請確保圖片頂端和底部都有 24 dp 的安全空間 | 如需相關指南,請參閱「圖片規格」一節。 | 
| 本地化結束時間 - 時間戳記 | 選用 | 預計活動結束時間的 Epoch 時間戳記。 | Joda-Time Instant | 
| 本地化結束時間 - 時區 | 選用 | 活動預計結束的時區。 | Joda-Time DateTimeZone 如需相關指南,請參閱「時區規格」一節。 | 
| 服務供應商 - 名稱 | 選用 | 服務供應商名稱。 注意:服務供應商必須提供文字或圖片。 | 任意文字。例如活動主辦人/巡迴演唱會的名稱 | 
| 服務供應商 - 圖片 | 選用 | 服務供應商的標誌/圖片。 注意:服務供應商必須提供文字或圖片。 | 如需相關指南,請參閱「圖片規格」一節。 | 
| 說明 | 選用 | 描述實體的單一段落文字。 注意:系統會向使用者顯示說明或副標題清單,但不會同時顯示兩者。 | 任意文字 建議文字長度:最多 180 個半形字元 | 
| 字幕清單 | 選用 | 最多 3 個副標題,每個副標題為一行文字。 注意:系統會向使用者顯示說明或副標題清單,但不會同時顯示兩者。 | 任意文字 每個副標題的建議文字長度:最多 50 個半形字元 | 
| 徽章 | 選用 | 每個徽章可以是任意文字 (最多 15 個字元),也可以是小型圖片。 | |
| 徽章 - 文字 | 選用 | 徽章名稱 注意:徽章必須包含文字或圖片 | 任意文字 建議文字長度:最多 15 個半形字元 | 
| 徽章 - 圖片 | 選用 | 小型圖片 特殊使用者體驗處理方式,例如在圖片/影片縮圖上疊加徽章。 注意:徽章必須包含文字或圖片 | 如需相關指南,請參閱「圖片規格」一節。 | 
| 預訂 ID | 選用 | 預訂活動的預訂 ID。 | 任意文字 | 
| 價格 - CurrentPrice | 在特定情況下為必要 | 活動票券/通行證的目前價格。 如果提供了原價,則必須提供這項屬性。 | 任意文字 | 
| 價格 - StrikethroughPrice | 選用 | 活動票券/通行證的原始價格。 | 任意文字 | 
| 價格摘要 | 選用 | 價格宣傳,用來主打促銷、活動、會員折扣 (如有)。 | 任意文字 建議文字長度:最多 45 個半形字元,過長部分會以刪節號顯示 | 
| 評分 - 最高值 | 選用 | 分級量表的最高值。 如果同時提供目前的評分值,則必須提供這項屬性。 | 大於或等於 0.0 的數字 | 
| 評分 - 目前的值 | 選用 | 評分量表的目前值。 如果同時提供最高評分值,則須提供這項屬性。 | 大於或等於 0.0 的數字 | 
| 評分 - 次數 | 選用 | 活動的評分次數。 注意:如果應用程式要控管這項資訊的顯示方式,請提供這個欄位。提供可向使用者顯示的簡短字串。舉例來說,如果計數為 1,000,000,請考慮使用 1M 等縮寫,以免在較小的螢幕上遭到截斷。 | 字串 | 
| 評分 - 次數值 | 選用 | 活動的評分次數。 注意:如果您不想自行處理顯示縮寫邏輯,請提供這個欄位。如果同時提供「數量」和「數量值」,系統會使用「數量」向使用者顯示 | 長 | 
| 內容類別 | 選用 | 描述實體中內容的類別。 | 符合資格的列舉清單 
 如需相關指引,請參閱「內容類別」一節。 | 
| DisplayTimeWindow (選用) - 設定內容在途徑上顯示的時間長度 | |||
| 開始時間戳記 | 選用 | Epoch 時間戳記,內容應會在此時間過後顯示在途徑上。 如未設定,表示內容一律會顯示在途徑上。 | 以毫秒為單位的 Epoch 時間戳記 | 
| 結束時間戳記 | 選用 | Epoch 時間戳記,內容在此時間後將不會顯示在途徑上。 如未設定,表示內容一律會顯示在途徑上。 | 以毫秒為單位的 Epoch 時間戳記 | 
LodgingReservationEntity
| 屬性 | 必要性 | 說明 | 格式 | 
|---|---|---|---|
| 動作 URI | 必要 | 服務供應商應用程式中實體的深層連結。 注意:您可以使用深層連結追蹤歸因。 請參閱這篇常見問題文章 | URI | 
| 標題 | 必要 | 實體名稱。 | 任意文字。例如「12 月 12 日起的住宿」 建議文字長度:最多 50 個半形字元 | 
| 本地化入住時間 - 時間戳記 | 必要 | 代表預訂入住時間的 Epoch 時間戳記。 | Joda-Time Instant | 
| 本地化入住時間 - 時區 | 必要 | 預訂入住時間所在的時區。 | Joda-Time DateTimeZone 如需相關指南,請參閱「時區規格」一節。 | 
| 本地化退房時間 - 時間戳記 | 必要 | 代表預訂退房時間的 Epoch 時間戳記。 | Joda-Time Instant | 
| 本地化退房時間 - 時區 | 必要 | 預訂退房時間所在的時區。 | Joda-Time DateTimeZone 如需相關指南,請參閱「時區規格」一節。 | 
| 地點 - 國家/地區 | 必要 | 住宿所在的國家/地區。 | 任意文字 建議文字長度:最多約 20 個半形字元 | 
| 地點 - 城市 | 必要 | 住宿地點所在的城市。 | 任意文字 建議文字長度:最多約 20 個半形字元 | 
| 位置 - 顯示地址 | 必要 | 向使用者顯示的地址。提供簡潔的地址,盡可能使用縮寫 (例如「St」代表「Street」、「Ave」代表「Avenue」)。視使用者的裝置和設定而定,這個字串可能會遭到截斷。請加入城市名稱,方便識別。 | 任意文字 建議文字長度:最多約 35 個半形字元 | 
| 地點 - 街道地址 | 選用 | 住宿的街道地址 (如適用)。 | 任意文字 建議文字長度:最多約 20 個半形字元 | 
| 地點 - 州/省 | 選用 | 住宿地點所在的州或省 (如適用)。 | 任意文字 建議文字長度:最多約 20 個半形字元 | 
| 地點 - 郵遞區號 | 選用 | 住宿的郵遞區號 (如適用)。 | 任意文字 建議文字長度:最多約 20 個半形字元 | 
| 地點 - 鄰近地區 | 選用 | 住宿地點的鄰近區域 (如適用)。 | 任意文字 建議文字長度:最多約 20 個半形字元 | 
| 代表圖片 | 選用 | 當您提供多張圖片時,系統只會顯示 1 張圖片。建議長寬比為 16:9 注意:如果提供徽章,請確保圖片頂端和底部都有 24 dp 的安全空間。 | 如需相關指南,請參閱「圖片規格」一節。 | 
| 說明 | 選用 | 描述實體的單一段落文字。 注意:系統會向使用者顯示說明或副標題清單,但不會同時顯示兩者。 | 任意文字 建議文字長度:最多 180 個半形字元 | 
| 字幕清單 | 選用 | 最多 3 個副標題,每個副標題為一行文字。 注意:系統會向使用者顯示說明或副標題清單,但不會同時顯示兩者。 | 任意文字 每個副標題的建議文字長度:最多 50 個半形字元 | 
| 預訂 ID | 選用 | 住宿預訂的預訂 ID。 | 任意文字 | 
| 評分 - 最高值 | 選用 | 分級量表的最高值。 如果同時提供目前的評分值,則必須提供這項屬性。 | 大於或等於 0.0 的數字 | 
| 評分 - 目前的值 | 選用 | 評分量表的目前值。 如果同時提供最高評分值,則須提供這項屬性。 | 大於或等於 0.0 的數字 | 
| 評分 - 次數 | 選用 | 住宿的評分次數。 注意:如果應用程式要控管這項資訊的顯示方式,請提供這個欄位。提供可向使用者顯示的簡短字串。舉例來說,如果計數為 1,000,000,請考慮使用 1M 等縮寫,以免在較小的螢幕上遭到截斷。 | 字串 | 
| 評分 - 次數值 | 選用 | 住宿的評分次數。 注意:如果您不想自行處理顯示縮寫邏輯,請提供這個欄位。如果同時提供「數量」和「數量值」,系統會使用「數量」向使用者顯示 | 長 | 
| 價格 - CurrentPrice | 在特定情況下為必要 | 住宿目前的價格。 如果提供了原價,則必須提供這項屬性。 | 任意文字 | 
| 價格 - StrikethroughPrice | 選用 | 住宿的原始價格,在 UI 中會加上刪除線表示這個價格。 | 任意文字 | 
| 價格摘要 | 選用 | 價格宣傳,用來主打促銷、活動、會員折扣 (如有)。 | 任意文字 建議文字長度:最多 45 個半形字元,過長部分會以刪節號顯示 | 
| DisplayTimeWindow (選用) - 設定內容在途徑上顯示的時間長度 | |||
| 開始時間戳記 | 選用 | Epoch 時間戳記,內容應會在此時間過後顯示在途徑上。 如未設定,表示內容一律會顯示在途徑上。 | 以毫秒為單位的 Epoch 時間戳記 | 
| 結束時間戳記 | 選用 | Epoch 時間戳記,內容在此時間後將不會顯示在途徑上。 如未設定,表示內容一律會顯示在途徑上。 | 以毫秒為單位的 Epoch 時間戳記 | 
TransportationReservationEntity
| 屬性 | 必要性 | 說明 | 格式 | 
|---|---|---|---|
| 動作 URI | 必要 | 服務供應商應用程式中實體的深層連結。 注意:您可以使用深層連結追蹤歸因。 請參閱這篇常見問題文章 | URI | 
| 標題 | 必要 | 實體名稱。 | 任意文字。例如「舊金山到聖地牙哥」 建議文字長度:最多 50 個半形字元 | 
| 交通方式 | 必要 | 預訂的交通方式/類型。 | 列舉:FLIGHT、TRAIN、BUS 或 FERRY | 
| 本地化出發時間 - 時間戳記 | 必要 | 代表出發時間的 Epoch 時間戳記。 | Joda-Time Instant | 
| 本地化出發時間 - 時區 | 必要 | 出發時間的時區。 | Joda-Time DateTimeZone 如需相關指南,請參閱「時區規格」一節。 | 
| 本地化抵達時間 - 時間戳記 | 必要 | 代表抵達時間的 Epoch 時間戳記。 | Joda-Time Instant | 
| 本地化抵達時間 - 時區 | 必要 | 抵達時間的時區。 | Joda-Time DateTimeZone 如需相關指南,請參閱「時區規格」一節。 | 
| 運輸編號 | 必要 | 航班號碼、公車號碼、火車號碼或渡輪/郵輪號碼。 | 任意文字 | 
| 登機時間 (當地時間) - 時間戳記 | 必要 | 代表預訂登機時間的紀元時間戳記 (如適用) | Joda-Time Instant | 
| 本地化登機時間 - 時區 | 必要 | 預訂登機時間的時區 (如適用) | Joda-Time DateTimeZone 如需相關指南,請參閱「時區規格」一節。 | 
| 出發地點 - 國家/地區 | 選用 | 出發國家/地區。 | 任意文字 建議文字長度:最多約 20 個半形字元 | 
| 出發地點 - 城市 | 選用 | 出發城市。 | 任意文字 建議文字長度:最多約 20 個半形字元 | 
| 出發地點 - 顯示地址 | 選用 | 向使用者顯示的起程地點。 | 任意文字 建議文字長度:最多約 20 個半形字元 | 
| 出發地點 - 街道地址 | 選用 | 出發地點的街道地址 (如適用)。 | 任意文字 建議文字長度:最多約 20 個半形字元 | 
| 出發地點 - 州/省 | 選用 | 出發地點的州或省 (如適用)。 | 任意文字 建議文字長度:最多約 20 個半形字元 | 
| 出發地點 - 郵遞區號 | 選用 | 出發地點的郵遞區號 (如適用)。 | 任意文字 建議文字長度:最多約 20 個半形字元 | 
| 出發地點 - 鄰近範圍 | 選用 | 出發地點的鄰近地區 (如適用)。 | 任意文字 建議文字長度:最多約 20 個半形字元 | 
| 抵達地點 - 國家/地區 | 選用 | 抵達國家/地區。 | 任意文字 建議文字長度:最多約 20 個半形字元 | 
| 抵達地點 - 城市 | 選用 | 抵達城市。 | 任意文字 建議文字長度:最多約 20 個半形字元 | 
| 抵達地點 - 顯示地址 | 選用 | 向使用者顯示的抵達地點。 | 任意文字 建議文字長度:最多約 20 個半形字元 | 
| 抵達地點 - 街道地址 | 選用 | 抵達地點的街道地址 (如適用)。 | 任意文字 建議文字長度:最多約 20 個半形字元 | 
| 抵達地點 - 州/省 | 選用 | 抵達地點的州或省 (如適用)。 | 任意文字 建議文字長度:最多約 20 個半形字元 | 
| 抵達地點 - 郵遞區號 | 選用 | 抵達地點的郵遞區號 (如適用)。 | 任意文字 建議文字長度:最多約 20 個半形字元 | 
| 抵達地點 - 鄰里 | 選用 | 抵達地點的鄰近區域 (如適用)。 | 任意文字 建議文字長度:最多約 20 個半形字元 | 
| 服務供應商 - 名稱 | 選用 | 服務供應商名稱。 注意:服務供應商必須提供文字或圖片。 | 任意文字。例如航空公司名稱 | 
| 服務供應商 - 圖片 | 選用 | 服務供應商的標誌/圖片。 注意:服務供應商必須提供文字或圖片。 | 如需相關指南,請參閱「圖片規格」一節。 | 
| 代表圖片 | 選用 | 當您提供多張圖片時,系統只會顯示 1 張圖片。建議長寬比為 16:9 | 如需相關指南,請參閱「圖片規格」一節。 | 
| 說明 | 選用 | 描述實體的單一段落文字。 注意:系統會向使用者顯示說明或副標題清單,但不會同時顯示兩者。 | 任意文字 建議文字長度:最多 180 個半形字元 | 
| 字幕清單 | 選用 | 最多 3 個副標題,每個副標題為一行文字。 注意:系統會向使用者顯示說明或副標題清單,但不會同時顯示兩者。 | 任意文字 每個副標題的建議文字長度:最多 50 個半形字元 | 
| 預訂 ID | 選用 | 交通工具預訂的預訂 ID。 | 任意文字 | 
| 價格 - CurrentPrice | 在特定情況下為必要 | 預訂目前的價格。 如果提供了原價,則必須提供這項屬性。 | 任意文字 | 
| 價格 - StrikethroughPrice | 選用 | 預訂的原始價格,在 UI 中會加上刪除線表示這個價格。 | 任意文字 | 
| 價格摘要 | 選用 | 價格宣傳,用來主打促銷、活動、會員折扣 (如有)。 | 任意文字 建議文字長度:最多 45 個半形字元,過長部分會以刪節號顯示 | 
| DisplayTimeWindow (選用) - 設定內容在途徑上顯示的時間長度 | |||
| 開始時間戳記 | 選用 | Epoch 時間戳記,內容應會在此時間過後顯示在途徑上。 如未設定,表示內容一律會顯示在途徑上。 | 以毫秒為單位的 Epoch 時間戳記 | 
| 結束時間戳記 | 選用 | Epoch 時間戳記,內容在此時間後將不會顯示在途徑上。 如未設定,表示內容一律會顯示在途徑上。 | 以毫秒為單位的 Epoch 時間戳記 | 
VehicleRentalReservationEntity
| 屬性 | 必要性 | 說明 | 格式 | 
|---|---|---|---|
| 動作 URI | 必要 | 服務供應商應用程式中實體的深層連結。 注意:您可以使用深層連結追蹤歸因。 請參閱這篇常見問題文章 | URI | 
| 標題 | 必要 | 實體名稱。 | 任意文字。例如「Avis Union Square SF」 建議文字長度:最多 50 個半形字元 | 
| 本地取貨時間 - 時間戳記 | 必要 | 代表預訂取貨時間的 Epoch 時間戳記。 | Joda-Time Instant | 
| 本地化取貨時間 - 時區 | 必要 | 預約取貨時間的時區。 | Joda-Time DateTimeZone 如需相關指南,請參閱「時區規格」一節。 | 
| 本地化退貨時間 - 時間戳記 | 選用 | 代表預訂退房時間的 Epoch 時間戳記。 | Joda-Time Instant | 
| 本地化退貨時間 - 時區 | 選用 | 預訂退房時間的時區。 | Joda-Time DateTimeZone 如需相關指南,請參閱「時區規格」一節。 | 
| 收件地址 - 國家/地區 | 選用 | 取貨地點所在的國家/地區。 | 任意文字 建議文字長度:最多約 20 個半形字元 | 
| 取貨地址 - 城市 | 選用 | 取貨地點所在的城市。 | 任意文字 建議文字長度:最多約 20 個半形字元 | 
| 取貨地址 - 顯示地址 | 選用 | 向使用者顯示的取貨地點。 | 任意文字 建議文字長度:最多約 20 個半形字元 | 
| 取貨地址 - 街道地址 | 選用 | 取貨地點的街道地址 (如適用)。 | 任意文字 建議文字長度:最多約 20 個半形字元 | 
| 取貨地址 - 州 | 選用 | 取貨地點的州或省 (如適用)。 | 任意文字 建議文字長度:最多約 20 個半形字元 | 
| 取貨地址 - 郵遞區號 | 選用 | 取貨地點的郵遞區號 (如適用)。 | 任意文字 建議文字長度:最多約 20 個半形字元 | 
| 取貨地址 - 鄰近地區 | 選用 | 取貨地點的鄰近區域 (如適用)。 | 任意文字 建議文字長度:最多約 20 個半形字元 | 
| 退貨地址 - 國家/地區 | 選用 | 退貨地點所在國家/地區。 | 任意文字 建議文字長度:最多約 20 個半形字元 | 
| 退貨地址 - 城市 | 選用 | 退貨地點所在的城市。 | 任意文字 建議文字長度:最多約 20 個半形字元 | 
| 退貨地址 - 顯示地址 | 選用 | 向使用者顯示的退貨地點。 | 任意文字 建議文字長度:最多約 20 個半形字元 | 
| 退貨地址 - 街道地址 | 選用 | 退貨地點的街道地址 (如適用)。 | 任意文字 建議文字長度:最多約 20 個半形字元 | 
| 退貨地址 - 州 | 選用 | 退貨地點的州或省 (如適用)。 | 任意文字 建議文字長度:最多約 20 個半形字元 | 
| 退貨地址 - 郵遞區號 | 選用 | 退貨地點的郵遞區號 (如適用)。 | 任意文字 建議文字長度:最多約 20 個半形字元 | 
| 退貨地址 - 鄰近地區 | 選用 | 退貨地點的鄰近區域 (如適用)。 | 任意文字 建議文字長度:最多約 20 個半形字元 | 
| 服務供應商 - 名稱 | 選用 | 服務供應商名稱。 注意:服務供應商必須提供文字或圖片。 | 任意文字。例如「Avis Car Rental」 | 
| 服務供應商 - 圖片 | 選用 | 服務供應商的標誌/圖片。 注意:服務供應商必須提供文字或圖片。 | 如需相關指南,請參閱「圖片規格」一節。 | 
| 代表圖片 | 選用 | 當您提供多張圖片時,系統只會顯示 1 張圖片。建議長寬比為 16:9 | 如需相關指南,請參閱「圖片規格」一節。 | 
| 說明 | 選用 | 描述實體的單一段落文字。 注意:系統會向使用者顯示說明或副標題清單,但不會同時顯示兩者。 | 任意文字 建議文字長度:最多 180 個半形字元 | 
| 字幕清單 | 選用 | 最多 3 個副標題,每個副標題為一行文字。 注意:系統會向使用者顯示說明或副標題清單,但不會同時顯示兩者。 | 任意文字 每個副標題的建議文字長度:最多 50 個半形字元 | 
| 確認 ID | 選用 | 車輛租賃預訂的確認 ID。 | 任意文字 | 
| 價格 - CurrentPrice | 在特定情況下為必要 | 預訂目前的價格。 如果提供了原價,則必須提供這項屬性。 | 任意文字 | 
| 價格 - StrikethroughPrice | 選用 | 預訂的原始價格,在 UI 中會加上刪除線表示這個價格。 | 任意文字 | 
| 價格摘要 | 選用 | 價格宣傳,用來主打促銷、活動、會員折扣 (如有)。 | 任意文字 建議文字長度:最多 45 個半形字元,過長部分會以刪節號顯示 | 
| DisplayTimeWindow (選用) - 設定內容在途徑上顯示的時間長度 | |||
| 開始時間戳記 | 選用 | Epoch 時間戳記,內容應會在此時間過後顯示在途徑上。 如未設定,表示內容一律會顯示在途徑上。 | 以毫秒為單位的 Epoch 時間戳記 | 
| 結束時間戳記 | 選用 | Epoch 時間戳記,內容在此時間後將不會顯示在途徑上。 如未設定,表示內容一律會顯示在途徑上。 | 以毫秒為單位的 Epoch 時間戳記 | 
圖片規格
圖片素材資源的規格規定如下表所示:
| 顯示比例 | 最低像素 | 建議的像素 | 
|---|---|---|
| 正方形 (1x1) 建議採用 | 300x300 | 1200x1200 | 
| 橫向 (1.91x1) | 600x314 | 1200x628 | 
| 直向 (4x5) | 480x600 | 960x1200 | 
圖片必須在公開 CDN 上代管,以便 Google 存取。
檔案格式
PNG、JPG、靜態 GIF、WebP
檔案大小上限
5120 KB
其他建議
- 圖片安全區域:將重要內容放在圖片中央 80% 的範圍內。
- 使用透明背景,讓圖片正確顯示在深色和淺色主題設定中。
時區規格
請優先使用 ID (例如「America/Los_Angeles」),而非時差 (例如「-07:00」)。
範例用法:DateTimeZone.forID("America/Los_Angeles")
內容類別
應用程式可透過內容類別發布屬於多個類別的內容。這會將內容對應至部分預先定義的類別,包括:
- TYPE_EDUCATION
- TYPE_SPORTS
- TYPE_MOVIES_AND_TV_SHOWS
- TYPE_BOOKS
- TYPE_AUDIOBOOKS
- TYPE_MUSIC
- TYPE_DIGITAL_GAMES
- TYPE_TRAVEL_AND_LOCAL
- TYPE_HOME_AND_AUTO
- TYPE_BUSINESS
- TYPE_NEWS
- TYPE_FOOD_AND_DRINK
- TYPE_SHOPPING
- TYPE_HEALTH_AND_FITENESS
- TYPE_MEDICAL
- TYPE_PARENTING
- TYPE_DATING
圖片必須在公開 CDN 上代管,以便 Google 存取。
內容類別使用指南
- 部分實體 (例如 ArticleEntity 和 GenericFeaturedEntity) 適用於任何內容類別。如果是其他實體 (例如 EventEntity、EventReservationEntity、PointOfInterestEntity),只有部分類別符合資格。填入清單前,請先查看實體類型適用的類別清單。
- 對於某些內容類別,請使用特定實體類型,而非一般實體和 ContentCategory 的組合: - TYPE_MOVIES_AND_TV_SHOWS - 使用一般實體前,請先參閱智慧手錶整合指南中的實體。
- TYPE_BOOKS - Check out the EbookEntity before using the generic entities.
- TYPE_AUDIOBOOKS - Check out AudiobookEntity before using the generic entities.
- TYPE_SHOPPING - 結帳前請先查看 ShoppingEntity,再使用一般實體。
- TYPE_FOOD_AND_DRINK - 使用一般實體前,請先參閱食品整合指南中的實體。
 
- ContentCategory 欄位為選填欄位,如果內容不屬於上述任何類別,請將此欄位留空。 
- 如果提供多個內容類別,請依與內容的相關性排序,最相關的內容類別應列在清單最前面。 
步驟 2:提供叢集資料
建議您在背景執行內容發布工作 (例如使用 WorkManager),並安排定期執行或根據事件排程 (例如使用者每次開啟應用程式,或剛將商品加入購物車時)。
AppEngageTravelClient 負責發布叢集。
以下 API 可用於在用戶端發布叢集:
- isServiceAvailable
- publishRecommendationClusters
- publishFeaturedCluster
- publishReservationCluster
- publishContinueSearchCluster
- publishUserAccountManagementRequest
- updatePublishStatus
- deleteRecommendationsClusters
- deleteFeaturedCluster
- deleteReservationCluster
- deleteContinueSearchCluster
- deleteUserManagementCluster
- deleteClusters
isServiceAvailable
這個 API 可用於檢查服務是否可供整合,以及內容是否能在裝置上顯示。
Kotlin
client.isServiceAvailable.addOnCompleteListener { task ->
    if (task.isSuccessful) {
        // Handle IPC call success
        if(task.result) {
          // Service is available on the device, proceed with content publish
          // calls.
        } else {
          // Service is not available, no further action is needed.
        }
    } else {
      // The IPC call itself fails, proceed with error handling logic here,
      // such as retry.
    }
}
Java
client.isServiceAvailable().addOnCompleteListener(task - > {
    if (task.isSuccessful()) {
        // Handle success
        if(task.getResult()) {
          // Service is available on the device, proceed with content publish
          // calls.
        } else {
          // Service is not available, no further action is needed.
        }
    } else {
      // The IPC call itself fails, proceed with error handling logic here,
      // such as retry.
    }
});
publishRecommendationClusters
這個 API 可用於發布 RecommendationCluster 物件清單。
Kotlin
client.publishRecommendationClusters(
      PublishRecommendationClustersRequest.Builder()
        .addRecommendationCluster(
          RecommendationCluster.Builder()
            .addEntity(entity1)
            .addEntity(entity2)
            .setTitle("Top Picks For You")
            .build()
        )
        .build()
    )
Java
client.publishRecommendationClusters(
            new PublishRecommendationClustersRequest.Builder()
                .addRecommendationCluster(
                    new RecommendationCluster.Builder()
                        .addEntity(entity1)
                        .addEntity(entity2)
                        .setTitle("Top Picks For You")
                        .build())
                .build());
服務收到要求後,系統會在單一交易中執行以下動作:
- 移除開發合作夥伴提供的現有 RecommendationCluster資料。
- 剖析要求所提供的資料並儲存在更新後的推薦叢集中。
如果發生錯誤,整個要求都會遭到拒絕,現有狀態則維持不變。
publishFeaturedCluster
這個 API 可用於發布 FeaturedCluster 物件清單。
Kotlin
client.publishFeaturedCluster(
    PublishFeaturedClusterRequest.Builder()
      .setFeaturedCluster(
        FeaturedCluster.Builder()
          .addEntity(entity1)
          .addEntity(entity2)
          .build())
      .build())
Java
client.publishFeaturedCluster(
            new PublishFeaturedClustersRequest.Builder()
                .addFeaturedCluster(
                    new FeaturedCluster.Builder()
                        .addEntity(entity1)
                        .addEntity(entity2)
                        .build())
                .build());
服務收到要求後,系統會在單一交易中執行以下動作:
- 移除開發合作夥伴提供的現有 FeaturedCluster資料。
- 剖析要求所提供的資料並儲存在更新後的精選叢集中。
如果發生錯誤,整個要求都會遭到拒絕,現有狀態則維持不變。
publishReservationCluster
這個 API 可用來發布 ReservationCluster 物件。
Kotlin
client.publishReservationCluster(
    PublishReservationClusterRequest.Builder()
      .setReservationCluster(
        ReservationCluster.Builder()
          .addLodgingReservationEntity(lodgingReservationEntity)
          .addVehicleRentalReservationEntity(vehicleRentalReservationEntity)
          .addTransportationReservationEntity(transportationReservationEntity)
          .addEventReservationEntity(eventReservationEntity)
          .addRestaurantReservationEntity(restaurantReservationEntity)
          .build())
      .build())
Java
client.publishReservationCluster(
            new PublishReservationClusterRequest.Builder()
                .setReservationCluster(
                    new ReservationCluster.Builder()
                        .addLodgingReservationEntity(lodgingReservationEntity)
                        .addVehicleRentalReservationEntity(vehicleRentalReservationEntity)
                        .addTransportationReservationEntity(transportationReservationEntity)
                        .addEventReservationEntity(eventReservationEntity)
                        .addRestaurantReservationEntity(restaurantReservationEntity)
                        .build())
                .build());
服務收到要求後,系統會在單一交易中執行以下動作:
- 移除開發合作夥伴提供的現有 ReservationCluster資料。
- 剖析要求所提供的資料並儲存在更新後的預訂叢集中。
如果發生錯誤,整個要求都會遭到拒絕,現有狀態則維持不變。
publishContinueSearchCluster
這個 API 可用於發布 ContinueSearchCluster 物件清單。
Kotlin
client.publishContinueSearchCluster(
    PublishContinueSearchClusterRequest.Builder()
      .setContinueSearchCluster(
        ContinueSearchCluster.Builder()
          .addPointOfInterestEntity(entity1)
          .addPointOfInterestEntity(entity2)
          .build())
      .build())
Java
client.publishContinueSearchCluster(
            new PublishContinueSearchClusterRequest.Builder()
                .setContinueSearchCluster(
                    new ContinueSearchCluster.Builder()
                        .addPointOfInterestEntity(entity1)
                        .addPointOfInterestEntity(entity2)
                        .build())
                .build());
服務收到要求後,系統會在單一交易中執行以下動作:
- 移除開發合作夥伴提供的現有 ContinueSearchCluster資料。
- 剖析要求所提供的資料並儲存在更新後的繼續搜尋叢集中。
如果發生錯誤,整個要求都會遭到拒絕,現有狀態則維持不變。
publishUserAccountManagementRequest
這個 API 是用來發布「登入」資訊卡。登入動作會將使用者導向應用程式的登入頁面,方便應用程式發布內容 (或提供更個人化的內容)
登入資訊卡包含下列中繼資料:
| 屬性 | 必要性 | 說明 | 
|---|---|---|
| 動作 URI | 必要 | 導向動作的深層連結,也就是前往應用程式登入頁面 | 
| 圖片 | 選用 - 如未提供,則必須提供標題 | 資訊卡上顯示的圖片 解析度 1264x712、顯示比例 16x9 的圖片 | 
| 標題 | 選用 - 如未提供,則必須提供圖片 | 資訊卡上的標題 | 
| 動作文字 | 選用 | 行動號召中顯示的文字,也就是「登入」 | 
| 副標題 | 選用 | 資訊卡上的選用副標題 | 
Kotlin
var SIGN_IN_CARD_ENTITY =
      SignInCardEntity.Builder()
          .addPosterImage(
              Image.Builder()
                  .setImageUri(Uri.parse("http://www.x.com/image.png"))
                  .setImageHeightInPixel(500)
                  .setImageWidthInPixel(500)
                  .build())
          .setActionText("Sign In")
          .setActionUri(Uri.parse("http://xx.com/signin"))
          .build()
client.publishUserAccountManagementRequest(
            PublishUserAccountManagementRequest.Builder()
                .setSignInCardEntity(SIGN_IN_CARD_ENTITY)
                .build());
Java
SignInCardEntity SIGN_IN_CARD_ENTITY =
      new SignInCardEntity.Builder()
          .addPosterImage(
              new Image.Builder()
                  .setImageUri(Uri.parse("http://www.x.com/image.png"))
                  .setImageHeightInPixel(500)
                  .setImageWidthInPixel(500)
                  .build())
          .setActionText("Sign In")
          .setActionUri(Uri.parse("http://xx.com/signin"))
          .build();
client.publishUserAccountManagementRequest(
            new PublishUserAccountManagementRequest.Builder()
                .setSignInCardEntity(SIGN_IN_CARD_ENTITY)
                .build());
服務收到要求後,系統會在單一交易中執行以下動作:
- 移除開發合作夥伴提供的現有 UserAccountManagementCluster資料。
- 剖析要求所提供的資料並儲存在更新後的 UserAccountManagementCluster 叢集中。
如果發生錯誤,整個要求都會遭到拒絕,現有狀態則維持不變。
updatePublishStatus
如因內部業務原因,導致無法發布任何叢集,我們強烈建議使用 updatePublishStatus API 更新發布狀態。這麼做很重要,因為:
- 在所有情況下,提供狀態都至關重要,即使內容已發布 (STATUS == PUBLISHED) 也一樣。如此一來,才能為資訊主頁填入資料,並以明確的狀態表示整合項目的健康度和其他指標。
- 如未發布內容,但整合狀態未遭中斷 (STATUS == NOT_PUBLISHED),Google 便可避免在應用程式健康資訊主頁中觸發快訊。這可從提供者的角度確認內容是因預期的情況而未發布。
- 這有助開發人員深入瞭解資料何時已發布或未發布。
- Google 可能會使用狀態碼,提醒使用者在應用程式中執行特定動作,以便查看或解決應用程式內容。
以下為符合資格的發布狀態碼清單:
// Content is published
AppEngagePublishStatusCode.PUBLISHED,
// Content is not published as user is not signed in
AppEngagePublishStatusCode.NOT_PUBLISHED_REQUIRES_SIGN_IN,
// Content is not published as user is not subscribed
AppEngagePublishStatusCode.NOT_PUBLISHED_REQUIRES_SUBSCRIPTION,
// Content is not published as user location is ineligible
AppEngagePublishStatusCode.NOT_PUBLISHED_INELIGIBLE_LOCATION,
// Content is not published as there is no eligible content
AppEngagePublishStatusCode.NOT_PUBLISHED_NO_ELIGIBLE_CONTENT,
// Content is not published as the feature is disabled by the client
// Available in v1.3.1
AppEngagePublishStatusCode.NOT_PUBLISHED_FEATURE_DISABLED_BY_CLIENT,
// Content is not published as the feature due to a client error
// Available in v1.3.1
AppEngagePublishStatusCode.NOT_PUBLISHED_CLIENT_ERROR,
// Content is not published as the feature due to a service error
// Available in v1.3.1
AppEngagePublishStatusCode.NOT_PUBLISHED_SERVICE_ERROR,
// Content is not published due to some other reason
// Reach out to engage-developers@ before using this enum.
AppEngagePublishStatusCode.NOT_PUBLISHED_OTHER
如果內容因使用者未登入而未發布,建議您發布登入資訊卡。如因任何原因導致提供者無法發布登入資訊卡,建議您呼叫 updatePublishStatus API,並使用狀態碼 NOT_PUBLISHED_REQUIRES_SIGN_IN。
Kotlin
client.updatePublishStatus(
   PublishStatusRequest.Builder()
     .setStatusCode(AppEngagePublishStatusCode.NOT_PUBLISHED_REQUIRES_SIGN_IN)
     .build())
Java
client.updatePublishStatus(
    new PublishStatusRequest.Builder()
        .setStatusCode(AppEngagePublishStatusCode.NOT_PUBLISHED_REQUIRES_SIGN_IN)
        .build());
deleteRecommendationClusters
這個 API 可用來刪除推薦叢集的內容。
Kotlin
client.deleteRecommendationClusters()
Java
client.deleteRecommendationClusters();
服務收到要求後,會從推薦叢集中移除現有資料。如果發生錯誤,整個要求都會遭到拒絕,現有狀態則維持不變。
deleteFeaturedCluster
這個 API 可用來刪除精選叢集的內容。
Kotlin
client.deleteFeaturedCluster()
Java
client.deleteFeaturedCluster();
服務收到要求後,會從精選叢集中移除現有資料。如果發生錯誤,整個要求都會遭到拒絕,現有狀態則維持不變。
deleteReservationCluster
這個 API 可用來刪除預訂叢集的內容。
Kotlin
client.deleteReservationCluster()
Java
client.deleteReservationCluster();
服務收到要求後,會從預訂叢集中移除現有資料。如果發生錯誤,整個要求都會遭到拒絕,現有狀態則維持不變。
deleteUserManagementCluster
這個 API 可用來刪除 UserAccountManagement 叢集的內容。
Kotlin
client.deleteUserManagementCluster()
Java
client.deleteUserManagementCluster();
服務收到要求後,會從 UserAccountManagement 叢集中移除現有資料。如果發生錯誤,整個要求都會遭到拒絕,現有狀態則維持不變。
deleteContinueSearchCluster
這個 API 可用來刪除「繼續搜尋」叢集的內容。
Kotlin
client.deleteContinueSearchCluster()
Java
client.deleteContinueSearchCluster();
服務收到要求後,會從繼續搜尋叢集中移除現有資料。如果發生錯誤,整個要求都會遭到拒絕,現有狀態則維持不變。
deleteClusters
這個 API 可用於刪除指定叢集類型的內容。
Kotlin
client.deleteClusters(
    DeleteClustersRequest.Builder()
      .addClusterType(ClusterType.TYPE_RESERVATION)
      .addClusterType(ClusterType.TYPE_FEATURED)
      .addClusterType(ClusterType.TYPE_RECOMMENDATION)
      .addClusterType(ClusterType.TYPE_CONTINUE_SEARCH)
      .build())
Java
client.deleteClusters(
            new DeleteClustersRequest.Builder()
                .addClusterType(ClusterType.TYPE_RESERVATION)
                .addClusterType(ClusterType.TYPE_FEATURED)
                .addClusterType(ClusterType.TYPE_RECOMMENDATION)
                .addClusterType(ClusterType.TYPE_CONTINUE_SEARCH)
                .build());
服務收到要求後,會從符合指定叢集類型的所有叢集中移除現有資料。用戶端可以選擇傳遞一或多個叢集類型。如果發生錯誤,整個要求都會遭到拒絕,現有狀態則維持不變。
處理錯誤
強烈建議您監聽來自發布 API 的工作結果,據以採取後續動作來復原及重新提交能順利執行的工作。
Kotlin
client.publishRecommendationClusters(
        PublishRecommendationClustersRequest.Builder()
          .addRecommendationCluster(..)
          .build())
      .addOnCompleteListener { task ->
        if (task.isSuccessful) {
          // do something
        } else {
          val exception = task.exception
          if (exception is AppEngageException) {
            @AppEngageErrorCode val errorCode = exception.errorCode
            if (errorCode == AppEngageErrorCode.SERVICE_NOT_FOUND) {
              // do something
            }
          }
        }
      }
Java
client.publishRecommendationClusters(
              new PublishRecommendationClustersRequest.Builder()
                  .addRecommendationCluster(...)
                  .build())
          .addOnCompleteListener(
              task -> {
                if (task.isSuccessful()) {
                  // do something
                } else {
                  Exception exception = task.getException();
                  if (exception instanceof AppEngageException) {
                    @AppEngageErrorCode
                    int errorCode = ((AppEngageException) exception).getErrorCode();
                    if (errorCode == AppEngageErrorCode.SERVICE_NOT_FOUND) {
                      // do something
                    }
                  }
                }
              });
發生錯誤時會傳回 AppEngageException,並提供原因的錯誤代碼。
| 錯誤代碼 | 錯誤名稱 | 附註 | 
|---|---|---|
| 1 | SERVICE_NOT_FOUND | 這項服務不適用於指定裝置。 | 
| 2 | SERVICE_NOT_AVAILABLE | 這項服務適用於指定裝置,但無法於呼叫期間使用 (例如服務已明確停用)。 | 
| 3 | SERVICE_CALL_EXECUTION_FAILURE | 執行緒發生問題,因此工作執行失敗。在這種情況下,您可以重試。 | 
| 4 | SERVICE_CALL_PERMISSION_DENIED | 呼叫端未獲准發出服務呼叫。 | 
| 5 | SERVICE_CALL_INVALID_ARGUMENT | 要求包含無效的資料 (例如,超過允許的叢集數量上限)。 | 
| 6 | SERVICE_CALL_INTERNAL | 服務端發生錯誤。 | 
| 7 | SERVICE_CALL_RESOURCE_EXHAUSTED | 服務呼叫過於頻繁。 | 
步驟 3:處理廣播意圖
除了透過工作發出發布內容 API 呼叫,您還需要設定 BroadcastReceiver 來接收內容發布要求。
廣播意圖的目標主要用於應用程式重新啟動及強制同步處理資料。廣播意圖的傳送頻率通常不高。觸發廣播意圖的唯一時機,就是 Engage Service 判定內容可能過時 (例如已滿一週)。這樣一來,即使應用程式已有長時間未執行,使用者也能獲得最新的內容體驗。
BroadcastReceiver 必須透過下列兩種方式進行設定:
- 使用 - Context.registerReceiver()以動態方式註冊- BroadcastReceiver類別的例項。這樣就能接收仍在記憶體中的應用程式訊息。
Kotlin
class AppEngageBroadcastReceiver : BroadcastReceiver(){
  // Trigger recommendation cluster publish when PUBLISH_RECOMMENDATION broadcast
  // is received
  // Trigger featured cluster publish when PUBLISH_FEATURED broadcast is received
  // Trigger continue search cluster publish when PUBLISH_CONTINUE_SEARCH
  // broadcast is received
  // Trigger reservation cluster publish when PUBLISH_RESERVATION broadcast is
  // received
}
fun registerBroadcastReceivers(context: Context){
  var  context = context
  context = context.applicationContext
// Register Recommendation Cluster Publish Intent
  context.registerReceiver(AppEngageBroadcastReceiver(),
                           IntentFilter(com.google.android.engage.service.Intents.ACTION_PUBLISH_RECOMMENDATION),
                           com.google.android.engage.service.BroadcastReceiverPermissions.BROADCAST_REQUEST_DATA_PUBLISH_PERMISSION,
                           /*scheduler=*/null)
// Register Featured Cluster Publish Intent
  context.registerReceiver(AppEngageBroadcastReceiver(),
                           IntentFilter(com.google.android.engage.service.Intents.ACTION_PUBLISH_FEATURED),
                           com.google.android.engage.service.BroadcastReceiverPermissions.BROADCAST_REQUEST_DATA_PUBLISH_PERMISSION,
                           /*scheduler=*/null)
// Register Continue Search Cluster Publish Intent
  context.registerReceiver(AppEngageBroadcastReceiver(),
                           IntentFilter(com.google.android.engage.travel.service.Intents.ACTION_PUBLISH_CONTINUE_SEARCH),
                           com.google.android.engage.service.BroadcastReceiverPermissions.BROADCAST_REQUEST_DATA_PUBLISH_PERMISSION,
                           /*scheduler=*/null)
// Register Reservation Cluster Publish Intent
  context.registerReceiver(AppEngageBroadcastReceiver(),
                           IntentFilter(com.google.android.engage.travel.service.Intents.ACTION_PUBLISH_RESERVATION),
                           com.google.android.engage.service.BroadcastReceiverPermissions.BROADCAST_REQUEST_DATA_PUBLISH_PERMISSION,
                           /*scheduler=*/null)
}
Java
class AppEngageBroadcastReceiver extends BroadcastReceiver {
// Trigger recommendation cluster publish when PUBLISH_RECOMMENDATION broadcast
// is received
// Trigger featured cluster publish when PUBLISH_FEATURED broadcast is received
// Trigger continue search cluster publish when PUBLISH_CONTINUE_SEARCH
// broadcast is received
// Trigger reservation cluster publish when PUBLISH_RESERVATION broadcast is
// received
}
public static void registerBroadcastReceivers(Context context) {
context = context.getApplicationContext();
// Register Recommendation Cluster Publish Intent
context.registerReceiver(new AppEngageBroadcastReceiver(),
                         new IntentFilter(com.google.android.engage.service.Intents.ACTION_PUBLISH_RECOMMENDATION),
                         com.google.android.engage.service.BroadcastReceiverPermissions.BROADCAST_REQUEST_DATA_PUBLISH_PERMISSION,
                         /*scheduler=*/null);
// Register Featured Cluster Publish Intent
context.registerReceiver(new AppEngageBroadcastReceiver(),
                         new IntentFilter(com.google.android.engage.service.Intents.ACTION_PUBLISH_FEATURED),
                         com.google.android.engage.service.BroadcastReceiverPermissions.BROADCAST_REQUEST_DATA_PUBLISH_PERMISSION,
                         /*scheduler=*/null);
// Register Continue Search Cluster Publish Intent
context.registerReceiver(new AppEngageBroadcastReceiver(),
                         new IntentFilter(com.google.android.engage.travel.service.Intents.ACTION_PUBLISH_CONTINUE_SEARCH),
                         com.google.android.engage.service.BroadcastReceiverPermissions.BROADCAST_REQUEST_DATA_PUBLISH_PERMISSION,
                         /*scheduler=*/null);
// Register Reservation Cluster Publish Intent
context.registerReceiver(new AppEngageBroadcastReceiver(),
                         new IntentFilter(com.google.android.engage.travel.service.Intents.ACTION_PUBLISH_RESERVATION),
                         com.google.android.engage.service.BroadcastReceiverPermissions.BROADCAST_REQUEST_DATA_PUBLISH_PERMISSION,
                         /*scheduler=*/null);
}
- 在 - AndroidManifest.xml檔案中使用- <receiver>標記,以靜態方式宣告實作項目。這樣應用程式就能在未執行的狀態下接收廣播意圖,也能發布內容。
<application>
   <receiver
      android:name=".AppEngageBroadcastReceiver"
      android:permission="com.google.android.engage.REQUEST_ENGAGE_DATA"
      android:exported="true"
      android:enabled="true">
      <intent-filter>
         <action android:name="com.google.android.engage.action.PUBLISH_RECOMMENDATION" />
      </intent-filter>
      <intent-filter>
         <action android:name="com.google.android.engage.action.PUBLISH_FEATURED" />
      </intent-filter>
      <intent-filter>
         <action android:name="com.google.android.engage.action.travel.PUBLISH_CONTINUE_SEARCH" />
      </intent-filter>
      <intent-filter>
         <action android:name="com.google.android.engage.action.travel.PUBLISH_RESERVATION" />
      </intent-filter>
   </receiver>
</application>
服務會傳送下列意圖:
- com.google.android.engage.action.PUBLISH_RECOMMENDATION建議在收到此意圖時啟動- publishRecommendationClusters呼叫。
- com.google.android.engage.action.PUBLISH_FEATURED建議在收到此意圖時啟動- publishFeaturedCluster呼叫。
- com.google.android.engage.action.travel.PUBLISH_CONTINUE_SEARCH建議在收到此意圖時啟動- publishContinueSearchCluster呼叫。
- com.google.android.engage.action.travel.PUBLISH_RESERVATION建議在收到此意圖時啟動- publishReservationCluster呼叫。
整合工作流程
如需整合完成後驗證作業的逐步指南,請參閱「Engage 開發人員整合工作流程」一文。
常見問題
請參閱「Engage SDK 常見問題」。
聯絡資訊
如果在整合過程中有任何問題,請來信至 engage-developers@google.com 與我們聯絡。
後續步驟
完成這項整合後,後續步驟如下:
- 傳送電子郵件至 engage-developers@google.com,並附上整合完成可供 Google 測試的 APK。
- Google 會在內部執行驗證及審查,確認整合項目能夠正常運作。如果需要進行變更,Google 會與您聯絡並提供所有必要詳細資料。
- 測試完成後,如果不需要進行任何變更,Google 會與您聯絡,通知您可以開始將完成整合的更新版 APK 發布至 Play 商店。
- Google 確認您已將更新版 APK 發布至 Play 商店後,就會發布您的推薦、精選、預訂和繼續搜尋叢集供使用者瀏覽。
