好问题。
简短回答:您需要建立自己的配对方式,将第三方用户与Alexa UserID关联起来。Alexa Skills SDK中没有内置支持,可以让您将Alexa UserID与您的用户ID关联起来。您需要创建一个特定的语音意图,将Alexa UserIDs与您的Users DB关联起来。
较长回答:让我们从讨论每个请求中获取的Alexa UserID开始。您获得的Alexa UserID是LWA(Login-With-Amazon)用户ID。它的主要作用是允许Alexa Skills可靠地检测重复的用户。
那么什么不起作用呢?您会遇到的问题是,LWA userId始终对每个Alexa应用程序进行匿名化处理。这很重要,因为它确保用户不被跟踪;但它也防止您将Alexa userID与自己的LWA userID关联起来。
来自“使用Amazon登录 - 开发人员指南”(第10页)
每个为Login with Amazon创建网站或应用程序的公司都会为客户获得相同的user_id。然而,当客户登录另一家公司的应用程序或网站时,{user_id将不同}。这样做是为了防止使用user_id跟踪客户在Web上的活动。
我的意思是说,你不能只是在iOS、Android或Web应用程序中实现LWA,并期望获得与Alexa userID相同的LWA userId。例如,如果您
在您的Android应用程序上实现了LWA并让foo@bar.com用户登录其Amazon账户,则可能会获得amzn1.account.123456作为userID,但是当同一个foo@bar.com用户与其配对的Echo交互时,您会得到amzn1.account.98765或任何其他完全不同的userId。我花了两天时间建造这个架构,所以我知道它行不通。
那么,什么是有效的解决方案呢?一个基于语音的Pin认证变体似乎最好。
让我们看一下另一个有类似问题的应用程序空间:电视应用程序(Xbox,Android TV等)。许多这些应用程序需要您登录才能访问内容(例如Hulu,Netflix等)。但是使用遥控器输入用户名和密码只是老掉牙的不好的用户体验。那么我们为电视应用程序做了什么呢?用户转到myService.com/tv,登录其帐户并获取一个特殊的短数字和时间敏感的PIN码,他们可以将其输入到其电视中。
当我实施Alexa Skill时,我们决定采取类似的方法。用户将登录到我们的网站,iOS应用程序或Android应用程序,转到专用的Echo页面,然后获取PIN码。屏幕上的说明将读取类似于以下内容:
“去你的Echo并说:”
“'启动foo'”
“'我的PIN码是1234'”
在我们的
foo技能中,我们有一个
PairingIntent意图来监听"
我的密码是{one two three four|pinCode}"样例话语。收到PairingIntent后,我们会检查该PIN码是否有效,如果有效,则将该Alexa用户ID与我们自己的用户数据库相关联。如果PIN码有效,Echo会说类似于"
哦,你好Bob!现在你可以访问所有你的精彩内容了。"。如果PIN码无效,Alexa会提示用户再试一次。
希望这样说得清楚。还有其他选项可以将第三方账户与Alexa技能关联起来,但这种语音PIN码方法最简单。