步骤10: 测试表述和观察日志
现在该测试您的技能并观察Alexa向您的应用发送的指令了。您可以通过Android Studio中的Logcat窗格或终端中的Grep命令查看交互。
- 设置Fire TV设备
- 连接到Fire TV并运行应用
- 说出测试表述
- 隐式与显式表述
- 在日志中查看指令的命令
- 更详细的日志演练
- 故障排除
- 为认证做准备: 您必须处理的必要指令
- 提交以进行认证和发布
- 后续步骤: 电视直播集成?
设置Fire TV设备
您需要一台与开发者账户关联的Fire TV设备,例如Fire TV Stick 4K,才能测试您的VSK集成。Fire TV设备的遥控器需要有麦克风按钮。设置您的Fire TV并将其注册到您的开发者账户。
连接到Fire TV并运行应用
- 连接到Fire TV设备。有关如何通过ADB将计算机连接到Fire TV的详细信息,请参阅通过ADB连接到Fire TV。
-
打开Android Studio,选择app(应用)配置,然后选择要运行应用的Fire TV设备(例如 “Amazon AFTMM”)。(“AFTMM” 是指Fire TV构建型号)
-
单击Run App(运行应用)按钮,将您的应用侧载到Fire TV上。
在您的应用构建和运行时,单击Android Studio底部的Logcat选项卡以监控日志消息。
示例应用注意事项
示例应用的主屏幕如下所示:
如果您在此步骤中遇到问题,请尝试用以下方法进行故障排除:
- 如果您收到错误消息(例如,某些条目名称发生冲突),请转到Build(构建)> Rebuild Project(重建项目)以查看它是否清除了任何过时的作品,然后再次运行该应用。
- 如果您遇到安装冲突,请确保您的Fire TV中没有任何其他具有相同程序包名称的应用。根据需要卸载任何应用(Settings(设置)> Applications(应用)> Manage Installed Applications(管理已安装应用))。
- 如果应用加载了空白屏幕或存在其他问题,请打开Logcat并就 “Error”(错误)进行筛选。 如果您看到错误消息 “Invalid API key”(API密钥无效),请检查并确保使用之前配置的自定义firetv签名密钥对应用进行签名。
说出测试表述
当应用在Fire TV的前台运行时(意即该应用是您当前正在查看的激活应用),按下遥控器上的麦克风按钮,然后说:“Alexa, watch Batman”(Alexa,观看蝙蝠侠)(或IMDb目录中的任何其他电影或电视节目标题)。
示例应用应播放视频(不是蝙蝠侠,而是普通视频)。如关于示例应用中所述,示例应用通过程序包前缀
com.example.vskfiretv
映射到IMDb目录。因此,当您要求提供几乎任何电影或电视节目时,示例应用应将该请求识别为其可用目录中的标题,并将相应的指令发送到您的应用。该应用支持SearchAndPlay
和SearchAndDisplayResults
指令以及来自PlaybackController
的指令。隐式与显式表述
在进入各种测试案例并开始检查日志之前,请注意可以在哪些不同的环境中提出请求/进行表述:
- 隐式定向: 未指定内容提供方或应用名称的语音命令,例如 “Watch Batman”(观看蝙蝠侠)。 Alexa在整个目录中查找匹配项。
- 显式定向: 指定内容提供方或应用名称的语音命令,例如"Watch Batman on app name"(在某应用上观看蝙蝠侠)。 Alexa仅在应用的目录中查找匹配项。
- 在应用位于前台的情况下隐式定向。如果您的应用在前台(而不是后台),并且您说 “Watch Batman”(观看蝙蝠侠),Alexa会在前台目录的应用(而不是所有目录)中寻找匹配项。如果前台应用可以处理该指令,则Alexa会允许前台应用处理该指令。如果不能,那么Alexa会提出该问题来消除歧义:“I can do that on Fire TV or Prime video, which would you like?”(我可以在Fire TV或Prime Video上进行该操作,您喜欢哪个?) 请注意,即使您未在请求中指定应用名称,在前台使用您的应用发出请求也会模拟显式定向。
请注意,只有在(1)完成目录集成,以及(2) 您已将应用(不一定集成了VSK)提交到生产环境或进入动态应用测试(LAT)之后,显式定向才能在您的实际应用中起作用。(支持显式定向所需的亚马逊服务要求您的应用处于生产或LAT状态。) 如果您的应用未处于此状态,则可以通过在前台使用您的应用发出请求来模拟显式定向。
在日志中查看指令的命令
一旦您的应用成功响应了您的测试命令(“Alexa, watch Batman”(Alexa,观看蝙蝠侠)),就可以开始查看日志了。您可以通过两种方式监控日志:
- Android Studio中的Logcat: 使用Android Studio中的Logcat窗格筛选特定单词,或者
- 终端中的Grep命令: 打开终端窗口并使用Grep筛选条件。
下表显示了如何筛选日志以验证结果。
Logcat (Android Studio) | Grep(终端) | 描述 |
---|---|---|
AppAgent |
adb logcat | grep "AppAgent" -i |
检查安装和打开应用时报告了哪些功能。 |
AlexaDirectiveReceiver |
adb logcat | grep "AlexaDirectiveReceiver" -i |
检查当您说出测试表述时,应用从Alexa那里收到了什么消息。 |
(在Grep命令中,-i
会忽略单词的大小写。)
要查看Android Studio日志中收到的指令,请执行以下操作:
- 在Android Studio中打开Logcat窗格,在您的应用运行时,就该单词进行筛选:
AlexaDirectiveReceiver
。 -
当您的应用在Fire TV的前台运行时,说出 “Watch Batman”(观看蝙蝠侠)。
日志显示以下内容:
Logcat如下所示显示收到的指令:
Received an Alexa Directive: Alexa.RemoteVideoPlayer#SearchAndPlay with payload version: 3 and payload: {"searchText":{"transcribed":"batman"},"entities":[{"externalIds":{"ENTITY_ID":"0"},"type":"Franchise","uri":"entity://avers/franchise/Batman","value":"Batman"}]}
让我们扩展该指令日志和
有效负载
。由于该表述使用了 “watch”(观看),所以Alexa从RemoteVideoPlayer
接口发送了一条SearchAndPlay
指令:Received an Alexa Directive: Alexa.RemoteVideoPlayer#SearchAndPlay with payload version: 3 and payload: { "searchText": { "transcribed": "batman" }, "entities": [ { "externalIds": { "ENTITY_ID": "0" }, "type": "Franchise", "uri": "entity://avers/franchise/Batman", "value": "Batman" } ] }
在这种情况下,由于 “batman”(蝙蝠侠)是一个系列(意味着有多部蝙蝠侠电影),因此该指令包括
"type": "Franchise"
。有关更多详细信息,请参阅按系列片观看,以及系列片列表。
更详细的日志演练
以下是更详细的日志(带有解释性注释),展示了如果您在Logcat中就 “AlexaDirectiveReceiver” 进行筛选,您会在日志中看到的内容。这些日志显示了用户说出“Watch Batman”(观看蝙蝠侠)时(这会产生来自RemoteVideoPlayer
接口的SearchAndPlay
指令)的完整交互。 为了便于阅读,删除了每行的时间戳和其他序文。
//VSK Agent发送了一个由MyStreamz应用处理的意图
AlexaDirectiveReceiver: Handling Intent from VSK Agent: Intent { act=com.amazon.alexa.vsk_app_agent_api.ACTION_ALEXA_DIRECTIVE flg=0x10000010 pkg=com.example.vskfiretv.mystreamz cmp=com.example.vskfiretv.mystreamz/.receiver.AlexaDirectiveReceiver (has extras) }
//VSK Agent向应用发送SearchAndPlay指令
AlexaDirectiveReceiver: Received an Alexa Directive: Alexa.RemoteVideoPlayer#SearchAndPlay with payload version: 3 and payload: {"searchText":{"transcribed":"batman"},"entities":[{"externalIds":{"ENTITY_ID":"0"},"type":"Franchise","uri":"entity://avers/franchise/Batman","value":"Batman"}]}
//应用的逻辑通过播放随机电影来处理指令。
//此处是您的应用需要实现自定义逻辑以对指令做出反应的位置。
AlexaDirectiveReceiver: Handling SearchAndPlay directive...
AlexaDirectiveReceiver: Playing some random Movie Video Two
AlexaDirectiveReceiver: Handling SearchAndPlay directive finished
//应用向VSK Agent发送成功消息,表示请求已得到处理
故障排除
如果您在接收指令时遇到问题并想请求VSK Agent向您的应用发送测试指令,则可以使用VSK Agent客户端的requestTestDirectiveFromVSKAgent()
方法来执行此操作。有关详细信息,请参阅测试动态功能集成(可选)。
另一个适用于所有基于Android的应用的调试工具是Android调试桥(ADB)。键入adb help
以查看可用命令的完整列表。
为认证做准备: 您必须处理的必要指令
在为认证准备时,请根据与您支持的指令相关的所有表述测试您的应用。前往VSK Fire TV认证,查看按指令排序的表述合并列表。如果需要,您可以打印此页并选中 “Completed”(已完成)复选框以表明您对这些要求的支持。
必须支持所有包含需要认证标签的表述才能通过认证。在您提交应用进行认证和发布后,亚马逊应用商店采集团队的测试人员将根据需要认证所需的表述测试您的应用(修改目录中标题的示例请求),并检查结果是否与该表述的预期响应一致。如果您的应用不能正确处理所需的表述,则您的应用可能无法通过认证。在某些情况下,您可能需要与您的亚马逊代表合作,以解决您无法控制的任何问题。
提交以进行认证和发布
准备好提交应用以进行认证和发布时,请执行以下操作:
-
结束任何LAT测试。在前面的步骤中,您已将应用提交到动态应用测试(LAT)。通过执行以下操作取消LAT:
- 在开发者控制台中,转到应用与服务 > 我的应用,然后单击您的应用。
- 在左侧的侧边栏中,单击动态应用测试。
- 在操作列中,单击三点菜单,然后选择结束测试。然后单击确定以确认选择。
-
发布您的应用。继续按照常规步骤发布或更新您的上线应用:
- 如果您的应用尚未在亚马逊应用商店中,请参阅将应用提交到亚马逊应用商店。
- 如果您的应用已在亚马逊应用商店中,请参阅更新已发布的应用。
亚马逊将对您的应用进行测试和认证,以确保仅限应用的VSK集成能够正常运行。评估完成且您的应用通过认证后,就会发布您的应用。
后续步骤: 电视直播集成?
集成VSK之后,接下来要做什么? 如果您的应用中有直播内容,则可以集成Fire TV的 “Live”(直播)选项卡和频道指南。要开始相关操作,请参阅线性电视简介。
Last updated: 2023年10月18日