@amazon-devices/recommendation-manager
亚马逊媒体推荐API是一项服务,允许客户端应用在亚马逊设备上添加和删除推荐内容。API将这些推荐内容显示在设备的主屏幕上,为用户提供个性化的内容推荐。该API旨在根据用户的偏好和观看历史,提供相关且引人入胜的推荐内容,由此增强用户体验。
API包含两个实现:
- RecommendationManager
- RecommendationManager2
从API的2.x.x版本开始,新应用应使用RecommendationManager2实现来发送推荐。该实现通过内容图像字节数组和内容图像URI支持内容图像。我们鼓励您将旧应用更新到RecommendationManager2以使用其增强功能。
开始使用
权限
API需要通过使用权限进行身份验证。具体而言,应用需要具有com.amazon.privilege.security.file-sharing权限才能访问用于添加推荐项目的API。
设置
-
将以下库依赖项添加到package.json文件的
dependencies部分。"@amazon-devices/recommendation-manager": "~2.0.2"2. -
在您的manifest.toml中,添加以下权限。
[wants] [[wants.service]] id = "com.amazon.recommendation.service.main" [[needs.privilege]] id = "com.amazon.privilege.security.file-sharing"
用法
添加推荐
- 使用必填字段(标题、文本、内容图像、类别、显示名称、显示操作选项等)创建
Recommendation2对象。 - 调用
RecommendationManager2类的addRecommendations2方法,传递一个Recommendation2对象数组。 - 该方法返回代表新添加推荐项目的数字数组。每个数字对应一个推荐,并可用于在将来删除推荐:
- 如果您指定内容图像字节数组,则图像将立即存储在设备上。
- 如果您指定内容图像URI,则将异步下载图像。如果图像下载失败,则会删除推荐并记录一条错误消息,表明内容图像URI下载失败。
注意: 如果您同时指定内容图像字节数组和内容图像URI,则RecommendationManager2默认为内容图像字节数组。
注意: React Native URL构造函数会自动向URL添加尾随的/。这可能会导致内容图像URI下载失败。要解决此问题,请执行以下操作:
- 使用标准URL构造器创建URL
- 手动将
_url字段设置为所需的确切URL字符串
const imageUrl = new URL('https://example.com/image.png');
(imageUrl as any)._url = 'https://example.com/image.png'; // 移除尾部的斜杠
// 在Recommendation2对象中
contentImageUri: imageUrl
此问题将在推荐管理器的未来版本中得到解决。请注意,替代URL解析库(例如react-native-url-polyfill)不兼容,因为推荐管理器需要标准URL对象中的特定字段。
示例:
import {
RecommendationManager2,
Recommendation2,
Category,
DisplayAction,
InvalidArgumentError,
SecurityError,
} from '@amazon-devices/recommendation-manager';
const recommendationWithContentImageByteArray : Recommendation2 = {
title: '推荐电影1',
text: '看看这部很棒的电影!',
contentImageUri: new URL(<content image uri>),
backgroundImageUri: new URL('https://example.com/background.png'),
contentUri: new URL('(`orpheus://component-id-of-app-hosting-the-content`'),
category: Category.HOME,
displayName: '电影应用',
displayActionOption: DisplayAction.WATCH_WITH_APP_DISPLAY_NAME,
maturityRating: 'PG',
customerAggregateRating: 8,
customerRatingCount: 100,
runningTime: 120,
releaseYear: 2022,
isCaptionAvailable: true,
};
const recommendationWithContentImageUri : Recommendation2 = {
title: '推荐电影2',
text: '看看这部很棒的电影!',
contentImage: [/* 图像数据 */],
backgroundImageUri: new URL('https://example.com/background.png'),
contentUri: new URL('(`orpheus://component-id-of-app-hosting-the-content`'),
category: Category.HOME,
displayName: '电影应用',
displayActionOption: DisplayAction.WATCH_WITH_APP_DISPLAY_NAME,
maturityRating: 'PG',
customerAggregateRating: 8,
customerRatingCount: 100,
runningTime: 120,
releaseYear: 2022,
isCaptionAvailable: true,
}
const recommendations: Recommendation2[] = [
recommendationWithContentImageUri,
recommendationWithContentImageByteArray
];
try {
const addedIds = RecommendationManager2.addRecommendations(recommendations);
console.log('添加了推荐:', addedIds);
} catch (e) {
if (e instanceof SecurityError) {
console.error('安全错误:', e.message);
} else if (e instanceof InvalidArgumentError) {
console.error('无效参数错误:', e.message);
} else {
console.error('添加推荐时出错:', e);
}
}
删除推荐
- 要删除特定推荐,请调用
RecommendationManager2类的removeRecommendations()方法,传递代表要删除的推荐项目的数字数组。 - 要删除客户端应用发送的所有推荐,请调用
RecommendationManager2类的removeAllRecommendations()方法。
示例:
// 删除推荐
RecommendationManager.removeRecommendations([addedIds[0]]);
// 删除所有推荐
RecommendationManager.removeAllRecommendations();
传统用例(版本1.x.x)
添加旧版推荐
- 使用必填字段(标题、文本、内容图像、类别、显示名称、显示操作选项等)创建
Recommendation对象。 - 调用
RecommendationManager类的addRecommendations()方法,传递Recommendation对象数组。 - 该方法返回代表新添加推荐项目的数字数组。每个数字对应一个推荐,并可用于在将来删除推荐。
示例
import RecommendationManager, { Category, DisplayAction, Recommendation } from './RecommendationManager';
const recommendations: Recommendation[] = [
{
title: '推荐电影',
text: '看看这部很棒的电影!',
contentImage: [/* 图像数据 */],
backgroundImageUri: new URL('https://example.com/background.png'),
contentUri: new URL('(`orpheus://component-id-of-app-hosting-the-content`'),
category: Category.HOME,
displayName: '电影应用',
displayActionOption: DisplayAction.WATCH_WITH_APP_DISPLAY_NAME,
maturityRating: 'PG',
customerAggregateRating: 8,
customerRatingCount: 100,
runningTime: 120,
releaseYear: 2022,
isCaptionAvailable: true,
},
];
try {
const addedIds = RecommendationManager.addRecommendations(recommendations);
console.log('添加了推荐:', addedIds);
} catch (e) {
if (e instanceof SecurityError) {
console.error('安全错误:', e.message);
} else if (e instanceof InvalidArgumentError) {
console.error('无效参数错误:', e.message);
} else {
console.error('添加推荐时出错:', e);
}
}
移除旧版推荐
- 要删除特定推荐,请调用
RecommendationManager类的removeRecommendations()方法,传递代表要删除的推荐项目的数字数组。 - 要删除客户端应用发送的所有推荐,请调用
RecommendationManager类的removeAllRecommendations()方法。
示例
// 删除推荐
RecommendationManager.removeRecommendations([addedIds[0]]);
// 删除所有推荐
RecommendationManager.removeAllRecommendations();
推荐字段的描述如下
| 字段 | 类型 | 描述 | 是否必需 |
|---|---|---|---|
title |
string |
推荐项目的内容标题。 | 否 |
text |
string |
推荐项目的描述文本。 | 否 |
contentImage |
number[] |
为此推荐显示的图像 (PNG)。图像规格不正确的推荐在调用addRecommendations() 方法时会返回InvalidArgumentError。有关可接受的图像格式的详细信息,请参阅可接受的图像规格。 |
是 |
contentImageUri |
URL |
用于检索要根据此推荐显示的图像 (PNG) 的URI。图像规格不正确的推荐在调用addRecommendations() 方法时会返回InvalidArgumentError。有关可接受的图像格式的详细信息,请参阅可接受的图像规格。 |
是 |
backgroundImageUri |
URL |
用于检索推荐项目的背景图像的URI。当用户将鼠标悬停在推荐项目上方时,会显示该图像。 | 否 |
contentUri |
URL |
用户点击推荐时启动的URI。 | 否 |
category |
Category |
推荐应归入的类别(例如,主页、您的视频、直播、超高清)。 | 是 |
displayName |
string |
Launch(启动)菜单中显示的较短应用名称(在选择推荐时按菜单按钮会显示该名称)。 | 否 |
displayActionOption |
DisplayAction |
确定为每个推荐显示的第一上下文菜单选项。 | 是 |
maturityRating |
string |
在标题下方显示年龄评级。有关可接受的年龄评级的详细信息,请参阅支持的年龄评级值。 | 是 |
customerAggregateRating |
number |
汇总所有客户的评分,可能的值介于0到10之间。 | 否 |
customerRatingCount |
number |
对此内容进行评分的客户数量。如果设置为0,则将内容视为未评分。 | 否 |
runningTime |
number |
如果适用,则为内容的运行时间(以分钟为单位)。直播内容可以将此项设置为0。 | 否 |
releaseYear |
number |
内容的发布年份。示例: 2016、2015。 | 否 |
isCaptionAvailable |
boolean |
表示有字幕可用于内容 (true) 或表示没有字幕 (false)。false表示没有字幕可用于内容(默认)。true表示内容有字幕。 |
否 |
可接受的图像规格
- 宽高比: 16:9
- 频道: 3 (BGR),8位/频道
- 方向: 横向
- 格式: PNG
- 根据显示器的不同,图像分辨率应为:
- HDTV (720p): 256 * 144
- HDTV (1080p): 384 * 216
- 4K超高清: 768 * 432
- 标题: 嵌入在图像中
- 透明度: 不透明
支持的年龄评级值
- 美国市场: G、PG、PG13、R、NC17、NR、TVY、TVY7、TVG、TVPG、TV14、TVMA
- 德国市场: FSK0、FSK6、FSK12、FSK16、FSK18
- 英国市场: BBFCPG、BBFC12、BBFC18、BBFCU
- 日本市场: EIRIN_G、EIRIN_PG12、EIRIN_R15、EIRIN_18
- 印度市场: ALL、7+、13+、16+、18+、NR
故障排除
- SecurityError: 当调用应用没有所需的
com.amazon.privilege.security.file-sharing权限时,就会出现此错误。在调用API之前,请确保您的应用具有必要的权限。 - InvalidArgumentError: 此错误可能发生在以下场景中:
- 推荐对象的大小超过512KB(不包括内容图像大小)。
Recommendation对象中的必填字段为空或无效。- 内容图像不符合指定的尺寸和大小要求。
- 传递给
addRecommendations()的推荐数组的大小大于20。
-
在未显示推荐的情况下:
-
如果您使用了该内容图像URI,请检查图像是否下载失败。如果图像下载失败,则不添加推荐。设备日志将显示图像下载失败。例如:
Failed to fetch image for recommendation.Ignoring it. -
使用唯一行ID检查推荐是否已成功添加到推荐管理器数据库中。唯一行ID可以在日志中找到:
recommendation_[4509]: 8 I recommendationCommonLib:[log_impl.cpp:14] Recommendations are for config: <唯一行ID>找到
unique-row-id后,检查与唯一行ID对应的配置文件。该文件包含已成功添加到该行的推荐。如果该文件为空,则表示未添加调用应用的推荐。在调用addRecommendations时,检查设备日志中是否有错误日志。adb shell cat /home/app_user_packages/com.amazon.recommendation.service/data/<唯一行ID>
-
模块
- index
- RecommendationManager
- RecommendationManager2
- turbo-modules/RecommendationManagerTurboModule
- turbo-modules/RecommendationManagerTurboModule
- types/RecommendationManagerTypes
- types/RecommendationManagerTypes
Last updated: 2025年11月17日

