从自有应用创建 Alexa 账号关联(可选)
介绍
Alexa 账号关联 (Account Linking) 功能允许用户从自有应用中关联 Alexa 账号。启用该服务后,用户可以享受以下功能:
- 在自有应用中发现 Alexa Skill。
- 在自有应用中启用 Skill 和账号关联。
- 在已登录 Alexa 应用的情况下,无需输入账号密码即可链接到 Alexa 账号。在关联账号时,用户必须登录一次自有应用。
- 在未安装 Alexa 应用的情况下,使用 Login with Amazon (LWA) 即可从自有应用关联账号。
注意:如果您想要阅读开发文档,请参考 从移动应用创建 App to App 账号关联。
前提条件
- 已完成 Alexa 与 ESP RainMaker 的集成。详细步骤请参考 语音助手集成。 - 如果尚未完成,请按照 语音助手集成 中的步骤完成 Alexa 集成。完成后,请回到此处启用 App to App 账号关联。 
- 已部署 ESP-RainMaker-3P-Integration-AddOns 仓库。 - 如果尚未部署,请参考 部署 ESP_RainMaker-3P-Integrations-Addons SAR 仓库。 
以下为配置 Alexa App to App 账号关联的具体步骤:
为移动应用创建重定向 URL
用户同意 Alexa 应用或 LWA 中的关联请求后,就能重定向至您的自有应用。为了实现重定向,需要为 iOS 应用创建通用链接 (Universal Link),为安卓应用创建应用链接 (App Link)。
下文介绍了在 AWS S3 中托管通用链接和应用链接文件的步骤(注意:在进行以下操作前,请首先确保您的用户有管理权限):
创建 S3 存储桶
- 前往 AWS 控制台,点击 - Services>- S3。
- 点击 - Create bucket。
- 输入存储桶的名字。 
- 选择需要创建存储桶的区域。 
- 向下滚动界面,找到 - Object Ownership,启用- ACLs enabled选项。

- 向下滚动界面,找到 - Block Public Access settings for this bucket。
- 取消勾选 - Block all public access,并勾选下面所有的选项。此步骤为必须步骤。

- 滚动至页面底部,点击 - Create Bucket。
- 在存储桶列表中,点击新创建的存储桶。 
- 点击 - Create Folder并创建 ".well-known" 文件夹。 
- 勾选 - .well-known文件夹前面的复选框,并点击- Copy URL。 
- 从 URL 中移除在第十步中记下的 .well-known/ 后缀。 请记下移除后的参数值,我们将其定义为 redirectURL,在后续步骤中需要用到。 
- 创建安卓应用链接或 iOS 通用链接,请参考以下步骤: 
上传文件至 S3 并设置公开读取权限
- 前往 AWS 控制台,点击 - Services>- S3。
- 在存储桶列表中,点击新创建的存储桶。 
- 打开 - .well-known文件夹。
- 将文件上传至 S3 存储桶中的 - .well-known文件夹。
- 创建安卓应用链接时,上传前面小节中创建的 - assetslinks.json文件。
- 创建 iOS 通用链接时,上传前面小节中创建的 - apple-app-site-association文件。
注意,如果您希望同时为安卓和 iOS 上传文件,您需要按照第 5-10 步为两个文件分别完成设置。
- 向下滚动并点击 Permissions。

- 选择 Grant public-read access选项。

- 勾选下方知悉复选框。

- 点击 Permissions标签页。这一步骤中需要更改存储桶名称,请添加以下存储桶策略并保存更改。
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::my-bucket-name/*"
        }
    ]
}

- 在页面底部点击 Upload。
为 RainMaker 配置回调 URL
- 用管理员账号登录 RainMaker 管理面板。 
- 打开 - Deployment Settings标签页。
- 点击 - Cognito Configurations。
- 找到名为 "esp-rainmaker-alexa-skill" 的 Cognito 应用客户端。 
- 更新 - esp-rainmaker-alexa-skill客户端的回调 URL。将您在 创建 S3 存储桶 小节第 12 步中复制的 redirectURL 值添加到现有回调 URL 中。

请注意,需要用逗号 (,) 将两个 URL 隔开。
启用 Alexa Skill App to App 账号关联
- 登录 Alexa 开发者控制台。 
- 在列表中,选择您想要配置应用账号关联的 Skill。 
- 在左侧导航栏,点击 - Account Linking。

- 勾选复选框—— Allow users to link their account to your skill from within your application or website。

- 滚动至 - Your Redirect URLs设置部分。
- 点击 - +图标,添加重定向 URL。
- 输入您在 创建 S3 存储桶 小节第 12 步中复制的 redirectURL 值。 

- 在 esp-rainmaker-alexa-skill应用客户端添加客户端 Secret。请参考 为 Alexa Skill 和 Google Actions 获取客户端 ID 和 Secret。

- 保存更改。
获取 Alexa 访问令牌 URL
首先请确保您的 AWS 区域为 RainMaker 的部署区域。
- 登录 AWS 控制台,打开 - API Gateway Service。
- 找到 - AlexaSkillLinking AWS Api GatewayAPI 网关。

- 打开 Stages标签页。

- 点击 - dev展开选项。
- 点击 - POST。
- 复制 Invoke URL。在为移动应用配置 alexaAccessTokenURL 时需要用到这一 URL。 

完成上述配置后,请为移动应用配置 Alexa 账号关联。
具体步骤请参考以下文档:
