as

Settings
Sign out
Notifications
Alexa
亚马逊应用商店
AWS
文档
Support
Contact Us
My Cases
新手入门
设计和开发
应用发布
参考
支持

@amazon-devices/recommendation-manager

@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。

设置

  1. 将以下库依赖项添加到package.json文件的dependencies部分。

    已复制到剪贴板。

       "@amazon-devices/recommendation-manager": "~2.0.2"2.
    
  2. 在您的manifest.toml中,添加以下权限。

    已复制到剪贴板。

     [wants]
     [[wants.service]]
     id = "com.amazon.recommendation.service.main"
    
     [[needs.privilege]]
     id = "com.amazon.privilege.security.file-sharing"  
    

用法

添加推荐

  1. 使用必填字段(标题、文本、内容图像、类别、显示名称、显示操作选项等)创建Recommendation2对象。
  2. 调用RecommendationManager2类的addRecommendations2方法,传递一个Recommendation2对象数组。
  3. 该方法返回代表新添加推荐项目的数字数组。每个数字对应一个推荐,并可用于在将来删除推荐:
    • 如果您指定内容图像字节数组,则图像将立即存储在设备上。
    • 如果您指定内容图像URI,则将异步下载图像。如果图像下载失败,则会删除推荐并记录一条错误消息,表明内容图像URI下载失败。

注意:​ 如果您同时指定内容图像字节数组和内容图像URI,则RecommendationManager2默认为内容图像字节数组。

注意:​ React Native URL构造函数会自动向URL添加尾随的/。这可能会导致内容图像URI下载失败。要解决此问题,请执行以下操作:

  1. 使用标准URL构造器创建URL
  2. 手动将_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);
        }
    }

删除推荐

  1. 要删除特定推荐,请调用RecommendationManager2类的removeRecommendations() 方法,传递代表要删除的推荐项目的数字数组。
  2. 要删除客户端应用发送的所有推荐,请调用RecommendationManager2类的removeAllRecommendations() 方法。

示例:

已复制到剪贴板。

// 删除推荐
RecommendationManager.removeRecommendations([addedIds[0]]);

// 删除所有推荐
RecommendationManager.removeAllRecommendations();

传统用例(版本1.x.x)

添加旧版推荐

  1. 使用必填字段(标题、文本、内容图像、类别、显示名称、显示操作选项等)创建Recommendation对象。
  2. 调用RecommendationManager类的addRecommendations() 方法,传递Recommendation对象数组。
  3. 该方法返回代表新添加推荐项目的数字数组。每个数字对应一个推荐,并可用于在将来删除推荐。

示例

已复制到剪贴板。

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);
  }
}

移除旧版推荐

  1. 要删除特定推荐,请调用RecommendationManager类的removeRecommendations() 方法,传递代表要删除的推荐项目的数字数组。
  2. 要删除客户端应用发送的所有推荐,请调用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>
      

模块


Last updated: 2025年11月17日