Android APP之接入AWS IOT实现发布订阅测试_awsiotmqttmanager

进入IAM控制台后点击角色,找到上面创建身份池时命名的两个角色名。
点击给经过验证的auth_xx的这个角色,点击附加策略。
在这里插入图片描述
测试可以点击附加策略后选择AWSIoTFullAccess全部权限,也可以点击创建内联策略自定义一个,json格式串可以网上搜,自定义主要可以缩小一些权限范围,后面再讲权限策略设置。

至此可以简单理解下:一个用户下载了APP,刚使用时是一个游客,当用户使用了Amazon账户联合登录或者服务器端对他进行了验证合法后用户就获得了auth_xx这个角色的权限,就能和IOT互动了。

3)创建IOT Policy
为什么还需要创建Iot Policy呢,因为官方文档里介绍这种接入AWS IOT的方式是由IAM角色的权限策略和这个identity身份上的权限策略组合而定的,至于两者的权限是如何合并界定参考官方,我也没细致研究。(题外话:如果给unauth_xx身份直接赋予了AWSIoTFullAccess权限是后不用附加IOT策略也是可以连接IOT平台的)
点击安全性->策略,创建一个新策略,内容也可以先设置全部权限,稍后和上面IAM一样再进行细分。
在这里插入图片描述

三 、编码

下面介绍以Login with Amzon为身份提供商接入AWS IOT 
 已准备好的工作:
   1>创建了一个身份池,关联定义了两个IAM角色,一个是未经过认证的角色,权限默认不需要更改,另一个是经过认证的角色,附加上了AWSIoTFullAccess权限。该身份提供商Amazon的ID已填写。
   2>Iot的后台创建了一个策略,策略先定义的全部权限(参照上图)
   3>注意区域选择一致

Android App中接入Login with Amazon不做详解,网上资料齐全没什么难度。
在oncreat方法里先初始化Cognito认证构造方法

credentialsProvider = new CognitoCachingCredentialsProvider(
                getApplicationContext(), // Context
                "XXXXXXXXXXXX", //Cognito控值台创建的身份池ID
                Regions.US\_EAST\_1 // 身份池所属区域
        );

题外话:如果是使用的自定义身份验证的方式,就不能使用这个构造方法了,要使用下面这个

DeveloperAuthenticationProvider developerProvider = new DeveloperAuthenticationProvider
                (null, Cognito\_Pool\_ID, Regions.US\_EAST\_1,baseApplication);
credentialsProvider = new CognitoCachingCredentialsProvider( context, developerProvider, Regions.US\_EAST\_1 );

developerProvider是需要自己实现的一个方法,继承自AWSAbstractCognitoDeveloperIdentityProvider

public class DeveloperAuthenticationProvider extends AWSAbstractCognitoDeveloperIdentityProvider {

    private static final String developerProvider = "xxxxxx";//这是自定义的身份提供商名
    private BaseApplication baseApplication;
	//构造方法
    public DeveloperAuthenticationProvider(String accountId, String identityPoolId, Regions region, BaseApplication baseApplication) {
        super(accountId, identityPoolId, region);
        this.baseApplication = baseApplication;
    }
    .............

这个自定义类中主要是要实现refresh方法

@Override
    public String refresh() {
        String result = "";
        String getIdenttid = "";
        String token="";
        try {
            //这里要调用后台服务器方法来获取权限,这里就简单传了存在sp中的用户ID到后台服务器
            String appToken = (String)baseApplication.get("token","");
            result = AcceletNetWork.synGet(HttpUrls.GetCognitoToken+"&appToken="+appToken);//这里采用的是同步
            Gson gson = new Gson();
            TokenDataBean dataBean = gson.fromJson(result, TokenDataBean.class);
            getIdenttid = dataBean.getIdenti
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值