发送全局推荐
当您的应用启动时,Fire App Builder会从您的媒体信息提要中读取全局推荐列表,并将其发送到Fire TV主屏幕上的Recommended By Your Apps行。本文提供了设置全局推荐的分步说明。
总之,您将在信息提要中添加一个globalRecommendations
元素。然后,您将使用新配方将这个globalRecommendations
元素作为目标。然后,在Navigator.json文件中添加一个部分,该部分可以引用配方和数据加载器。
有关推荐的更多基本信息,请参阅Fire App Builder中的推荐。
配置全局推荐
-
在信息提要中,为整个信息提要添加一个
globalRecommendations
属性,该属性指向内容ID字符串数组。内容ID字符串数组应与要推荐的媒体相关。例如,如果信息提要采用JSON格式,则
globalRecommendations
属性可能如下所示:{ "items": [ { "id": "162270", "title": "Thai Recipes - Thai Chicken Noodles Recipe", "description": "Thai Recipes - Thai Chicken Noodles Recipe", "duration": "355", "thumbURL": "http:\/\/l2.cdn01.net\/\_thumbs\/0000162\/0162270\/0162270__015f" type="jpg", "imgURL": "http:\/\/l2.cdn01.net\/\_thumbs\/0000162\/0162270\/0162270__015f" type="jpg", "videoURL": "http:\/\/media.cdn01.net\/802E1F\/process\/encoded\/video_1880k\/0000162\/0162270\/D8HFLX0AC.mp4?source=firetv&channel_id=6341", "categories": [ "International Cuisine" ], "channel_id": "6341", "recommendations": [ "162269", "162266", "162265", "162264" ] }, ... ], "globalRecommendations": [ "99605", "99551", "99570", "99580", "112683" ] }
如果信息提要是XML,则可能如下所示:
... <item> <title>标题示例</title> <pubDate>2016年10月26日星期三20:34:22 PDT</pubDate> <link>https://example.com/myshow/episodes/110</link> <author>作者姓名示例</author> <category>科技</category> <category>小工具</category> <recommendations> <guid>162269</guid> <guid>162266</guid> <guid>162265</guid> <guid>162264</guid> </recommendations> </item> <globalrecommendations> <guid>99605</guid> <guid>99551</guid> <guid>99570</guid> <guid>99580</guid> <guid>112683</guid> </globalrecommendations> ...
注意: 全局推荐对象不应包含在特定项目的详细信息中,整个信息提要应该只有一组全局推荐。每个项目中可以包含相关推荐,系统会在用户观看特定内容时发送这些推荐。但是,在这个任务中,我们配置的是全局推荐(在应用启动时发送,而不是在播放特定视频时发送)。全局推荐属性可以出现在信息摘要中的任何位置,并可使用除
globalRecommendations
之外的名称,但内容应该是一个字符串数组。在以下步骤中,您将在配方中编写一个查询来将这个元素作为目标。请注意,如果您有符合iTunes规范的MRSS提要,则添加自定义元素可能需要编写更多代码,因为您需要定义XML中使用的自定义命名空间。(有关在XML中添加自定义命名空间的说明超出了本文档的范围。)
-
在Navigator.json文件中,在
globalRecipes
对象后面添加recommendationRecipes
对象,如下所示:... "globalRecipes": [ { "categories": { "dataLoader": "recipes/LightCastDataLoaderRecipe1.json", "dynamicParser": "recipes/LightCastCategoriesRecipe.json" }, "contents": { "dataLoader": "recipes/LightCastDataLoaderRecipe1.json", "dynamicParser": "recipes/LightCastContentsRecipe.json" } } ], "recommendationRecipes": [ { "contents": { "dataLoader": "recipes/LightCastDataLoaderRecipe1.json", "dynamicParser": "recipes/LightCastGlobalRecParserRecipe.json" } } ], ...
(请注意,在代码示例中,省略号
...
表示这是节选片段,其余代码已被截断。不要将省略号复制到代码中。)dynamicParser
属性中引用的文件指定了用于识别和处理输入数据中全局推荐的配方。 - 在
recommendationRecipes
对象中,将dataLoader
的值替换为对globalRecipes
对象内使用的同一数据加载器文件的引用。例如recipes/AcmeDataLoaderRecipe1.json
。(有关更多详细信息,请参阅加载您的信息提要。) - 在
recommendationRecipes
对象中,将dynamicParser
的值替换为对具有自定义名称的新配方文件的引用。例如recipes/AcmeGlobalRecParserRecipe.json
。然后在应用的assets > recipes文件夹中创建这个文件。 -
(可选)如果想限制应用发送的全局推荐数量,可以在Navigator.json中使用
numberOfGlobalRecommendations
属性(位于config
内)来指定上限,如下所示:"config": { "showRelatedContent": true, "useCategoryAsDefaultRelatedContent": true, "searchAlgo": "basic", "numberOfGlobalRecommendations": 3, "numberOfRelatedRecommendations": 3 }
此数字限制了应用可以发送的全局推荐总数。达到这一推荐数量后,应用必须等到刷新期(每6小时一次,或每次应用重启时)才会再次发送全局推荐。
请注意,Fire TV必须收到所有应用的共计至少5条推荐,才会向用户显示Recommended By Your Apps行。如果未在此处指定全局推荐的数量,则使用5作为默认值。
-
打开步骤5中创建的全局推荐解析器配方(例如AcmeGlobalRecParserRecipe.json),然后插入以下配方:
{ "cooker": "DynamicParser", "format": "json", "model": "java.lang.String", "modelType": "array", "query": "$.globalRecommendations[*]", "matchList": [ "StringKey@ModelValue" ] }
以下是有关该配方的一些详细信息:
- 该配方预期的
format
为json
。(如果信息提要格式为XML,请将format
的值从json
更改为xml
。) - 该配方预期的
model
为String
。 - 当
modelType
设置为array
时,Fire App Builder预期该配方将返回一个字符串数组。 query
返回字符串列表后,matchList
参数将使用StringKey
直接对字符串进行匹配。Fire App Builder会将这些字符串映射到其模式。
(只要全局推荐查询与JSON格式的字符串数组匹配,这些设置就不重要。如果不是这样,可以相应地调整配方设置。有关详细信息,请参阅配方配置概述。)
- 该配方预期的
-
自定义
query
值,以将信息提要中的全局推荐属性作为目标。如果使用的是JSON,则查询将使用Jayway JsonPath语法。如果信息提要为XML,则XPath表达式。
有关创建这些查询的说明,请参阅设置类别配方主题中的query参数部分。
在如上所示的示例
query
中,$.globalRecommendations[*]
查询从根目录开始,找到globalRecommendations
数组并选择该数组内的所有内容。(如果您在上述示例XML信息提要中使用XML,则您的查询将是//globalrecommendations/guid/text()
。) 如果想让查询以递归方式在每个文件夹中查找globalRecommendations
对象,请使用$..globalRecommendations[*]
。 -
为确保查询正确地针对
globalRecommendations
元素,请在在线评估器中对查询进行测试:- 对于JSON信息提要,使用Jayway JsonPath评估器对查询进行测试。
- 对于XML信息提要,使用XPath评估器对查询进行测试。
查询的结果应该是包含内容ID的字符串列表。Fire App Builder在构建推荐时会使用这些内容ID。
如果您的项目包含亚马逊额外信息(例如年龄评级),这些额外信息将与推荐一起发送。
全局推荐会在应用启动期间发送一次,也会在打开的应用每次更新提要时发送。信息提要的更新时间间隔与DataLoadManagerConfig.json文件中的值相关联(在应用的assets > configurations文件夹中)。该文件中的该属性为
data_updater.duration": 14400
(4小时)。还设置了闹钟,每12小时唤醒设备一次,以刷新推荐。
测试您的全局推荐
要测试您的推荐,请参阅Fire TV文档中的一般说明: 测试您的推荐
请记住,Fire TV上的Recommended By Your Apps行不在Fire App Builder应用的控制范围内。但是,通过查看Android Studio日志,可以看到您的应用正在生成和发送推荐。
启动应用后,在Android Studio中单击屏幕底部的Android Monitor,然后使用recommendation一词进行筛选。您将看到表明已构建并发送全局推荐的日志。例如:
03-24 18:39:09.365 18717-18757/com.amazon.android.calypso D/RecommendationTable: record updated in database: RecommendationRecord{mContentId='99570', mRecommendationId=4, mType='Global'}
03-24 18:39:09.368 18717-18757/com.amazon.android.calypso D/RecommendationSender: Built recommendation - Consuming Passions Chips Recipe | Belgian Style
mType='Global'
表示发送的推荐是全局推荐。
请注意,在测试中,应用发送的推荐数量不会超过您在Navigator.json文件中设置的上限。例如,假设Navigator.json中存在以下内容:
"numberOfGlobalRecommendations": 3
但是您的globalRecommendations
列表包含5个内容ID。在此情况下,只会发送3条推荐。
移除过时的推荐
如果用户单击Recommended By Your Apps行中的视频并完整观看了该视频(不是只观看了一部分),Fire App Builder会将该视频标记为已观看,并删除对该项目的推荐。此历史记录保存在Fire App Builder的数据库中。
但是,6小时过去、Fire App Builder刷新后,即使用户已观看该内容,也会再次发送相同的全局推荐。要实现更高级的逻辑,您需要管理信息提要中的全局推荐并定期对其进行调整。
后续步骤
转到下一个主题:发送相关推荐。相关推荐会针对用户正在观看的特定媒体发送推荐。
Last updated: 2017年4月6日