用户账号
更新时间:2020-03-06 17:05:45
概述
账号和用户 SDK,提供账号能力,包括注册,登录,登出,获取账号,会话管理,人机校验等功能。同时提供 UI 定制的能力。
初始化
参考平台下载包里的说明文件。
如何使用
如果自定义实现ILoginAdapter时,请务必注意登录状态状态变化通知的方式(无论使用内置账号体系,还是三方自有账号体系),因为其他基础SDK会根据登录状态的变更做特殊业务逻辑处理。
关于如何将登录状态变更的消息通知出去,可以参考OALoginAdapter.OALoginCallback中,对mLoginStatusChangeListenerList的处理过程。
登录
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.getUserInfo();
身份认证SDK
提供基于 iotToken 的用户身份认证方案,通过和账号及用户 SDK、API 通道 SDK 的集成,完成用户身份凭证的生成和管理,以及发起 API 请求的用户身份的鉴权
处理需要鉴权的业务请求
.setAuthType("iotAuth") 指定认证方式为iotAuth 即身份认证
IoTRequest request = new IoTRequestBuilder()
.setPath("path")
.setApiVersion("1.0.4")
.addParam("request", paramMap)
.setAuthType("iotAuth") //
.build();
处理认证失败
当出服务端现认证错误,可以方便开发者随时监听这个错误,并在回调中做重新登入处理
IoTCredentialManageImpl.getInstance(app).setIotCredentialListenerList(IoTTokenInvalidListener listener)
其中IoTTokenInvalidListener定义如下:
public interface IoTTokenInvalidListener {
void onIoTTokenInvalid();
}
三方自有账号接入
注意在对接三方自有账号时,必须首先完成SDK的初始化。
强烈建议,在对接三方自有账号之前,请先确认默认的账号页面(内置账号体系)可以正常注册,登录。
可以选择自由账号通过OAuth2.0协议接入,前提需要做好配置,流程参考 账号及用户服务配置
推荐使用如下方式完成自有账号对接:
继承OALoginAdapter,重写login方法,示例代码片段如下:
public class MyOALoginAdapter extends OALoginAdapter { private Context context; public MyOALoginAdapter(Context context) { super(context); this.context = context; } @Override public void login(ILoginCallback callback) { //打开三方登录页面 context.startActivity(new Intent(context,XXXActivity.class)); //当XXXActivity登录成功之后,调用 //authLogin("authCode",callback); } private void authLogin(String authCode,ILoginCallback callback){ //authCode 是三方登录页面返回的code OpenAccountService service = OpenAccountSDK.getService(OpenAccountService.class); service.authCodeLogin(context, authCode, new OALoginCallback(callback)); } }
修改初始化代码:
MyOALoginAdapter adapter = new MyOALoginAdapter(application); adapter.init("online","114d"); //将初始化代码中的LoginAdapter替换为自己重写的adapter,注意 LoginBusiness.init(application, adapter, "online");
特别注意,在调用登录或者登出接口时,通过LoginBusiness.login,LoginBusiness.logout两个方法调用(其内部是通过调用ILoginAdapter.login,ILoginAdapter.logout方法),主要目的是尽可能保持上层业务调用方式的统一。
请注意在继承OALoginAdapter,重写login方法里,调用authLogin方法的第三个参数,务必使用OALoginCallback将原始 callback进行封装,其主要目的是为了将登录状态通知到其他基础SDK(其他基础SDK时通过ILoginAdapter.registerLoginListener方法监听,如果业务层也需要监听登录状态的变化,推荐也使用同样的方法),可以参考OALoginAdapter中两个内部类OALoginCallback和OALogoutCallback的具体实现。
如果一定需要自行实现OALoginAdapter,请参考SDK中OALoginAdapter的具体实现。
混淆配置
-keep class com.alibaba.sdk.android.*
登录常见问题:
问题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'
- 如果启动直接Crash,查看日志有提示XML相关的报错,请检查Manifest.xml中的packageName和build.gradle中的applicationID必须保持一致。