账号及用户 SDK

更新时间:2019-07-26 14:55:35

概述

账号和用户 SDK,提供账号能力,包括注册,登录,登出,获取账号,会话管理,人机校验等功能。
集成了UI显示并同时提供 UI 定制的能力。

在初始化账号和用户SDK之前,必须要先初始化API通道SDK,请参见 API 通道 - 初始化

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

初始化

SDK 运行前,需要首先初始化SDK,常见初始化代码片段如下:

如果com.aliyun.iot.aep.sdk:account 为0.0.2以及以上,请使用如下代码完成初始化

OALoginAdapter adapter = new OALoginAdapter(application);

//如果需要切换到海外环境,请执行下面setDefaultOAHost方法,默认为大陆环境
//adapter.setDefaultOAHost("sgp-sdk.openaccount.aliyun.com");

adapter.init("online","114d");

LoginBusiness.init(application, adapter, "online");

如果com.aliyun.iot.aep.sdk:account 为0.0.2以下,请使用如下代码完成初始化

OALoginAdapter adapter = new OALoginAdapter(application);
LoginBusiness.init(application,adatper,true,"online");

如果要使用原生的OpenAccountSDK 提供的接口,请参见 API Doc

使用方式

如果自定义实现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,"登出失败");                    
    }
});

忘记密码

调起登录页面之后,在登录页面内会出现注册和忘记密码的功能

修改个人信息

修改昵称

        Map<String, Object> map = new LinkedHashMap<>();
        map.put("displayName", newName);
        OpenAccountUIService oas = OpenAccountSDK.getService(OpenAccountUIService.class);
        oas.updateProfile(getApplicationContext(), map, new LoginCallback() {
            @Override
            public void onSuccess(OpenAccountSession openAccountSession) {
            }

            @Override
            public void onFailure(int i, String s) {
            }
        });

修改头像

需要先将头像图片存储到云端,获取该图片的url,再用如下方式更新

        Map<String, Object> map = new LinkedHashMap<>();
        map.put("avatarUrl", avatarUrl);
        OpenAccountUIService oas = OpenAccountSDK.getService(OpenAccountUIService.class);
        oas.updateProfile(getApplicationContext(), map, new LoginCallback() {
            @Override
            public void onSuccess(OpenAccountSession openAccountSession) {
            }

            @Override
            public void onFailure(int i, String s) {
            }
        });

刷新会话

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();

注销账号

参见 注销账号
注销账号的时候,同时会把用户绑定的设备都解除绑定关系。

登录失效处理

参见 身份认证SDK “处理认证失败”章节

国际化支持

1、引入OA-UI多语言SDK:api('com.aliyun.iot.sdk:account-oa-ui:0.0.2.5')
注:该sdk中已经引用com.aliyun.iot.aep.sdk:account-oa相关sdk,不需要重复引用。

2、设置多语言:

OALanguageHelper.setLanguageCode(Locale.US);
目前支持的多语言包括:Locale.US 英文、Locale.SIMPLIFIED_CHINESE 中文、Locale.FRANCE 法语、                    Locale.JAPAN 日语、Locale.GERMANY 德语、Locale.KOREA 韩语  、new Locale("ru","RU") 俄语、<br />    new Locale("es","ES") 西班牙语、new Locale("it","IT")意大利语、new Locale("hi","IN")印地语。<br />   <br />3、选择国家地区界面中的国家列表信息,除中文外,均显示英文。<br />     注:如需要使用其他语言的国家列表信息,需要用户自定义选择国家列表界面。

三方自有账号接入

注意在对接三方自有账号时,必须首先完成SDK的初始化。

强烈建议,在对接三方自有账号之前,请先确认默认的账号页面(内置账号体系)可以正常注册,登录。

可以选择自由账号通过OAuth2.0协议接入,前提需要做好配置,流程参考 账号及用户服务配置

推荐使用如下方式完成自有账号对接:

  1. 继承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));
    }

}
  1. 修改初始化代码:
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的具体实现。

自定义UI

请参考 UI界面自定义 一文

混淆配置


-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必须保持一致。

results matching ""

    No results matching ""