Amazon Alexa登录授权(Android)

访问Alexa的API,必须要携带AccessToken,也就是必须要登录授权,本文主要记录Amazon Alexa在Android平台上的登录授权过程。

一、在亚马逊开发者平台注册应用

进入亚马逊开发者平台的Alexa栏

https://developer.amazon.com/edw/home.html#/

点击Alexa Voice Service的Get Started,进入到应用管理页面

选择注册一个产品,我这边选的是application,然后开始填写相关信息。

这里Application Type ID必须唯一,并且需要记住这个id,在代码中需要加入这个id,Display Name是授权时用户会看到的名字。填好进入下一步

创建Profile,Profile应该就是登录授权时要校验的信息,这里选择新建一个,填好信息进入next

选择Android/Kindle Settings栏,填写相关信息,其中Package和Signature是校验的关键,Package是实际Android工程的包名,Signature是签名的MD5值,debug阶段也是需要有一个debug的签名的。

生成签名:

keytool -genkey -alias xxx -keyalg RSA -validity 20000 -keystore yyy.keystore

xxx : keystore的alias 
20000 : keystore的有效天数 
yyy.keystore : keystore的名称

查看签名信息:

keytool -list -v -alias <xxx> -keystore <yyy.keystore>

填好后点击add,会生成一个key

这个key很重要,也是需要导入的Android工程中的,具体导入见后文。后面完善好信息项目就创建完成了,接下来就需要在Android工程中添加相关代码了。

二、添加登录授权相关代码到Android工程

1、下载login with Amazon的sdk,下载地址:https://developer.amazon.com/sdk-download,下载后加入到工程中。

2、manifest中增加网络访问权限

<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

3、manifest中声明WorkflowActivity

<activity android:name="com.amazon.identity.auth.device.workflow.WorkflowActivity" android:theme="@android:style/Theme.NoDisplay"
android:allowtaskreparenting="true" android:launchmode="singleTask">
   <intent-filter>
      <action android:name="android.intent.action.VIEW">
      <category android:name="android.intent.category.DEFAULT">
      <category android:name="android.intent.category.BROWSABLE">
      <!-- android:host must use the full package name found in Manifest General Attributes -->
      <data android:host="${applicationId}" android:scheme="amzn">
   </intent-filter>
</activity>

4、添加Key

在assets目录下新建api_key.txt文件,内容为之前profile中的key

5、增加登录授权相关代码

private RequestContext requestContext;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestContext = RequestContext.create(this);

requestContext.registerListener(new AuthorizeListener() {

    /* Authorization was completed successfully. */
    @Override
    public void onSuccess(AuthorizeResult result) {
        /* Your app is now authorized for the requested scopes */
    //result.getAccessToken 就是需要的AccessToken
    }

    /* There was an error during the attempt to authorize the
       application. */
    @Override
    public void onError(AuthError ae) {
        /* Inform the user of the error */
    }

    /* Authorization was cancelled before it could be completed. */
    @Override
    public void onCancel(AuthCancellation cancellation) {
        /* Reset the UI to a ready-to-login state */
    }
});
View loginButton = findViewById(R.id.login_with_amazon); loginButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
final JSONObject scopeData = new JSONObject();final JSONObject productInstanceAttributes = new JSONObject();

try {    productInstanceAttributes.put("deviceSerialNumber", Settings.Secure.getString(getContentResolver(),            Settings.Secure.ANDROID_ID));    scopeData.put("productInstanceAttributes", productInstanceAttributes);    scopeData.put("productID", PRODUCT_ID);//这里的PRODUCT_ID就是之前申请的Application ID    AuthorizationManager.authorize(new AuthorizeRequest.Builder(requestContext)            .addScope(ScopeFactory.scopeNamed("alexa:all", scopeData))            .forGrantType(AuthorizeRequest.GrantType.ACCESS_TOKEN)            .shouldReturnUserData(false)            .build());} catch (JSONException e) {    Log.e(TAG,"JSONException = "+e);}
});
}
@Override
protected void onResume() {
    super.onResume();
    requestContext.onResume();
}

@Override
protected void onStart(){ super.onStart();
Scope[] scopes = { ALEXA_ALL_SCOPE };
AuthorizationManager.getToken(this, scopes, new Listener<AuthorizeResult, AuthError>() {

    @Override
    public void onSuccess(AuthorizeResult result) {
        if (result.getAccessToken() != null) {//就是需要的AccessToken
  /* The user is signed in */ } else {   /* The user is not signed in */ } } 

@Override public void onError(AuthError ae) { /* The user is not signed in */ } }); } 

代码比较简单易懂,具体可以参见

https://developer.amazon.com/public/apis/engage/login-with-amazon/docs/use_sdk_android.html

时间: 2024-10-17 12:23:16

Amazon Alexa登录授权(Android)的相关文章

微信开放平台 公众号第三方平台开发 教程三 一键登录授权给第三方平台

原文:微信开放平台 公众号第三方平台开发 教程三 一键登录授权给第三方平台 教程导航: 微信开放平台 公众号第三方平台开发 教程一 平台介绍 微信开放平台 公众号第三方平台开发 教程二 创建公众号第三方平台 微信开放平台 公众号第三方平台开发 教程三 一键登录授权给第三方平台 微信开放平台 公众号第三方平台开发 教程四 代公众号调用接口的SDK和demo 公众号第三方平台的开放,是为了让公众号运营者,在面向垂直行业需求时,可以一键登录授权给第三方的公众号运营平台,通过第三方开发者提供的公众号第三

06_NoSQL数据库之Redis数据库:Redis的高级应用之登录授权和主从复制

 Redis高级实用特征 安全性(登录授权和登录后使用auth授权) 设置客户端连接后进行任何其他指定前需要使用的密码. 警告:因为redis速度相当快,所以在一台比较好的服务器下,一个外部的用户可以在一秒中进行150k次的密码尝试,这意味着你需要指定非常非常强大的密码来防止暴力破解. 修改密码只需要在我们的配置文件中修改下面参数: #requirepass foobared Requirepass beijing     (红色的就是指定的要配置的密码) 上面的一句表示的是设置连接的口令是

公众号一键登录授权给第三方平台方的技术流程

总体流程 1.用户进入第三方平台方网站 一般而言,用户需要先进入第三方平台方网站,如www.ABC.com 2.第三方平台方获取预授权码 预授权码是第三方平台方实现授权托管的必备信息 3.发布后修改和覆盖现网 第三方平台方可以在自己的网站首页中放置"微信公众号登录授权"的入口,引导公众号运营者进入第三方平台授权页.网址为https://mp.weixin.qq.com/cgi-bin/componentloginpage?component_appid=xxxx&pre_aut

机智云在Amazon Alexa平台发布Smarthome和Custom Skill

机智云在Amazon Alexa平台率先发布了Smarthome Skill和Custom Skill,实现了亚马逊Echo直接控制机智云开源套件Gokit(包括Gokit2.0和Gokit3.0)!这也将意味着:随着机智云和亚马逊账号的打通,接入机智云的产品都可以轻松实现Amazon Echo控制功能.(下附实战篇) Amazon Echo是时下风靡全球的一款结合了Amazon人工智能助理 Alexa 的音箱,支持Wi-Fi连接,依靠语音命令进行激活,让用户以最自然的语音交互方式,连接到 Am

微信企业号登录授权Java实现获取员工userid根据userid换openid

微信企业号登录授权Java实现获取员工userid根据userid换openid 2016年1月8日 为了方便测试 .debug 建议大家搞个花生壳或者其他的可以映射公网IP的软件. 貌似涨价了8元一个.鄙人捡了个便宜1元买的.还是个二级域名 1.设置一个菜单调用授权接口的URL (https://open.weixin.qq.com/和这个网站的是不一样的东西)获取code https://open.weixin.qq.com/connect/oauth2/authorize?appid=CO

微信开发笔记——微信网页登录授权,获取用户信息

最近做了一个公司的微信的公众号,对微信的流程清楚了不少,这里记录下,算不上多高深的,只希望能帮助到一部分人吧. 我们公司的测试微信公众号:NPCgo 可以感受下,哈哈~~ 闲话少说,开始: 首先大家要看下微信的API文档. 微信网页授权,获取用户的微信官方API文档地址:http://mp.weixin.qq.com/wiki/17/c0f37d5704f0b64713d5d2c37b468d75.html 三次握手微信认证流程(我自己简称三次握手): 1.用户同意授权,获取code 2.通过c

google API 使用Client Login 登录授权

今天要使用google api来获取google analytics 的数据,所以必须要用到google 的登录授权. Google的服务认证体系包含了多种认证授权的方式,如AuthSub授权认证服务.OAUTH授权认证服务与ClientLogin授权认证服务等.具体大家可以参考 : http://blog.csdn.net/hereweare2009/article/details/4002537 http://blog.zhourunsheng.com/2011/07/%E8%84%9A%E

Asp .Net Core 2.0 登录授权以及多用户登录

用户登录是一个非常常见的应用场景 .net core 2.0 的登录方式发生了点变化,应该是属于是良性的变化,变得更方便,更容易扩展. 配置 打开项目中的Startup.cs文件,找到ConfigureServices方法,我们通常在这个方法里面做依赖注入的相关配置.添加如下代码: public void ConfigureServices(IServiceCollection services) { services.AddAuthentication(CookieAuthentication

腾讯QQ第三方登陆,登录授权失败110406?

首先确定你的应用是否已经上线成功,上线成功了可能是腾讯开放平台中你的应用出问题了,可以重新申请看看.如果你的应用未上线,这时需要你在你的应用中的"平台应用信息"-->"应用调试者"设置调试账号才能使用,不然登录授权好像就会报110406,无法完成授权 应用调试者的位置: 应用管理中心 应用信息管理-->用户能力 -->进阶社交能力-->应用调试者 加入你要测试的qq号