账号及用户 SDK

更新时间:2018-08-01 21:24:46

概述

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

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

初始化

初始化 SDK 前,请先初始化 API 通道SDK,请参见 API 通道 - 初始化

SDK 运行前,需要通过 ConfigManager 完成对 SDK 的配置。

 /**
  * 设置当前的环境信息 -- 目前只支持线上环境
  * Environment.ONLINE 线上
 **/
ConfigManager.getInstance().setEnvironment(Environment.ONLINE);
//设置图片后缀
ConfigManager.getInstance().setSecGuardImagePostfix("114d");
//设置使用单张图片
ConfigManager.getInstance().setUseSingleImage(true);
//使用API网关
ConfigManager.getInstance().setAPIGateway(true);

//打开调试,会有详细日志输出
OpenAccountSDK.turnOnDebug();


//调用异步初始化
OpenAccountSDK.asyncInit(getApplicationContext(), new InitResultCallback() {
    @Override
    public void onSuccess() {
        ToastUtil.show(getApplicationContext(), "OpenAccountSDK 初始化成功");
    }

    @Override
    public void onFailure(int code, String msg) {
        ToastUtil.show(getApplicationContext(), "OpenAccountSDK 初始化失败 : " + msg);
    }
});

OpenAccountSDK 提供的接口,请参见 API Doc

使用方式

登录

public void login() {
    OpenAccountUIService openAccountService = OpenAccountSDK.getService(OpenAccountUIService.class);

    try {
         openAccountService.showLogin(context, new LoginCallback() {
                 @Override
             public void onSuccess(OpenAccountSession openAccountSession) {
                ToastUtil.show(getApplicationContext(), "登录成功");   
             }

             @Override
             public void onFailure(int i, String s) {
                  ToastUtil.show(getApplicationContext(), "登录失败");  
             }
         });
    } catch (Exception e) {
        ToastUtil.show(getApplicationContext(), "登录异常 : " + e.toString());
    }
}

退出登陆

public void logout() {
    OpenAccountService openAccountService = OpenAccountSDK.getService(OpenAccountService.class);

    try {
           openAccountService.logout(context, new LogoutCallback() {
               @Override
               public void onSuccess() {
                   ToastUtil.show(getApplicationContext(), "登出成功");     
               }

               @Override
               public void onFailure(int i, String s) {
                    ToastUtil.show(getApplicationContext(), "登出失败 : " + s);
               }
           });
    } catch (Exception e) {
         ToastUtil.show(getApplicationContext(), "登出异常 : " + e.toString());
    }
}

刷新会话

OpenAccountSessionService openAccountSessionService = OpenAccountSDK.getService(OpenAccountSessionService.class);
openAccountSessionService.refreshSession(true);

获取会话ID

private long getSessionId() {
   SessionManagerService sessionManagerService = OpenAccountSDK.getService(SessionManagerService.class);
   if (sessionManagerService == null) {
            return 0;
   }
   return sessionManagerService.getSessionId();
}

获取用户信息

public User getUserInfo() {
     OpenAccountService openAccountService = OpenAccountSDK.getService(OpenAccountService.class);
     OpenAccountSession session = openAccountService.getSession();
     return session == null ? null : session.getUser();
}

三方自有账号接入

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

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

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

 OpenAccountService service = OpenAccountSDK.getService(OpenAccountService.class);

 service.authCodeLogin(OALoginActivity.this, authCode, new LoginCallback() {
    @Override
        public void onSuccess(OpenAccountSession openAccountSession) {
            Toast.makeText(getApplicationContext(), "auth 授权登录 成功  ", Toast.LENGTH_SHORT).show();
        }

    @Override
        public void onFailure(int code, String msg) {
             Toast.makeText(getApplicationContext(), "auth授权登录 失败 code = " + code + " message = " + msg, Toast.LENGTH_SHORT).show();
        }
  });

自定义UI

请参考 UI界面自定义 一文

海外社交账号Auth登录(Facebook,Gmail,Twitter)

重要说明,接入海外账号需要翻墙。

1. Facebook

  1. 申请Facebook开发者账号 https://developers.facebook.com/
  2. 创建自己的应用,并根据官方的流程,完整应用的创建以及配置 https://developers.facebook.com/quickstarts/?platform=android
  3. 针对上一步创建的应用,接入登录SDK https://developers.facebook.com/docs/facebook-login/android/
  4. 应用审核,发布。 由于Facebook的要求,创建的应用必须发布上线,才可以使用已经注册过的Facebook账号登录,否则,需要增加测试的Facebook账号。

应用发布可以参考如下步骤:

  • 关于应用发布的说明,请仔细阅读官方说明:

image.png | left | 377x235

image.png | left | 671x223

  • 在设置一栏中填写应用上线前的基本信息(如果不想上线,可以在用户身份里,配置测试账户)

image.png | left | 545x269

  • 然后选择应用审核,注意如果上一步没有填写完整,发布时会同样给出警告:

image.png | left | 627x357

  • 审核完成通过之后,点击第二个红框开关,将应用发布上线。

对接OA

推荐使用SDK版本

implementation('com.facebook.android:facebook-android-sdk:4.20.0')

参考初始化代码

  private void initFaceBook() {
    if (isInitFaceBook) {
        return;
    }
    try {
        ApplicationInfo applicationInfo = null;
        applicationInfo = getPackageManager().getApplicationInfo(
                getPackageName(), PackageManager.GET_META_DATA);
        if (applicationInfo == null || applicationInfo.metaData == null) {
            return;
        }
        String appId = (String) applicationInfo.metaData.get(APPLICATION_ID_PROPERTY);
        //注入FacebookID,由于OA SDK已经封装了配置FacebookID接口,所以不用再单独调用方法 FacebookSdk.setApplicationId(appId);
        ConfigManager.getInstance().setFacebookId("688987971492391");
    } catch (Exception e) {
        Log.i(TAG, "set facebookid error:" + e.toString());
    }
}

打开Facebook登录

OauthService oauthService = OpenAccountSDK.getService(OauthService.class);
try{
    oauthService.oauth(this, OauthPlateform.FACEBOOK, new LoginCallback() {
        @Override
        public void onSuccess(OpenAccountSession link) {
            Toast.makeText(App.context, "oauth 成功 link = " , Toast.LENGTH_LONG).show();
        }

        @Override
        public void onFailure(int code, String msg) {
            Toast.makeText(App.context, "oauth 失败 code = " + code + " message = " + msg, Toast.LENGTH_LONG).show();
        }
    });
}catch(Exception e){
    e.printStackTrace();
}


在调用oauth的Activity上,设置回调回传。

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    OauthService service = OpenAccountSDK.getService(OauthService.class);
    if(service != null){
        service.authorizeCallback(requestCode,resultCode,data);
    }
}

2. GMail登录

1.环境配置

手机需要安装 谷歌三件套(谷歌服务,谷歌服务框架,谷歌商店)。

2.配置自己的应用

图片.png | left | 747x379

图片.png | left | 747x283

  • 2.3 填写应用信息

图片.png | left | 747x403

  • 2.4 获取SHA-1方法可使用如下命令
keytool-list-v-keystore mystore.keystore
  • 2.5 按下图所示选择自己的项目然后创建API密钥, 创建之后API密钥会有一个黄色的警告标志,需要点击一下API密钥1进行设置。

图片.png | left | 747x177

图片.png | left | 691x233

进入到API密钥1设置页面之后主要有如下所示的两步,选择已创建的应用类型,添加软件包名称和指纹(也即是SHA-1的值),完成这两部之后点击保存。

图片.png | left | 747x778

3.代码接入

  • 在project目录级的build.gradle文件下对应位置添加google仓库地址

    repositories {
          maven {
          url 'https://maven.google.com'
          }
    ....
      }
    
  • 在app级目录下build.gradle 添加依赖库

    apply plugin: 'com.android.application'
    
      dependencies {
          compile 'com.google.android.gms:play-services-auth:15.0.1'
    ....
      }
    

    对接OA

    ```java

ConfigManager.getInstance().setGoogleClientId(googleId);



```java
点击按钮开始授权
OauthService oauthService = OpenAccountSDK.getService(OauthService.class);
try{
    oauthService.oauth(this, OauthPlateform.GOOGLE, new LoginCallback() {
        @Override
        public void onSuccess(OpenAccountSession link) {
            Toast.makeText(App.context, "oauth 成功 link = " , Toast.LENGTH_LONG).show();

            LoginCallback loginCallback = OALoginActivity.this.getLoginCallback();
            if (loginCallback != null) {
                loginCallback.onSuccess(session);
                OALoginActivity.this.finishWithoutCallback();
            }

        }

        @Override
        public void onFailure(int code, String msg) {
            Toast.makeText(App.context, "oauth 失败 code = " + code + " message = " + msg, Toast.LENGTH_LONG).show();
            LoginCallback loginCallback = OALoginActivity.this.getLoginCallback();
            if (loginCallback != null) {
                loginCallback.onFailure(code, msg);
            }     
        }
    });
}catch(Exception e){
    e.printStackTrace();
}

在调用oauth的Activity上,设置回调回传。

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    OauthService service = OpenAccountSDK.getService(OauthService.class);
    if(service != null){
        service.authorizeCallback(requestCode,resultCode,data);
    }
}

3. Twitter登录

3.1 申请账号 https://apps.twitter.com/

3.2 创建应用 https://apps.twitter.com/

3.3 集成sdk

com.twitter.sdk.android:twitter-core:1.6.5

现阶段支持海外第三方账号的OA sdk还没有适配到最新版本的twitter sdk

3.4 初始化twitter ,要在OA初始化前调用

ConfigManager.getInstance().setTwitterConfig( CONSUMER_KEY,  CONSUMER_SECRET);

3.5 接入OA代码片段

点击按钮开始授权
OauthService oauthService = OpenAccountSDK.getService(OauthService.class);
try{
    oauthService.oauth(this, OauthPlateform.TWITTER, new LoginCallback() {
        @Override
        public void onSuccess(OpenAccountSession link) {
            Toast.makeText(App.context, "oauth 成功 link = " , Toast.LENGTH_LONG).show();
        }

        @Override
        public void onFailure(int code, String msg) {
            Toast.makeText(App.context, "oauth 失败 code = " + code + " message = " + msg, Toast.LENGTH_LONG).show();
        }
    });
}catch(Exception e){
    e.printStackTrace();
}

在调用oauth的Activity上,设置回调回传。

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    OauthService service = OpenAccountSDK.getService(OauthService.class);
    if(service != null){
        service.authorizeCallback(requestCode,resultCode,data);
    }
}

混淆配置


-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'
    

results matching ""

    No results matching ""