在用户所在的位置触达他们,提高应用互动度。集成 Engage SDK,以便在收藏、Entertainment Space 和 Play 商店等多个设备端展示途径中,直接向用户推送个性化推荐和续播内容。集成后,平均 APK 的大小(压缩后)会增加不到 50 KB,并且大多数应用只需开发者花费大约一周的时间。如需了解详情,请访问我们的企业网站。
本指南包含面向开发者合作伙伴的说明,介绍了如何向 Engage 内容途径提供旅游和活动内容。
集成详情
术语
此集成包含以下集群类型:推荐、精选、预订和继续搜索。
推荐集群用于显示来自单个开发者合作伙伴的个性化旅游和活动建议。此类推荐既可以针对用户个性化定制,也可以一般化(例如,热门商品)。使用这些参数可显示文章、活动、住宿或感兴趣地点的推荐。
- 推荐集群可以由
ArticleEntity
、EventEntity
、LodgingEntity
、PointOfInterestEntity
或StoreEntity
列表组成,但不能由不同实体类型组合而成。
您的推荐将采用如下结构:
推荐集群:一个界面视图,其中包含来自同一开发者合作伙伴的一组推荐。
实体:代表集群中单个内容的对象。此集成提供了一些实体,这些实体将使用推荐集群显示:
ArticleEntity:ArticleEntity 表示与旅游和活动相关的基于文本的内容的推荐。可用于文章、博文、营销内容、新闻摘要等。
图 1:界面显示了“推荐”集群中的单个 ArticleEntity。 EventEntity:EventEntity 表示未来发生的活动。活动开始时间是一项需要传达给用户的关键信息。
图 2:界面显示了推荐集群中的单个 EventEntity。 LodgingEntity:LodgingEntity 表示住宿,例如酒店、公寓、短期和长期出租的度假屋。
图 3:界面显示了推荐集群中的单个 LodgingEntity。 StoreEntity:StoreEntity 表示商店、餐厅、咖啡馆等。它突出显示了餐饮场所或商店是需要传达给用户的关键信息的内容。
图 4:界面显示了推荐集群中的单个 StoreEntity。 PointOfInterestEntity:PointOfInterestEntity 表示兴趣点,例如加油站、活动场地、主题公园、博物馆、旅游景点、远足小径等。它突出显示位置信息是需要传达给用户的关键信息的内容。不应将其用于住宿场所、商店或餐饮场所。
图 5:界面显示了“推荐”集群中的单个 PointOfInterestEntity。
- 推荐集群可以由
预订集群用于在单个界面分组中显示来自多个开发者合作伙伴、最近与用户互动过的内容。每个开发者合作伙伴都可以在预订集群中广播最多 10 个实体。
预留内容可以采用以下结构:
RestaurantReservationEntity:RestaurantReservationEntity 表示餐厅或咖啡馆的预订,可帮助用户跟踪即将到来的或正在进行的餐厅预订。
图 6. 界面显示预订集群中的单个 RestaurantReservationEntity。 EventReservationEntity:EventReservationEntity 表示活动的预订,可帮助用户跟踪即将开始或正在进行的活动预订。活动可能包括但不限于以下内容:
- 体育赛事,例如预订足球比赛
- 游戏活动,例如预订电子竞技比赛
- 娱乐活动,例如预订电影院的电影、音乐会、剧院、签书会
- 旅游或景点预订,例如导游陪同参观、博物馆门票
- 社交活动 / 研讨会 / 会议预约
- 教育 / 培训课程预约
图 7. 界面显示预订集群内的单个 EventReservationEntity。 LodgingReservationEntity:LodgingEntityReservation 表示旅游住宿的预订,可帮助用户跟踪即将开始或正在进行的酒店或民宿预订。
图 8. 界面显示预订集群内的单个 LodgingReservationEntity。 TransportationReservationEntity:TransportationReservationEntity 表示任何模式的交通预订,可帮助用户跟踪即将开始或正在进行的航班、渡轮、火车、公交车、网约车或邮轮预订。
图 9. 界面显示预订集群中的单个 TransportationReservationEntity。 VehicleRentalReservationEntity:VehicleRentalReservationEntity 表示车辆租赁预订,可帮助用户跟踪即将到来的或正在进行的车辆租赁预订。
图 10. 界面显示预订集群内的单个 VehicleRentalReservationEntity。
精选集群用于在一个界面分组中展示来自多个开发者合作伙伴的精选实体。精选集群只有一个,并将显示在界面顶部附近,其展示位置的优先级高于所有推荐集群。每个开发者合作伙伴最多可以在精选集群中广播 10 个实体。
GenericFeaturedEntity:GenericFeaturedEntity 与推荐项不同,精选项应仅用于开发者提供的单个热门内容,并且应代表对用户而言最重要、最有趣且最相关的内容。
图 11:显示包含 GenericFeaturedEntity 列表的 FeaturedCluster 的界面
继续搜索集群通过显示用户最近在所有旅游应用中搜索过的搜索查询列表,帮助用户继续之前的旅游搜索历程。该集群将固定在第二位,位于预订集群之后,精选集群和推荐集群之前。每个开发者合作伙伴最多可以在“继续搜索”集群中广播 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 定义了不同的实体来代表每种内容类型。对于“旅游和活动”类别,我们支持下列实体:
GenericFeaturedEntity
ArticleEntity
EventEntity
LodgingEntity
StoreEntity
PointOfInterestEntity
RestaurantReservationEntity
EventReservationEntity
LodgingReservationEntity
TransportationReservationEntity
VehicleRentalReservationEntity
下面的图表列出了每种类型的可用属性和相关要求。
GenericFeaturedEntity
属性 | 要求 | 说明 | 格式 |
---|---|---|---|
操作 URI | 必需 |
指向提供商应用中实体的深层链接。 注意:您可以使用深层链接进行归因。 请参阅此常见问题解答 |
URI |
海报图片 | 必需 | 如果提供了多张图片,我们只会显示 1 张图片。 建议的宽高比为 16:9 注意:如果提供了徽章,请确保图片顶部和底部都有 24 dps 的安全空间 |
如需相关指导,请参阅图片规范。 |
标题 | 可选 | 实体的标题。 | 自由文本 建议的文本大小:50 个字符 |
说明 | 可选 | 用于描述实体的单个文本段落。 注意:系统会向用户显示说明或字幕列表,但不会同时显示这两者。 |
自由文本 建议的文本大小:180 个字符 |
字幕列表 | 可选 | 最多 3 个字幕,每个字幕为一行文字。 注意:系统会向用户显示说明或字幕列表,但不会同时显示这两者。 |
自由文本 每个字幕建议的文本大小:最多 50 个字符 |
徽章 | 可选 | 每个徽章可以是自由格式的文字(最多 15 个字符),也可以是小图片。 图片/视频上的特殊用户体验处理,例如图片上的徽章叠加层
|
|
徽章 - 文字 | 可选 | 徽章的标题 注意:徽章必须包含文字或图片 |
自由文本 建议的文字大小:最多 15 个字符 |
徽章 - 图片 | 可选 | 小图片 特殊用户体验处理,例如在图片/视频缩略图上叠加徽章。 注意:徽章必须包含文字或图片 |
如需相关指导,请参阅图片规范。 |
内容类别 | 可选 | 描述实体中内容的类别。 | 枚举列表 如需相关指导,请参阅“内容类别”部分。 |
DisplayTimeWindow(可选)- 设置要在界面上显示内容的时间范围 | |||
开始时间戳 | 可选 |
纪元时间戳,在其之后相应内容应显示在 surface 上。 如果未设置,相应内容将有资格显示在 surface 上。 |
纪元时间戳(以毫秒为单位) |
结束时间戳 | 可选 |
纪元时间戳,在其之后相应内容不再显示在 surface 上。 如果未设置,相应内容将有资格显示在 surface 上。 |
纪元时间戳(以毫秒为单位) |
ArticleEntity
属性 | 要求 | 说明 | 格式 |
---|---|---|---|
操作 URI | 必需 |
指向提供商应用中实体的深层链接。 注意:您可以使用深层链接进行归因。 请参阅此常见问题解答 |
URI |
标题 | 必需 | 实体的标题。 | 自由文本 建议的文本大小:最多 50 个字符 |
海报图片 | 可选 | 如果提供了多张图片,我们只会显示 1 张图片。 建议的宽高比为 16:9 注意:强烈建议添加图片。如果提供了徽章,请确保图片顶部和底部都有 24 dps 的安全空间 |
如需相关指导,请参阅图片规范。 |
来源 - 标题 | 可选 | 作者、组织或记者的名称 | 自由文本 建议的文本大小:少于 25 个字符 |
来源 - 图片 | 可选 | 来源的图片,例如作者、组织、记者 | 如需相关指导,请参阅图片规范。 |
说明 | 可选 | 用于描述实体的单个文本段落。 注意:系统会向用户显示说明或字幕列表,但不会同时显示这两者。 |
自由文本 建议的文本大小:180 个字符 |
字幕列表 | 可选 | 最多 3 个字幕,每个字幕为一行文字。 注意:系统会向用户显示说明或字幕列表,但不会同时显示这两者。 |
自由文本 每个字幕建议的文本大小:最多 50 个字符 |
徽章 | 可选 | 每个徽章可以是自由格式的文字(最多 15 个字符),也可以是小图片。 图片/视频上的特殊用户体验处理,例如图片上的徽章叠加层
|
|
徽章 - 文字 | 可选 | 徽章的标题 注意:徽章必须包含文字或图片 |
自由文本 建议的文字大小:最多 15 个字符 |
徽章 - 图片 | 可选 | 小图片 特殊用户体验处理,例如在图片/视频缩略图上叠加徽章。 注意:徽章必须包含文字或图片 |
如需相关指导,请参阅图片规范。 |
内容发布时间 | 可选 | 这是内容在应用中发布 / 更新时的纪元时间戳(以毫秒为单位)。 | 纪元时间戳(以毫秒为单位) |
上次互动时长 | 可选 | 用户上次与相应实体互动时的时间戳(以自纪元以来经历的毫秒数表示)。 |
纪元时间戳(以毫秒为单位) |
进度百分比 | 可选 | 用户迄今为止已消费的完整内容所占的百分比。 |
一个介于 0 到 100(含)之间的整数值。 |
内容类别 | 可选 | 描述实体中内容的类别。 | 枚举列表 如需相关指导,请参阅“内容类别”部分。 |
DisplayTimeWindow(可选)- 设置要在界面上显示内容的时间范围 | |||
开始时间戳 | 可选 |
纪元时间戳,在其之后相应内容应显示在 surface 上。 如果未设置,相应内容将有资格显示在 surface 上。 |
纪元时间戳(以毫秒为单位) |
结束时间戳 | 可选 |
纪元时间戳,在其之后相应内容不再显示在 surface 上。 如果未设置,相应内容将有资格显示在 surface 上。 |
纪元时间戳(以毫秒为单位) |
EventEntity
属性 | 要求 | 说明 | 格式 |
---|---|---|---|
操作 URI | 必需 |
指向提供商应用中实体的深层链接。 注意:您可以使用深层链接进行归因。 请参阅此常见问题解答 |
URI |
标题 | 必需 | 实体的标题。 | 字符串 建议的文本大小:最多 50 个字符 |
本地化开始时间 - 时间戳 | 必需 |
活动预计开始的纪元时间戳。 |
Joda-Time Instant |
本地化开始时间 - 时区 | 必需 |
活动预计开始的时区。 |
Joda-Time DateTimeZone 如需相关指导,请参阅时区规范。 |
活动模式 | 必需 | 一个字段,用于指明活动是线上活动、线下活动还是线上线下混合活动。 |
枚举:VIRTUAL、IN_PERSON 或 HYBRID |
海报图片 | 必需 | 如果提供了多张图片,我们只会显示 1 张图片。 建议的宽高比为 16:9 注意:强烈建议添加图片。如果提供了徽章,请确保图片顶部和底部都有 24 dps 的安全空间 |
如需相关指导,请参阅图片规范。 |
位置 - 国家/地区 | 在特定条件下必需 | 活动举办的国家/地区。 注意:对于 IN_PERSON 或 HYBRID 活动,此属性是必需的 |
自由文本 建议的文本大小:最多约 20 个字符 |
地点 - 城市 | 在特定条件下必需 | 活动举办的城市。 注意:对于 IN_PERSON 或 HYBRID 活动,此属性是必需的 |
自由文本 建议的文本大小:最多约 20 个字符 |
位置 - 显示地址 | 在特定条件下必需 | 活动举办的地址或场地名称,应向用户显示。 注意:对于 IN_PERSON 或 HYBRID 活动,此属性是必需的 |
自由文本 建议的文本大小:最多约 20 个字符 |
地点 - 街道地址 | 可选 | 活动举办地点的街道地址(如果适用)。 | 自由文本 建议的文本大小:最多约 20 个字符 |
位置 - 省/自治区/直辖市 | 可选 | 活动举办地所在的州或省(如果适用)。 | 自由文本 建议的文本大小:最多约 20 个字符 |
位置信息 - 邮政编码 | 可选 | 活动举办地点的邮政编码(如果适用)。 | 自由文本 建议的文本大小:最多约 20 个字符 |
位置 - 社区 | 可选 | 活动举办地所在的社区(如果适用)。 | 自由文本 建议的文本大小:最多约 20 个字符 |
结束时间 | 可选 |
活动预计结束的纪元时间戳。 注意:此值将以毫秒为单位表示。 |
纪元时间戳(以毫秒为单位) |
说明 | 可选 | 用于描述实体的单个文本段落。 注意:系统会向用户显示说明或字幕列表,但不会同时显示这两者。 |
自由文本 建议的文本大小:180 个字符 |
字幕列表 | 可选 | 最多 3 个字幕,每个字幕为一行文字。 注意:系统会向用户显示说明或字幕列表,但不会同时显示这两者。 |
自由文本 每个字幕建议的文本大小:最多 50 个字符 |
徽章 | 可选 |
每个徽章可以是自由格式的文字(最多 15 个字符),也可以是小图片。 |
|
徽章 - 文字 | 可选 | 徽章的标题 注意:徽章必须包含文字或图片 |
自由文本 建议的文字大小:最多 15 个字符 |
徽章 - 图片 | 可选 | 小图片 特殊用户体验处理,例如在图片/视频缩略图上叠加徽章。 注意:徽章必须包含文字或图片 |
如需相关指导,请参阅图片规范。 |
价格 - CurrentPrice | 在特定条件下必需 |
活动门票/通行证的当前价格。 如果提供带删除线的价格,则必须提供。 |
自由文本 |
价格 - StrikethroughPrice | 可选 | 活动门票/通行证的原价。 | 自由文本 |
价格宣传信息 | 可选 | 用于展示促销、活动、会员折扣(如果有)的价格宣传信息。 | 自由文本 建议的文本大小:少于 45 个字符(如果文本过长,可能会显示省略号) |
内容类别 | 可选 | 描述实体中内容的类别。 | 符合条件的枚举列表
如需相关指导,请参阅“内容类别”部分。 |
DisplayTimeWindow(可选)- 设置要在界面上显示内容的时间范围 | |||
开始时间戳 | 可选 |
纪元时间戳,在其之后相应内容应显示在 surface 上。 如果未设置,相应内容将有资格显示在 surface 上。 |
纪元时间戳(以毫秒为单位) |
结束时间戳 | 可选 |
纪元时间戳,在其之后相应内容不再显示在 surface 上。 如果未设置,相应内容将有资格显示在 surface 上。 |
纪元时间戳(以毫秒为单位) |
LodgingEntity
属性 | 要求 | 说明 | 格式 |
---|---|---|---|
操作 URI | 必需 |
指向提供商应用中实体的深层链接。 注意:您可以使用深层链接进行归因。 请参阅此常见问题解答 |
URI |
标题 | 必需 | 实体的标题。 | 字符串 建议的文本大小:最多 50 个字符 |
海报图片 | 必需 |
如果提供了多张图片,我们只会显示 1 张图片。建议的宽高比为 16:9 注意:如果提供了徽章,请确保图片顶部和底部都有 24 dps 的安全空间 |
如需相关指导,请参阅图片规范。 |
位置 - 国家/地区 | 必需 | 住宿发生的国家/地区。 | 自由文本 建议的文本大小:最多约 20 个字符 |
地点 - 城市 | 必需 | 住宿所在的城市。 | 自由文本 建议的文本大小:最多约 20 个字符 |
位置 - 显示地址 | 必需 | 将向用户显示的地址。对于大多数使用情形,建议添加城市名称,并尽可能添加州或国家/地区。仅当用户靠近相应位置、熟悉相应位置或城市包含在集群标题中时,才添加街道地址或社区。如果您要添加街道地址,请提供简明扼要的地址,尽可能使用缩写(例如,“St”表示“Street”,“Ave”表示“Avenue”)。 | 自由文本 建议的文本大小:最多约 20 个字符 |
地点 - 街道地址 | 可选 | 住宿的街道地址(如适用)。 | 自由文本 建议的文本大小:最多约 20 个字符 |
位置 - 省/自治区/直辖市 | 可选 | 住宿所在的州或省(如果适用)。 | 自由文本 建议的文本大小:最多约 20 个字符 |
位置信息 - 邮政编码 | 可选 | 住宿的邮政编码(如适用)。 | 自由文本 建议的文本大小:最多约 20 个字符 |
位置 - 社区 | 可选 | 住宿的社区(如果适用)。 | 自由文本 建议的文本大小:最多约 20 个字符 |
徽章 | 可选 |
每个徽章可以是自由格式的文字(最多 15 个字符),也可以是小图片。 |
|
徽章 - 文字 | 可选 | 徽章的标题 注意:徽章必须包含文字或图片 |
自由文本 建议的文字大小:最多 15 个字符 |
徽章 - 图片 | 可选 | 小图片 特殊用户体验处理,例如在图片/视频缩略图上叠加徽章。 注意:徽章必须包含文字或图片 |
如需相关指导,请参阅图片规范。 |
说明 | 可选 | 用于描述实体的单个文本段落。 注意:系统会向用户显示说明或字幕列表,但不会同时显示这两者。 |
自由文本 建议的文本大小:180 个字符 |
字幕列表 | 可选 | 最多 3 个字幕,每个字幕为一行文字。 注意:系统会向用户显示说明或字幕列表,但不会同时显示这两者。 |
自由文本 每个字幕建议的文本大小:最多 50 个字符 |
AvailabilityTimeWindow - 本地化开始时间 - 时间戳 | 可选 | 住宿预计开放/可供预订的纪元时间戳。 | Joda-Time Instant |
AvailabilityTimeWindow - 本地化开始时间 - 时区 | 可选 | 住宿预计开放/可供预订的时区。 |
Joda-Time DateTimeZone 如需相关指导,请参阅时区规范。 |
AvailabilityTimeWindow - 本地化结束时间 - 时间戳 | 可选 | 住宿预计开放/可供预订的纪元时间戳。 | Joda-Time Instant |
AvailabilityTimeWindow - 本地化结束时间 - 时区 | 可选 | 住宿预计开放/可供预订的时区。 |
Joda-Time DateTimeZone 如需相关指导,请参阅时区规范。 |
评分 - 最大值 | 可选 | 评分量表的最大值。 如果同时提供当前评分值,则必须提供。 |
数值 >= 0.0 |
评分 - 当前值 | 可选 | 评分量表的当前值。 如果同时提供最大评分值,则必须提供。 |
数值 >= 0.0 |
评分 - 数量 | 可选 | 住宿的评分数量。 注意:如果您的应用想要控制此字段向用户的显示方式,请提供此字段。提供可向用户显示的简洁字符串。例如,如果数量为 1,000,000,请考虑使用 1M 等缩写形式,这样就不会在较小的显示尺寸上被截断。 |
字符串 |
评分 - 计数值 | 可选 | 住宿的评分数量。 注意:如果您不想自行处理显示缩写逻辑,请提供此字段。如果同时存在“数量”和“数量值”,我们将使用“数量”向用户显示 |
长 |
价格 - CurrentPrice | 在特定条件下必需 | 住宿的当前价格。 如果提供带删除线的价格,则必须提供。 |
自由文本 |
价格 - StrikethroughPrice | 可选 | 住宿的原价,在界面中带有删除线。 | 自由文本 |
价格宣传信息 | 可选 | 用于展示促销、活动、会员折扣(如果有)的价格宣传信息。 | 自由文本 建议的文本大小:少于 45 个字符(如果文本过长,可能会显示省略号) |
DisplayTimeWindow(可选)- 设置要在界面上显示内容的时间范围 | |||
开始时间戳 | 可选 |
纪元时间戳,在其之后相应内容应显示在 surface 上。 如果未设置,相应内容将有资格显示在 surface 上。 |
纪元时间戳(以毫秒为单位) |
结束时间戳 | 可选 |
纪元时间戳,在其之后相应内容不再显示在 surface 上。 如果未设置,相应内容将有资格显示在 surface 上。 |
纪元时间戳(以毫秒为单位) |
StoreEntity
StoreEntity
对象代表开发者合作伙伴想要发布的单个商店,例如与旅行体验相关的热门餐饮场所或餐馆。
属性 | 要求 | 说明 | 格式 |
---|---|---|---|
海报图片 | 必需 | 必须提供至少一张图片。 | 如需相关指导,请参阅图片规范。 |
操作 URI | 必需 |
指向提供商应用中实体的深层链接。 注意:您可以使用深层链接进行归因。 请参阅此常见问题解答 |
URI |
标题 | 可选 | 商店的名称。 | 自由文本 建议的文本大小:少于 45 个字符(如果文本过长,可能会显示省略号) |
位置 | 可选 | 商店的位置信息。 | 自由文本 建议的文本大小:少于 45 个字符(如果文本过长,可能会显示省略号) |
宣传信息 | 可选 | 用于展示商店的促销、活动或最新动态的宣传信息(如果有)。 | 自由文本 建议的文本大小:少于 45 个字符(如果文本过长,可能会显示省略号) |
宣传信息附属细则 | 可选 | 宣传信息的附属细则文本。 | 自由文本 建议的文本大小:少于 45 个字符(如果文本过长,可能会显示省略号) |
说明 | 可选 | 商店的说明。 | 自由文本 建议的文本大小:少于 90 个字符(如果文本过长,可能会显示省略号) |
类别 | 可选 | 商店的类别,在餐饮场所的背景下,可以是“法式”“新美式”“拉面”“精致餐饮”等美食。 |
自由文本 建议的文本大小:少于 45 个字符(如果文本过长,可能会显示省略号) |
评分 - 最大值 | 可选 | 评分量表的最大值。 如果同时提供当前评分值,则必须提供。 |
数值 >= 0.0 |
评分 - 当前值 | 可选 | 评分量表的当前值。 如果同时提供最大评分值,则必须提供。 |
数值 >= 0.0 |
评分 - 数量 | 可选 | 住宿的评分数量。 注意:如果您的应用想要控制此字段向用户的显示方式,请提供此字段。提供可向用户显示的简洁字符串。例如,如果数量为 1,000,000,请考虑使用 1M 等缩写形式,这样就不会在较小的显示尺寸上被截断。 |
字符串 |
评分 - 计数值 | 可选 | 住宿的评分数量。 注意:如果您不想自行处理显示缩写逻辑,请提供此字段。如果同时存在“数量”和“数量值”,我们将使用“数量”向用户显示 |
长 |
DisplayTimeWindow(可选)- 设置要在界面上显示内容的时间范围 | |||
开始时间戳 | 可选 |
纪元时间戳,在其之后相应内容应显示在 surface 上。 如果未设置,相应内容将有资格显示在 surface 上。 |
纪元时间戳(以毫秒为单位) |
结束时间戳 | 可选 |
纪元时间戳,在其之后相应内容不再显示在 surface 上。 如果未设置,相应内容将有资格显示在 surface 上。 |
纪元时间戳(以毫秒为单位) |
PointOfInterestEntity
属性 | 要求 | 说明 | 格式 |
---|---|---|---|
操作 URI | 必需 |
指向提供商应用中实体的深层链接。 注意:您可以使用深层链接进行归因。 请参阅此常见问题解答 |
URI |
标题 | 必需 | 实体的标题。 | 字符串 建议的文本大小:最多 50 个字符 |
海报图片 | 在特定条件下必需 |
如果提供了多张图片,我们只会显示 1 张图片。 建议的宽高比为 16:9 注意:如果实体属于推荐集群,则必须提供图片。如果提供了徽章,请确保图片顶部和底部都有 24 dps 的安全空间 |
如需相关指导,请参阅图片规范。 |
上次互动时长 | 在特定条件下必需 |
用户上次与相应实体互动时的时间戳(以纪元时间为单位)。 注意:如果实体属于继续搜索集群,则此字段为必需字段。 |
Joda-Time Instant |
位置 - 国家/地区 | 在特定条件下必需 |
兴趣点所在的国家/地区。 注意:如果实体属于推荐聚类,则此字段为必需字段。 |
自由文本 建议的文本大小:最多约 20 个字符 |
地点 - 城市 | 在特定条件下必需 |
兴趣点所在的城市。 注意:如果实体属于推荐聚类,则此字段为必需字段。 |
自由文本 建议的文本大小:最多约 20 个字符 |
位置 - 显示地址 | 在特定条件下必需 |
将向用户显示的地址。提供简明扼要的地址,尽可能使用缩写(例如,“St”表示“Street”,“Ave”表示“Avenue”)。此字符串可能会因用户的设备和设置而截断。请添加城市名称,以便清晰识别。 注意:如果实体属于推荐聚类,则此字段为必需字段。 |
自由文本 建议的文本大小:最多约 35 个字符 |
地点 - 街道地址 | 可选 | 相应地点的街道地址(如果适用)。 | 自由文本 建议的文本大小:最多约 20 个字符 |
位置 - 省/自治区/直辖市 | 可选 | 相应兴趣点所在的州或省(如果适用)。 | 自由文本 建议的文本大小:最多约 20 个字符 |
位置信息 - 邮政编码 | 可选 | 相应兴趣点的邮政编码(如适用)。 | 自由文本 建议的文本大小:最多约 20 个字符 |
位置 - 社区 | 可选 | 相应兴趣点的社区(如果适用)。 | 自由文本 建议的文本大小:最多约 20 个字符 |
AvailabilityTimeWindow - 本地化开始时间 - 时间戳 | 可选 | 相应兴趣点预计开放/可用的时间(以纪元时间戳表示)。 | Joda-Time Instant |
AvailabilityTimeWindow - 本地化开始时间 - 时区 | 可选 | 相应兴趣点预计开放/可用的时区。 |
Joda-Time DateTimeZone 如需相关指导,请参阅时区规范。 |
AvailabilityTimeWindow - 本地化结束时间 - 时间戳 | 可选 | 相应兴趣点预计开放/可用的时间(以纪元时间戳表示)。 | Joda-Time Instant |
AvailabilityTimeWindow - 本地化结束时间 - 时区 | 可选 | 相应兴趣点预计开放/可用的时区。 |
Joda-Time DateTimeZone 如需相关指导,请参阅时区规范。 |
徽章 | 可选 |
每个徽章可以是自由格式的文字(最多 15 个字符),也可以是小图片。 |
|
徽章 - 文字 | 可选 | 徽章的标题 注意:徽章必须包含文字或图片 |
自由文本 建议的文字大小:最多 15 个字符 |
徽章 - 图片 | 可选 | 小图片 特殊用户体验处理,例如在图片/视频缩略图上叠加徽章。 注意:徽章必须包含文字或图片 |
如需相关指导,请参阅图片规范。 |
说明 | 可选 | 用于描述实体的单个文本段落。 注意:系统会向用户显示说明或字幕列表,但不会同时显示这两者。 |
自由文本 建议的文本大小:180 个字符 |
字幕列表 | 可选 | 最多 3 个字幕,每个字幕为一行文字。 注意:系统会向用户显示说明或字幕列表,但不会同时显示这两者。 |
自由文本 每个字幕建议的文本大小:最多 50 个字符 |
评分 - 最大值 | 可选 | 评分量表的最大值。 如果同时提供当前评分值,则必须提供。 |
数值 >= 0.0 |
评分 - 当前值 | 可选 | 评分量表的当前值。 如果同时提供最大评分值,则必须提供。 |
数值 >= 0.0 |
评分 - 数量 | 可选 | 相应地图注点的评分数量。 注意:如果您的应用想要控制此字段向用户的显示方式,请提供此字段。提供可向用户显示的简洁字符串。例如,如果数量为 1,000,000,请考虑使用 1M 等缩写形式,这样就不会在较小的显示尺寸上被截断。 |
字符串 |
评分 - 计数值 | 可选 | 相应地图注点的评分数量。 注意:如果您不想自行处理显示缩写逻辑,请提供此字段。如果同时存在“数量”和“数量值”,我们将使用“数量”向用户显示 |
长 |
价格 - CurrentPrice | 在特定条件下必需 |
相应景点的门票/入场券的当前价格。 如果提供带删除线的价格,则必须提供。 |
自由文本 |
价格 - StrikethroughPrice | 可选 | 相应景点的门票/入场券的原价。 | 自由文本 |
价格宣传信息 | 可选 | 用于展示促销、活动、会员折扣(如果有)的价格宣传信息。 |
自由文本 建议的文本大小:少于 45 个字符(如果文本过长,可能会显示省略号) |
内容类别 | 可选 | 描述实体中内容的类别。 | 符合条件的枚举列表
如需相关指导,请参阅“内容类别”部分。 |
DisplayTimeWindow(可选)- 设置要在界面上显示内容的时间范围 | |||
开始时间戳 | 可选 |
纪元时间戳,在其之后相应内容应显示在 surface 上。 如果未设置,相应内容将有资格显示在 surface 上。 |
纪元时间戳(以毫秒为单位) |
结束时间戳 | 可选 |
纪元时间戳,在其之后相应内容不再显示在 surface 上。 如果未设置,相应内容将有资格显示在 surface 上。 |
纪元时间戳(以毫秒为单位) |
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(可选)- 设置要在界面上显示内容的时间范围 | |||
开始时间戳 | 可选 |
纪元时间戳,在其之后相应内容应显示在 surface 上。 如果未设置,相应内容将有资格显示在 surface 上。 |
纪元时间戳(以毫秒为单位) |
结束时间戳 | 可选 |
纪元时间戳,在其之后相应内容不再显示在 surface 上。 如果未设置,相应内容将有资格显示在 surface 上。 |
纪元时间戳(以毫秒为单位) |
EventReservationEntity
属性 | 要求 | 说明 | 格式 |
---|---|---|---|
操作 URI | 必需 |
指向提供商应用中实体的深层链接。 注意:您可以使用深层链接进行归因。 请参阅此常见问题解答 |
URI |
标题 | 必需 | 实体的标题。 | 字符串 建议的文本大小:最多 50 个字符 |
本地化开始时间 - 时间戳 | 必需 |
活动预计开始的纪元时间戳。 |
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 dps 的安全空间 |
如需相关指导,请参阅图片规范。 |
本地化结束时间 - 时间戳 | 可选 |
活动预计结束的纪元时间戳。 |
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(可选)- 设置要在界面上显示内容的时间范围 | |||
开始时间戳 | 可选 |
纪元时间戳,在其之后相应内容应显示在 surface 上。 如果未设置,相应内容将有资格显示在 surface 上。 |
纪元时间戳(以毫秒为单位) |
结束时间戳 | 可选 |
纪元时间戳,在其之后相应内容不再显示在 surface 上。 如果未设置,相应内容将有资格显示在 surface 上。 |
纪元时间戳(以毫秒为单位) |
LodgingReservationEntity
属性 | 要求 | 说明 | 格式 |
---|---|---|---|
操作 URI | 必需 |
指向提供商应用中实体的深层链接。 注意:您可以使用深层链接进行归因。 请参阅此常见问题解答 |
URI |
标题 | 必需 | 实体的标题。 | 自由文本。例如,“您 12 月 12 日起的住宿” 建议的文本大小:最多 50 个字符 |
本地化入住时间 - 时间戳 | 必需 | 表示预订入住时间的纪元时间戳。 | Joda-Time Instant |
本地化入住时间 - 时区 | 必需 | 预订的入住时间所在的时区。 |
Joda-Time DateTimeZone 如需相关指导,请参阅时区规范。 |
本地化退房时间 - 时间戳 | 必需 | 表示预订退房时间的周期时间戳。 | Joda-Time Instant |
本地化退房时间 - 时区 | 必需 | 相应预订的退房时间所在的时区。 |
Joda-Time DateTimeZone 如需相关指导,请参阅时区规范。 |
位置 - 国家/地区 | 必需 | 住宿所在的国家/地区。 | 自由文本 建议的文本大小:最多约 20 个字符 |
地点 - 城市 | 必需 | 住宿所在的城市。 | 自由文本 建议的文本大小:最多约 20 个字符 |
位置 - 显示地址 | 必需 | 将向用户显示的地址。提供简明扼要的地址,尽可能使用缩写(例如,“St”表示“Street”,“Ave”表示“Avenue”)。此字符串可能会因用户的设备和设置而截断。请添加城市名称,以便清晰标识。 | 自由文本 建议的文本大小:最多约 35 个字符 |
地点 - 街道地址 | 可选 | 住宿的街道地址(如适用)。 | 自由文本 建议的文本大小:最多约 20 个字符 |
位置 - 省/自治区/直辖市 | 可选 | 住宿所在的州或省(如果适用)。 | 自由文本 建议的文本大小:最多约 20 个字符 |
位置信息 - 邮政编码 | 可选 | 住宿的邮政编码(如适用)。 | 自由文本 建议的文本大小:最多约 20 个字符 |
位置 - 社区 | 可选 | 住宿的社区(如果适用)。 | 自由文本 建议的文本大小:最多约 20 个字符 |
海报图片 | 可选 |
如果提供了多张图片,我们只会显示 1 张图片。建议的宽高比为 16:9 注意:如果提供徽章,请确保图片顶部和底部都有 24 dps 的安全空间 |
如需相关指导,请参阅图片规范。 |
说明 | 可选 | 用于描述实体的单个文本段落。 注意:系统会向用户显示说明或字幕列表,但不会同时显示这两者。 |
自由文本 建议的文本大小:180 个字符 |
字幕列表 | 可选 | 最多 3 个字幕,每个字幕为一行文字。 注意:系统会向用户显示说明或字幕列表,但不会同时显示这两者。 |
自由文本 每个字幕建议的文本大小:最多 50 个字符 |
预留 ID | 可选 | 住宿预订的预订 ID。 | 自由文本 |
评分 - 最大值 | 可选 | 评分量表的最大值。 如果同时提供当前评分值,则必须提供。 |
数值 >= 0.0 |
评分 - 当前值 | 可选 | 评分量表的当前值。 如果同时提供最大评分值,则必须提供。 |
数值 >= 0.0 |
评分 - 数量 | 可选 | 住宿的评分数量。 注意:如果您的应用想要控制此字段向用户的显示方式,请提供此字段。提供可向用户显示的简洁字符串。例如,如果数量为 1,000,000,请考虑使用 1M 等缩写形式,这样就不会在较小的显示尺寸上被截断。 |
字符串 |
评分 - 计数值 | 可选 | 住宿的评分数量。 注意:如果您不想自行处理显示缩写逻辑,请提供此字段。如果同时存在“数量”和“数量值”,我们将使用“数量”向用户显示 |
长 |
价格 - CurrentPrice | 在特定条件下必需 | 住宿的当前价格。 如果提供带删除线的价格,则必须提供。 |
自由文本 |
价格 - StrikethroughPrice | 可选 | 住宿的原价,在界面中带有删除线。 | 自由文本 |
价格宣传信息 | 可选 | 用于展示促销、活动、会员折扣(如果有)的价格宣传信息。 | 自由文本 建议的文本大小:少于 45 个字符(如果文本过长,可能会显示省略号) |
DisplayTimeWindow(可选)- 设置要在界面上显示内容的时间范围 | |||
开始时间戳 | 可选 |
纪元时间戳,在其之后相应内容应显示在 surface 上。 如果未设置,相应内容将有资格显示在 surface 上。 |
纪元时间戳(以毫秒为单位) |
结束时间戳 | 可选 |
纪元时间戳,在其之后相应内容不再显示在 surface 上。 如果未设置,相应内容将有资格显示在 surface 上。 |
纪元时间戳(以毫秒为单位) |
TransportationReservationEntity
属性 | 要求 | 说明 | 格式 |
---|---|---|---|
操作 URI | 必需 |
指向提供商应用中实体的深层链接。 注意:您可以使用深层链接进行归因。 请参阅此常见问题解答 |
URI |
标题 | 必需 | 实体的标题。 | 自由文本。例如,“从旧金山到圣地亚哥” 建议的文本大小:最多 50 个字符 |
运输类型 | 必需 | 预订的交通方式/类型。 | 枚举值:FLIGHT、TRAIN、BUS 或 FERRY |
本地化出发时间 - 时间戳 | 必需 | 表示出发时间的纪元时间戳。 | Joda-Time Instant |
本地化起飞时间 - 时区 | 必需 | 出发时间对应的时区。 |
Joda-Time DateTimeZone 如需相关指导,请参阅时区规范。 |
本地化到达时间 - 时间戳 | 必需 | 表示到达时间的纪元时间戳。 | 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 | 可选 | 预订的原始价格,在界面中带有删除线。 | 自由文本 |
价格宣传信息 | 可选 | 用于展示促销、活动、会员折扣(如果有)的价格宣传信息。 | 自由文本 建议的文本大小:少于 45 个字符(如果文本过长,可能会显示省略号) |
DisplayTimeWindow(可选)- 设置要在界面上显示内容的时间范围 | |||
开始时间戳 | 可选 |
纪元时间戳,在其之后相应内容应显示在 surface 上。 如果未设置,相应内容将有资格显示在 surface 上。 |
纪元时间戳(以毫秒为单位) |
结束时间戳 | 可选 |
纪元时间戳,在其之后相应内容不再显示在 surface 上。 如果未设置,相应内容将有资格显示在 surface 上。 |
纪元时间戳(以毫秒为单位) |
VehicleRentalReservationEntity
属性 | 要求 | 说明 | 格式 |
---|---|---|---|
操作 URI | 必需 |
指向提供商应用中实体的深层链接。 注意:您可以使用深层链接进行归因。 请参阅此常见问题解答 |
URI |
标题 | 必需 | 实体的标题。 | 自由文本。例如,“Avis Union Square SF” 建议的文本大小:最多 50 个字符 |
本地化取件时间 - 时间戳 | 必需 | 表示预订取车时间的纪元时间戳。 | 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 个字符 |
服务提供商 - 名称 | 可选 |
服务提供商的名称。 注意:服务提供商必须提供文本或图片。 |
自由文本。例如,“Avis Car Rental” |
服务提供商 - 图片 | 可选 |
服务提供商的徽标/图片。 注意:服务提供商必须提供文本或图片。 |
如需相关指导,请参阅图片规范。 |
海报图片 | 可选 |
如果提供了多张图片,我们只会显示 1 张图片。建议的宽高比为 16:9 |
如需相关指导,请参阅图片规范。 |
说明 | 可选 | 用于描述实体的单个文本段落。 注意:系统会向用户显示说明或字幕列表,但不会同时显示这两者。 |
自由文本 建议的文本大小:180 个字符 |
字幕列表 | 可选 | 最多 3 个字幕,每个字幕为一行文字。 注意:系统会向用户显示说明或字幕列表,但不会同时显示这两者。 |
自由文本 每个字幕建议的文本大小:最多 50 个字符 |
确认 ID | 可选 | 车辆租赁预订的确认 ID。 | 自由文本 |
价格 - CurrentPrice | 在特定条件下必需 | 预订的当前价格。 如果提供带删除线的价格,则必须提供。 |
自由文本 |
价格 - StrikethroughPrice | 可选 | 预订的原始价格,在界面中带有删除线。 | 自由文本 |
价格宣传信息 | 可选 | 用于展示促销、活动、会员折扣(如果有)的价格宣传信息。 | 自由文本 建议的文本大小:少于 45 个字符(如果文本过长,可能会显示省略号) |
DisplayTimeWindow(可选)- 设置要在界面上显示内容的时间范围 | |||
开始时间戳 | 可选 |
纪元时间戳,在其之后相应内容应显示在 surface 上。 如果未设置,相应内容将有资格显示在 surface 上。 |
纪元时间戳(以毫秒为单位) |
结束时间戳 | 可选 |
纪元时间戳,在其之后相应内容不再显示在 surface 上。 如果未设置,相应内容将有资格显示在 surface 上。 |
纪元时间戳(以毫秒为单位) |
图片规范
下表列出了图片资源必须遵循的规范:
宽高比 | 最小像素 | 建议的像素 |
---|---|---|
方形 (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 - 在使用通用实体之前,请先查看 EbookEntity。
- TYPE_AUDIOBOOKS - 在使用通用实体之前,请先查看 AudiobookEntity。
- 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 | 必需 | 指向操作的深层链接(比如进入应用登录页面) |
图片 | 可选;如果不提供图片,则必须提供标题 |
卡片上显示的图片 宽高比为 16x9 且分辨率为 1264x712 的图片 |
标题 | 可选;如果不提供标题,则必须提供图片 | 卡片上的标题 |
操作文本 | 可选 | CTA 上显示的文字(比如“登录”) |
副标题 | 可选 | 卡片上的可选副标题 |
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
如果内容因用户未登录而未发布,Google 建议发布登录卡片。如果提供商因任何原因无法发布登录卡片,建议调用 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();
当服务收到请求时,此 API 会从建议集群中移除现有数据。如果发生错误,系统将拒绝整个请求,并保留现有状态。
deleteFeaturedCluster
此 API 用于删除精选集群的内容。
Kotlin
client.deleteFeaturedCluster()
Java
client.deleteFeaturedCluster();
当服务收到请求时,此 API 会从精选集群中移除现有数据。如果发生错误,系统将拒绝整个请求,并保留现有状态。
deleteReservationCluster
此 API 用于删除预订集群的内容。
Kotlin
client.deleteReservationCluster()
Java
client.deleteReservationCluster();
当服务收到请求时,此 API 会从预订集群中移除现有数据。如果发生错误,系统将拒绝整个请求,并保留现有状态。
deleteUserManagementCluster
此 API 用于删除 UserAccountManagement 集群的内容。
Kotlin
client.deleteUserManagementCluster()
Java
client.deleteUserManagementCluster();
当服务收到请求时,此 API 会从 UserAccountManagement 集群中移除现有数据。如果发生错误,系统将拒绝整个请求,并保留现有状态。
deleteContinueSearchCluster
此 API 用于删除“继续搜索”集群的内容。
Kotlin
client.deleteContinueSearchCluster()
Java
client.deleteContinueSearchCluster();
当服务收到请求时,此 API 会从“继续搜索”集群中移除现有数据。如果发生错误,系统将拒绝整个请求,并保留现有状态。
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 会从所有与指定集群类型匹配的集群中移除现有数据。客户端可以选择传递一个或多个集群类型。如果发生错误,系统将拒绝整个请求,并保留现有状态。
错误处理
强烈建议开发者监听来自发布 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 步:处理广播 intent
除了通过作业发出发布内容 API 调用外,还需要设置 BroadcastReceiver
来接收内容发布请求。
广播 intent 主要用于重新激活应用和强制同步数据。不应过于频繁地发送广播 intent。仅在 Engage Service 确定内容可能已过时(例如,内容是一周前的)的情况下,广播 intent 才会触发。这样一来,开发者将更加确信,即使应用长时间未执行,用户也能够获得新鲜的内容体验。
必须通过以下两种方式设置 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>
标记静态声明实现。这样一来,应用便可以在未运行时接收广播 intent,并且应用也可以发布内容。
<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>
该服务会发送以下 intent:
com.google.android.engage.action.PUBLISH_RECOMMENDATION
建议在收到此 intent 时启动publishRecommendationClusters
调用。com.google.android.engage.action.PUBLISH_FEATURED
建议在收到此 intent 时启动publishFeaturedCluster
调用。com.google.android.engage.action.travel.PUBLISH_CONTINUE_SEARCH
建议在收到此 intent 时启动publishContinueSearchCluster
调用。com.google.android.engage.action.travel.PUBLISH_RESERVATION
建议在收到此 intent 时启动publishReservationCluster
调用。
集成工作流
如需查看在集成完成后验证集成的分步指南,请参阅 Engage 开发者集成工作流程。
常见问题解答
如需查看常见问题解答,请参阅 Engage SDK 常见问题解答。
联系人
如果在集成过程中有任何疑问,请与 engage-developers@google.com 联系。
后续步骤
完成此集成后,请执行下列后续步骤:
- 发送电子邮件至 engage-developers@google.com,并将可供 Google 测试的集成 APK 添加为附件。
- Google 会执行验证,并在内部进行审核,以确保集成按预期运行。如果需要更改,Google 会与您联系,将所有必要的详细信息告知您。
- 测试完毕后,如果无需进行任何更改,Google 将与您联系,向您说明您已可以开始将经过更新的集成 APK 发布到 Play 商店。
- 在 Google 确认经过更新的 APK 已发布到 Play 商店后,您的推荐、精选、预订和继续搜索集群便可被发布并向用户显示。