如何使用来自 Android 的 Alexa 语音服务进行身份验证?

How to Authenticate with Alexa Voice Service from Android?

我正尝试按照此页面上的说明从 Android 应用程序连接到 Alexa 语音服务。 https://developer.amazon.com/public/solutions/alexa/alexa-voice-service/docs/authorizing-your-alexa-enabled-product-from-an-android-or-ios-mobile-app

Bundle options = new Bundle();
String scope_data = "{\"alexa:all\":{\"productID\":\"" + PRODUCT_ID +
                    "\", \"productInstanceAttributes\":           {\"deviceSerialNumber\":\"" + PRODUCT_DSN + "\"}}}";
options.putString(AuthzConstants.BUNDLE_KEY.SCOPE_DATA.val, scope_data);
options.putBoolean(AuthzConstants.BUNDLE_KEY.GET_AUTH_CODE.val, true);
options.putString(AuthzConstants.BUNDLE_KEY.CODE_CHALLENGE.val, CODE_CHALLENGE);
options.putString(AuthzConstants.BUNDLE_KEY.CODE_CHALLENGE_METHOD.val, "S256");
mAuthManager.authorize(APP_SCOPES, options, new AuthorizeListener());

首先,我不知道 APP_SCOPES 应该是什么。我将其设置为:

protected static final String[] APP_SCOPE = new String[]{"profile", "postal_code"};

但是我从服务器收到一个错误

AuthError cat= INTERNAL type=ERROR_SERVER_REPSONSE - com.amazon.identity.auth.device.AuthError: Error=invalid_scope error_description=An unknown scope was requested

问题不在于 APP_SCOPES 变量,实际上是在作用域数据中传递的 PRODUCT_ID、PRODUCT_DSN 变量。

我遇到了这个完全相同的问题,并在亚马逊开发者论坛上提出了关于这些变量需要传递什么的问题 - Alexa authentication issue using beta SDK

一旦确定了 PRODUCT_ID、PRODUCT_DSN 和 CODE_CHALLENGE 变量,那么身份验证应该非常简单。

APP_SCOPE应该是"alexa:all"

APP_SCOPE是:"alexa:all"

PRODUCT_DSN 可以是任何你想要的,根据 Joshua Frank (https://forums.developer.amazon.com/forums/message.jspa?messageID=18973#18973)

的建议,“1234”

PRODUCT_ID是AVS Developper Portal中的ID(https://developer.amazon.com/edw/home.html#/avs/list)

您应用程序的安全配置文件中的 CODE_CHALLENGE 客户端机密(应该已经在 S256 中进行了哈希处理)