账号 Android SDK

更新时间:2019-05-27 18:26:08

概述

账号和用户 SDK,提供账号能力,包括注册,登录,登出,获取账号,会话管理,人机校验,UI定制,以及基于 iotToken的用户身份认证功能。

账号和用户SDK主要包含两个功能:登录和身份认证,在初始化账号和用户SDK之前,必须要先初始化API通道SDK,请参见 API 通道 - 初始化。

依赖SDK 概述
API 通道 提供API通道能力

使用说明

初始化

//登录功能的初始化的代码片段
OALoginAdapter adapter = new OALoginAdapter(application);
adapter.init("online");
LoginBusiness.init(application,adatper,true,"online");
//认证功能的初始化代码片段
IoTCredentialManageImpl.init(appKey);
IoTAuthProvider provider = new IoTCredentialProviderImpl(IoTCredentialManageImpl.getInstance(app));
IoTAPIClientImpl.getInstance().registerIoTAuthProvider("iotAuth", provider);

登录

LoginBusiness.login(new ILoginCallback() {
    @Override
    public void onLoginSuccess() {
        Log.i(TAG,"登录成功");                    
   }

    @Override
    public void onLoginFailed(int code, String error) {
        Log.i(TAG,"登录失败");                    
    }
});

退出登录

LoginBusiness.logout(new ILogoutCallback() {
    @Override
    public void onLogoutSuccess() {
        Log.i(TAG,"登出成功");                    
    }

    @Override
    public void onLogoutFailed(int code, String error) {
        Log.i(TAG,"登出失败");                    
    }
});

刷新会话

LoginBusiness.refreshSession(true, new IRefreshSessionCallback() {
    @Override
    public void onRefreshSuccess() {
        Log.i(TAG,"刷新Session成功");
    }

    @Override
    public void onRefreshFailed() {
        Log.i(TAG,"刷新Session失败");
    }
});

获取会话ID

LoginBusiness.getSessionId();

获取用户信息

LoginBusiness.getUserInfo();

发送带身份认证的请求

构建 IoTRequest 时必须需要填写 AuthType 参数(值为“iotAuth”)

代码如下所示:

IoTRequest request = new IoTRequestBuilder()
    .setPath("path")
    .setApiVersion("1.0.4")
    .addParam("request", paramMap)
    .setAuthType("iotAuth")
    .build();
IoTAPIClient ioTAPIClient = new IoTAPIClientFactory().getClient();
ioTAPIClient.send(request, new IoTCallback() {
     @Override
     public void onFailure(IoTRequest ioTRequest, Exception e) {

     }

     @Override
     public void onResponse(IoTRequest ioTRequest, IoTResponse ioTResponse) {

     }
});

获取用户凭证(iotToken)

获取用户认证数据代码片段如下,如果结果返回NULL,可以调用异步刷新接口重新获取

IoTCredentialManage ioTCredentialManage = IoTCredentialManageImpl.getInstance(app);
if(ioTCredentialManage!=null){
    ioTCredentialManage.getIoTCredential();
}

刷新用户凭证(iotToken)

IoTCredentialManage ioTCredentialManage = IoTCredentialManageImpl.getInstance(app);
if (ioTCredentialManage != null) {
    ioTCredentialManage.asyncRefreshIoTCredential(new IoTCredentialListener() {
        @Override        
        public void onRefreshIoTCredentialSuccess(IoTCredentialData ioTCredentialData) {
            Log.i(TAG, "refresh IoTCredentailData success :" + ioTCredentialData.toString());
        }

        @Override
        public void onRefreshIoTCredentialFailed(IoTCredentialManageError ioTCredentialManageError) {
            Log.i(TAG, "refresh IoTCredentailData failed ");
            if (ioTCredentialManageError != null) {
                Log.i(TAG, "error code is:" + ioTCredentialManageError.errorCode);
            }
        }
    });
}

自定义UI

请参考 UI界面自定义 一文

混淆配置


-keep class com.alibaba.sdk.android.*

-keep class com.aliyun.iot.aep.sdk.login.**{*;}

-keep public class com.aliyun.iot.aep.sdk.credential** {
    public <methods>;
    public <fields>;
}

更多

旧版本SDK的初始化

//如果使用旧版本SDK:com.aliyun.iot.aep.sdk:account 为0.0.2以下,
//com.aliyun.iot.aep.sdk:iot-credential)版本为0.0.1.7以下,请使用如下代码完成登录初始化

OALoginAdapter adapter = new OALoginAdapter(application);
LoginBusiness.init(application,adatper,true,"online");
IoTCredentialManageImpl.init(loginAdapter, appkey);
IoTAuthProvider provider = new IoTCredentialProviderImpl(IoTCredentialManageImpl.getInstance(app));
IoTAPIClientImpl.getInstance().registerIoTAuthProvider("iotAuth", provider);

常见问题说明:

问题1 : 执行登录或者注册时,提示“亲,您的手机网络不太顺畅哦~”

排查步骤:

  • 确认安全图片是否在src/drawable目录下,如果在在初始化代码中设置了图片后缀为“114d”,请务必保证安全图片的名称为yw_1222_114d;

      //设置图片后缀
      ConfigManager.getInstance().setSecGuardImagePostfix("114d");
    
  • 确认初始化中是否有抛出异常

    • 其中ErrorCode=110的异常码可以忽略
    • 以下几种Warn可以忽略(用来检查社交账号SDK)
      W/oa_Oauth: [] : Umeng is not available, Umeng Oauth Service Provider is disabled
      W/oa_Oauth: [] : Taobao MemberSDK is not available, Taobao 3rd Oauth Service Provider is disabled
      W/oa_Oauth: [] : Taobao login4android SDK is not available, Taobao 2nd Oauth Service Provider is disabled
      W/oa_Oauth: [] : Alipay sdk is not available, Alipay Oauth Service Provider is disabled
      
  • 如果是用Demo中提供的OALoginAdapter,下面异常日志可以忽略

      java.lang.NullPointerException: Attempt to invoke virtual method 'long java.lang.Long.longValue()' on a null object reference
      at com.aliyun.iot.aep.sdk.login.oa.OALoginAdapter.a(OALoginAdapter.java:343)
    

问题2 : 无法打开登录页面

排查步骤:

  • 确认日志中是否有以下异常输出
      init failed code = 10010 message = 发生错误,消息为 null, 请使用 LogCat 查看更多细节
      或者
      Failed resolution of: Lcom/ut/mini/UTHitBuilders@UTCustomHitBuilder
    

说明主工程缺少UT SDK的依赖,请在主工程里增加如下两个依赖,或者在平台上重新下载SDK依赖文件:

  •     compile 'com.aliyun.ams:alicloud-android-utdid:1.1.5.4'
        compile 'com.aliyun.ams:alicloud-android-ut:5.1.0'
    

问题3:无法正常获取iotToken,或者调用接口时返回认证错误

排查步骤: 请根据接口返回的异常信息(例如errorCode的值)判断,错误码定义如下:

/**
 * 账号未登录,需要登录
 */
public static final int RESULT_CODE_NOT_LOGIN = 0;

/**
 * 账号类型错误, accountType 需要和一站式开发平台配置保持一致
 */
public static final int RESULT_CODE_ACCOUNT_TYPE_INVALID = 1;

/**
 * 账号 authCode 无效
 */
public static final int RESULT_CODE_AUTHCODE_INVALID = 2;

/**
 * 服务器返回 refreshToken 过期或无效,需要重新登录
 */
public static final int RESULT_CODE_REFRESHTOKEN_INVALID = 3;

/**
 * 服务器响应的报文格式异常 ,请提工单
 */
public static final int RESULT_CODE_WRONG_RESPONSE_FORMAT = 4;

/**
 * 账号 authCode 校验失败,如果重新登录再请求还报同样的错误码,请提工单
 */
public static final int RESULT_CODE_AUTHCODE_CHECK_FAILED = 5;

/**
 * 其他错误,如,网络错误或服务器返回的错误,会把原始错误信息通过 userInfo.detail 透传
 */
public static final int RESULT_CODE_OHTER = -1;

问题4 : 刷新IoTToken一直提示错误

排查步骤:

  • 确认是否有同一个账号多端登录,目前的认证系统不支持同一个账号多端登录,后登录的设备会将之前登录的设备踢掉,表现为:刷新IoTToken一直失败,返回错误码为3,详情请参考问题3的错误码描述。

  • 确认是否登录,确认在实现ILoginAdapter时,是否有实现refreshSession接口(当登录态失效时,身份认证SDK会调用ILoginAdapter.refreshSession来刷新)。

  • 其他错误码请参考问题3

results matching ""

    No results matching ""