关于 engage-sdk-integration
面向 Android 开发者的 Play Engage SDK 集成技能,按应用垂直领域指导实体映射、发布代码生成、配置和构建验证。
主要功能
- 01按垂直领域查找实体与客户端
- 02生成发布所需的结构化代码
- 03映射本地模型到 Engage 实体
- 04配置 Gradle 与清单
- 05执行编译和集成核验
适用场景
- 01为应用发布 Engage 内容集群
- 02将本地数据转换为 Engage 实体
- 03排查发布接收器和构建配置
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ android/ skills --skill engage-sdk-integration安装后在 Claude Code 中输入/engage-sdk-integration确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/clusters.mdcommon.mdpatterns.mdrequests.mdtroubleshooting.mdreferences/android/guide/playcore/engage/faq.mdfood.mdhealthandfitness.mdlisten.mdotherverticals.mdread.mdshopping.mdsocial.mdtravel.mdwatch.mdreferences/android/guide/playcore/engage/tv/entitlements.mdgetting-started.mdrecommendations.mdreferences/android/guide/playcore/engage/tv/continue-watching/index.mdreferences/schemas/food.mdlisten.mdother.mdread.mdshopping.mdsocial.mdtravel.mdtv.mdwatch.md详细介绍
本技能将指导你把 Play Engage SDK 集成到 Android 应用中,确保代码遵循强制结构,并为每个垂直领域使用必需的 Engage 实体。
工作流
按照以下步骤协助开发者:
-
识别垂直领域和集群:
- 根据 references/schemas/ 询问开发者其应用属于哪个垂直领域。
- 检查集成面向 TV 还是移动设备。如果集成面向 TV,也要阅读 patterns.md 中针对 TV 的部分。
- 使用 references/schemas/ 目录中的
{VERTICAL}.md,确定相应的 Engage 实体和client类名。JSON 中的client字段提供完整类名。例如:com.google.android.engage.food.service.AppEngageFoodClient。 - 注意: 初始化客户端类需要传入
Context参数。例如:AppEngageFoodClient(context)。 - 务必参考 common.md 了解通用实体。
- 询问开发者希望从该垂直领域支持的集群类型中发布哪种集群。
- 在 references/schemas/ 目录中的
{VERTICAL}.md里查找指定集群对应的调用方法。每种方法都会说明其所需的请求。 - 从 requests.md 获取请求结构,并从 clusters.md 获取集群。然后建议并使用数据源,正确填充请求结构中的字段以及所需的实体和集群。
-
生成结构化样板代码:
- 为所有 Engage 相关代码新建一个目录。目录名称应符合现有代码库的命名约定。
- 使用 patterns.md 中的模板生成以下类:
Constants:存放尝试次数和发布类型等常量值。ItemToEntityConverter:将应用的本地模型转换为 Engage 的 Entity 模型。ClusterRequestFactory:构建发布请求。EngageWorker:使用 WorkManager 处理实际发布和发布错误。EngagePublisher:编排定期任务和一次性任务。EngageBroadcastReceiver:监听 AppEngageService intents,并通过EngagePublisher启动一次性发布任务。重要:同时实现静态注册和动态注册模式,包括在EngageBroadcastReceiver类内部实现伴生对象register方法。
-
建议实体映射:
- 请开发者提供其本地模型架构(例如,数据类或 JSON 片段)。
- 如果开发者尚未提供,请分享 references/schemas/ 目录中
{VERTICAL}.md里的实体作为参考。 - 确定本地模型后,建议其与相应 Engage 实体之间的映射。
- 使用 patterns.md 中的
ItemToEntityConverter模式生成转换逻辑,并将其添加到生成的{ENGAGE_CODE_DIR}/ItemToEntityConverter中。
-
建议数据源:
- 请开发者提供实际要发布的数据源。
- 确定数据源后,使用它按应用的本地模型架构获取数据。
- 使用
{ENGAGE_CODE_DIR}/ItemToEntityConverter将这些数据转换为 Engage 实体。 - 使用获取到的 Engage 实体模型数据,通过
{ENGAGE_CODE_DIR}/ ClusterRequestFactory获取集群请求。 - 在
{ENGAGE_CODE_DIR}/EngageWorker中,使用上一步获取的请求,调用 references/schemas/ 目录中{VERTICAL}.md对应的集群发布方法。
-
Gradle 和清单文件更新:
- 提议更新
build.gradle和AndroidManifest.xml。 - 对于移动应用,请使用 patterns.md。
- 对于 TV 应用,请使用 patterns.md 中针对 TV 的章节。
- 根据 patterns.md,提供
build.gradle或build.gradle.kts所需的implementation依赖项。 - 提供
AndroidManifest.xml的<receiver>和<service>声明。 - 注意:除 TV 外,其他垂直领域都没有专用导入。对于所有其他垂直领域,
com.google.android.engage:engage-core:1.6.0即可满足需求。
- 提议更新
-
调试和验证:
- 自我验证清单:在确认工作完成之前,必须验证已实现以下所有内容:
- [ ] 在
AndroidManifest.xml中(<application>标签内)静态注册了EngageBroadcastReceiver。 - [ ] 在
Application类或主Activity类中,通过调用EngageBroadcastReceiver.register(context)动态注册了EngageBroadcastReceiver。 - [ ] 在
EngageBroadcastReceiver的companion object中实现了register方法,以处理动态注册。 - [ ] 在
EngageWorker中处理了空数据列表(例如,删除集群,而不是发布空数据)。 - [ ] 所有 Gradle 编译都使用了
--no-daemon。
- [ ] 在
- 执行 Gradle 同步。
- 如果发生错误(例如导入失败、命名空间冲突或编译错误),请阅读 references/troubleshooting.md 并解决问题。
- 执行 Gradle 编译。必须运行
./gradlew compileDebugUnitTestSources --no-daemon或./gradlew assembleDebug --no-daemon。有关编译规则以及快速编译捷径的警告,请参阅 references/troubleshooting.md。重复此步骤,直到编译成功。
- 自我验证清单:在确认工作完成之前,必须验证已实现以下所有内容:
-
**用户检查清单:**代码生成结束时,告知用户按以下清单检查集成是否完整且符合预期:
- [ ] 确认在
{ENGAGE_CODE_DIR}/中创建了所有与 Engage 相关的文件:ConstantsItemToEntityConverterClusterRequestFactoryEngageWorker{cluster_type}PublisherEngageBroadcastReceiver
- [ ] 确认应用的本地模型已通过在
{ENGAGE_CODE_DIR}/ItemToEntityConverter中正确填充模型字段,转换为 Engage 实体。 - [ ] 确认
ItemToEntityConverter中的所有图像 URI 均指向符合该垂直领域严格宽高比要求的图像(例如,16:9、1:1、2:3)。 - [ ] 确认
{ENGAGE_CODE_DIR}/EngageWorker使用了第 4 步中确定的数据源。 - [ ] 确认在
Application类或MainActivity中调用了EngageBroadcastReceiver.register(context),以动态注册接收器。 - [ ] 确认
AndroidManifest.xml包含EngageBroadcastReceiver的静态<receiver>声明,并带有必要的 intent 操作。 - 重要:明确指示开发者在自定义
Application类的onCreate()中(或主 Activity 的onCreate()中)调用EngageBroadcastReceiver.register(context),以动态注册接收器。强调集成正常运行需要同时进行静态和动态注册。
- [ ] 确认在
参考资料
评论
支持 Markdown