配置语音助手
语音助手集成
任何智能家居物联网系统都离不开语音助手集成。ESP RainMaker 支持与 Amazon Alexa 和谷歌语音助手 (GVA) 集成,用户可通过语音命令控制物联网设备。
本节介绍如何在 iOS 和 安卓的 ESP RainMaker Home App 上配置原生代码,以实现与语音助手的集成。
安卓代码级配置
Alexa 账户关联
该账户关联流程允许用户从应用发起,将其 Alexa 用户账户与其他服务中的账户进行关联。以下章节介绍 Alexa 账户关联的应用端配置。
关于账户关联与云端配置的更多信息,请参见此处。
创建安卓应用链接
在 Alexa 账户关联流程中,需要允许 Alexa 应用或浏览器将用户重定向到你的应用。要实现这一重定向,必须为安卓应用启用应用关联。
请参阅安卓文档中的创建深层链接与验证应用链接两章,启用应用链接。
参照以下步骤,在使用 ESP RainMaker 部署的安卓应用中创建与配置应用链接。
-
参照这些步骤为 ESP RainMaker 部署创建应用链接,并获取通过这些步骤生成的 重定向 URL(将于第 12 步获得此重定向 URL)。
-
按以下步骤创建
assetlinks.json文件。- 下载此 assetlinks.json 文件。
- 将
your_application_id替换为你的应用 ID。 - 在 JSON 数组中,将
add_your_sha256_fingerprint_here替换为 keystore 文件的 sha256_cert_fingerprint。
注意- 如果没有用于应用签名的 keystore,请按这些步骤创建。
- 运行
./gradlew signingReport命令以获取 SHA-256 证书指纹。 - 只有当安装的应用使用的签名证书,其 SHA-256 指纹与配置中的指纹一致时,应用链接才能生效。
-
参照这些步骤 将
assetlinks.json文件上传到.well-known文件夹。 -
修改
AndroidManifest.xml文件中AlexaAppLinkingActivitydata 标签内的host值。从 重定向 URL 中去掉 "https://" 即可获取host值。在AndroidManifest.xml文件中将your_host_value替换为该值。
以下为安卓应用链接设置示例。
-
假设已完成第 1 步,并获得如下重定向 URL。
https://my-app-link.s3.amazonaws.com/ -
下载
assetlinks.json文件。将your_application_id替换为 "com.example.my_app",这是安卓应用的应用 ID。之后运行./gradlew signingReport命令,获取 SHA-256 指纹并将其添加到 JSON 文件中。完成上述更改后,
assetlinks.json文件如下所示。[{
"relation": ["delegate_permission/common.handle_all_urls"],
"target": {
"namespace": "android_app",
"package_name": "com.example.my_app",
"sha256_cert_fingerprints":[
"E6:B5:DD:AF:62:90:93:3E:63:52:6B:C6:15:CC:DC:A3:1E:DE:AF:20:D2:07:3F:A4:89:CB:8C:78:D2:AE:CC:0D"
]
}
}] -
将
assetlinks.json文件上传至.well-known文件夹。 -
在
AndroidManifest.xml中,将来自重定向 URL 的host值替换为your_host_value,如下所示。<activity
android:name="com.espressif.ui.activities.AlexaAppLinkingActivity"
android:label="@string/title_activity_amazon_alexa"
android:launchMode="singleTask"
android:screenOrientation="portrait"
android:theme="@style/AppTheme.NoActionBar">
<intent-filter android:autoVerify="true">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data
android:host="my-app-link.s3.amazonaws.com"
android:scheme="https" />
</intent-filter>
</activity>
你也可以在 Android Studio 中使用 Digital Asset Links Generator 或 App Links Assistant 来创建安卓应用链接并测试链接。
配置账户关联
Alexa 账户关联的所有配置参数都可以在 local.properties 文件中设置。
在 Android Studio 中打开项目,local.properties 文件自动生成。请填写以下配置字段。
| 配置键 | 类型 | 说明 |
|---|---|---|
authUrl | 字符串 | OAuth URL。参阅此处可获取该值。 |
alexaClientId | 字符串 | Alexa 客户端 ID。可以参照以下步骤找到: - 进入 Alexa 开发者控制台 - 选择你的技能 - 前往 Build 选项卡- 打开 Permissions 部分- 在 Permissions 下可看到 Alexa Client ID。 |
alexaClientSecret | 字符串 | Alexa 客户端密钥。可以参照以下步骤找到: - 进入 Alexa 开发者控制台 - 选择你的技能 - 前往 Build 选项卡- 打开 Permissions 部分- 在 Permissions 下可看到 Alexa Client Secret。 |
alexaRedirectUrl | 字符串 | 该重定向 URL 用于获取 Alexa 授权码与 RainMaker(或自定义用户认证服务)授权码。该 URL 同时用作安卓应用的应用链接。关于如何配置应用链接,请查看此文档。 |
alexaRMClientId | 字符串 | 参见获取 Alexa 与 GVA 客户端 ID 的步骤,复制 esp-rainmaker-alexa-skill 的客户端 ID。 |
skillId | 字符串 | 待关联技能的技能 ID。可以参照以下步骤找到: - 进入 Alexa 开发者控制台 - 选择你的技能 - 前往 Build 选项卡- 打开 Smart Home 部分- 在 Smart Home 部分可以看到技能 ID。 |
skillStage | 字符串 | 可选值:live:用于上线的技能development:用于开发中的技能。 |
alexaAccessTokenUrl | 字符串 | API 端点,用于通过 Alexa 授权码获取 Alexa 访问令牌。 参阅此文档,了解如何获取 Alexa 访问令牌 URL。 |
iOS 代码级配置
Alexa 账户关联
该账户关联流程可从应用程序端开始,将用户的 Alexa 账户与其他服务中的账户进行关联。以下章节介绍为实现 Alexa 账户关联所需的应用程序端配置。
注意 关于账户关联与云端配置的更多信息,请参见此处。
创建 iOS 通用链接
若支持通用链接,iOS 用户点击指向你网站的链接后,将无缝跳转到已安装的应用,而无需经过 Safari。若未安装应用,则点击网站链接将会在 Safari 中打开你的网站。
请参阅 iOS 文档中的通用链接说明。
可按以下步骤为应用创建通用链接:
-
在应用的 Xcode 工程中,于项目导航器中选择
.xcodeproj文件。在Signing and Capabilities部分找到Associated Domains,在Domains区域点击+,并添加以下信息:applinks:domain name of the associated website
-
新建名为
apple-app-site-association的文件。该文件应包含以下 JSON 结构:{
"applinks": {
"apps": [],
"details": [
{
"appID": "ABCD1234.com.apple.wwdc",
"paths": ["*"]
}
]
}
}注意不要为
apple-app-site-association文件添加.json扩展名。 -
上述文件中的
appID格式为:TEAMID.Bundle ID of your app。 -
paths数组包含了网站路径列表,对于这些路径,你的应用支持通用链接。paths中的*值表示支持你网站的所有路径。 -
将
apple-app-site-association文件放置在服务器根目录,或根目录下的.well-known文件夹中。 -
该文件需通过 HTTPS 直接访问(不得重定向),路径为
https://<domain>/apple-app-site-association或https://<domain>/.well-known/apple-app-site-association。
配置账户关联
在 Configuration.plist 文件的 AWS Configuration 部分,请确保添加以下值:
| 键 | 类型 | 说明 |
|---|---|---|
Authentication URL | 字符串 | OAuth URL。参阅此处可获取该值。 |
在 Configuration.plist 文件的 ESP Alexa Configuration 部分,请添加以下值:
| 键 | 类型 | 说明 |
|---|---|---|
Alexa Client Id | 字符串 | Alexa 客户端 ID。可以参照以下步骤找到: - 进入 Alexa 开发者控制台 - 选择你的技能 - 前往 Build 选项卡- 打开 Permissions 部分- 在 Permissions 下可看到 Alexa Client Id。 |
Alexa Client Secret | 字符串 | Alexa 客户端密钥。可以参照以下步骤找到: - 进入 Alexa 开发者控制台 - 选择你的技能 - 前往 Build 选项卡- 打开 Permissions 部分- 在 Permissions 下可看到 Alexa Client Secret。 |
Alexa RM Client Id | 字符串 | 参见获取 Alexa 与 GVA client ID 的步骤,复制 esp-rainmaker-alexa-skill 的客户端 ID。 |
Skill Id | 字符串 | 待关联技能的技能 ID。可以参照以下步骤找到: - 进入 Alexa 开发者控制台 - 选择你的技能 - 前往 Build 选项卡- 打开 Smart Home 部分- 在 Smart Home 部分可以看到 Skill Id。 |
Skill Stage | 字符串 | 可能的取值:live:用于上线的技能development:用于开发中的技能。 |
Redirect URL | 字符串 | 调用 Alexa 授权码与 RainMaker(或自定义用户认证服务)授权码的时会提供重定向 URL。该 URL 同时用作 iOS 应用的通用链接。关于如何配置应用链接,请查看此文档。 |
Alexa Access Token URL | 字符串 | API 端点,用于通过 Alexa 授权码获取 Alexa 访问令牌。 参阅此文档,了解如何获取 Alexa 访问令牌 URL。 |