流程如下:
1:app上创建一个Alexa的入口按钮,点击按钮
如果安装了Alexa:
app使用Alexa应用程序URL启动Alexa应用程序;
Alexa应用程序启动并询问用户是否同意将Alexa与您的服务联系起来;
用户确认链接请求;
Alexa应用程序使用您的重定向URL将带有授权代码的URL返回到app中;
//判断手机有没有安装Alexa应用
guard let urlLocal = URL(string: "alexa://"), UIApplication.shared.canOpenURL(urlLocal) else {
//跳转失败,请检查手机是否安装Amazon Alexa
return
}
UIApplication.shared.open(urlLocal)
如果没有安装Alexa:
app通过网页打开LWA后备URL启动LWA;
用户登录他们的亚马逊帐户;
询问用户是否要将Alexa与您的服务联系起来,用户确认链接请求;
LWA通过重定向URL返回到app,并附带授权代码
您的后端服务器调用LWA授权服务URL,并将其在上一步中获取的授权码做为访问令牌。
您的后端服务器呼叫您的授权服务器以获取用户的授权代码
您的后端服务器使用用户的亚马逊访问令牌和用户对您服务的授权代码调用Alexa技能启用API,以启用该技能并链接帐户。
Alexa转到应用程序的访问令牌URL,将用户的服务授权代码交换为您的服务的访问令牌,从而完成帐户链接;
app实现的关键步骤
一:app中写一个连接Alexa的入口
二:启用通用链接 universal links
参考教程:https://www.jianshu.com/p/04f9f495fd43?v=1676035418292
三:从后台获取Alexa应用程序URL和LWA后备URL
四:点击Alexa入口打开URL(关键代码如下,具体代码参考demo)
private func openUniversalLinks(companionAppURL: URL, lwaFallbackURL: URL) {
UIApplication.shared.open(companionAppURL, options: [UIApplication.OpenExternalURLOptionsKey.universalLinksOnly:true]) {
companionAppLaunched in
if !companionAppLaunched {
if #available(iOS 12.0, *) {
self.initWebAuthenticationSession(authURL: lwaFallbackURL)
} else if #available(iOS 11.0, *) {
self.initAuthenticationSession(authURL: lwaFallbackURL)
} else {
UIApplication.shared.open(lwaFallbackURL) }
}
}
}
func initWebAuthenticationSession(authURL:URL) {
if let session = AlexaVC.webAuthenticationSession {
session.cancel()
}
self.webAuthenticationSession = ASWebAuthenticationSession.init(url: authURL, callbackURLScheme: AlexaVC.CALLBACK_URL_SCHEME.urlEncoded(), completionHandler:{
(callBack:URL?, error:Error?) in
print("error-----")
// Callback and error handling
})
if #available(iOS 13.0, *) {
self.webAuthenticationSession!.presentationContextProvider = self
}
self.webAuthenticationSession?.start()
}
五:获取返回的授权code作为访问令牌
六:在app中显示用户的帐户链接状态
对应的具体代码请参考该文件:链接: https://pan.baidu.com/s/1cqWI1cFKvtTXseMLk79Sgw 提取码: 1234