OpenAccount快速集成

更新时间:2019/01/04 访问次数:51732

1 Demo (百川平台上下载)注意:

1.1 将~/.android目录下的debug.keystore替换成demo中的debug.keystore,然后导入IDE运行。

1.2 gradle的仓库地址为:

maven { url "http://repo.baichuan-android.taobao.com/content/groups/BaichuanRepositories/" }

maven { url "http://repo.baichuan-android.taobao.com/content/repositories/BaichuanRepo-staged/" }

2 参考文档

和云账号有关的SDK有三个,分别是:云账号、云账号基础、三方登录和分享。他们的使用场景如下

云账号基础:云账号登录态维护。如果不希望集成带界面的云账号SDK,而只希望集成生易(Open Trade)、云旺(Open IM)等SDK,可以单独下载此SDK。

云账号:提供登录、注册界面等。云账号依赖云账号基础。

三方登录和分享:如果希望云账号SDK的登录页上具有使用第三方账号登录的功能,需要勾选此SDK。

3 SDK集成

参考demo中的gradle依赖:

compile 'com.alibaba.sdk.android.openaccount:openaccount-ui-default:3.1.2@aar'
compile 'com.alibaba.sdk.android.openaccount:openaccount-core:3.1.2@aar'
compile 'com.alibaba.sdk.android.openaccount:openaccount-ext:3.1.2@aar'

4 外部依赖:

//三方 ut
compile 'com.alibaba.mtl:app-monitor-sdk:2.5.0_for_bc'


//三方安全保镖,需要使用v5图片,在百川控制台上重新下载安全图片
   compile 'com.taobao.android:securityguardaar3:5.3.61@aar'

   com.taobao.android:securitybodyaar3:5.3.29@aar

   //三方 MTOP Open SDK
   compile 'com.taobao.android:mtopsdk_allinone_open:1.3.1'

注意:

要将AndroidManifest.xml中的内容合并到项目中,可以直接复制,也可以设置project.properties文件的manifestmerger.enabled为true。

5 SDK初始化

在Application的onCreate中调用AlibabaSDK.asyncInit();,可以参考Demo中的DemoApplication类。

示例:


OpenAccountSDK.asyncInit(this, new InitResultCallback() { @Override public void onSuccess() { Toast.makeText(DemoApplication.this, "open account初始化成功", Toast.LENGTH_SHORT).show(); } @Override public void onFailure(int code, String message) { Toast.makeText(DemoApplication.this, "open account初始化异常: " + message, Toast.LENGTH_SHORT).show(); } });

6 具体API调用

带界面服务OpenAccountUIService

public interface OpenAccountUIService {
            void showLogin(final Context context, final LoginCallback loginCallback);
            void showNoPasswordLogin(final Context context, final LoginCallback loginCallback);
            void showRegister(Context context, LoginCallback loginCallback);
            void showResetPassword(Context context, LoginCallback loginCallback);
            void showQrCodeLogin(Context context, Map<String, String> params, LoginCallback loginCallback);
            // 以下方法是为了方便开发者继承Activity进行深度定制,如果不需要可以忽略
           void showLogin(final Context context, Class<?> targetActivityClass, final LoginCallback loginCallback);
           void showNoPasswordLogin(final Context context, Class<?> targetActivityClass, final LoginCallback loginCallback);
           void showRegister(Context context, Class<?> targetActivityClass, LoginCallback loginCallback);
           void showResetPassword(Context context, Class<?> targetActivityClass, LoginCallback loginCallback);
           void showQrCodeLogin(Context context, Class<?> targetActivityClass, Map<String, String> params, LoginCallback loginCallback);

       }

showRegister

  • 打开账号注册界面

示例:

OpenAccountUIService openAccountUIService = OpenAccountSDK.getService(OpenAccountUIService.class);
    openAccountUIService.showRegister(this, new LoginCallback() {

        @Override
        public void onSuccess(OpenAccountSession session) {
            // 服务端token
            ToastUtil.show(MainActivity.this, "success: " + session.getAuthorizationCode());
        }

        @Override
        public void onFailure(int code, String msg) {
            ToastUtil.show(MainActivity.this, "error: " + msg);
        }
    });

showLogin

  • 打开账号密码登录界面

示例:

OpenAccountUIService openAccountUIService = OpenAccountSDK.getService(OpenAccountUIService.class);
    openAccountUIService.showLogin(this, new LoginCallback() {

        @Override
        public void onSuccess(OpenAccountSession session) {
            ToastUtil.show(MainActivity.this, "success: " + session.getUserId());
        }

        @Override
        public void onFailure(int code, String msg) {
            ToastUtil.show(MainActivity.this, "error: " + msg);
        }
    });

showNoPasswordLogin

  • 打开验证码登录页

用于没有注册和找密,直接通过手机号+短信验证码登录

示例:

OpenAccountUIService openAccountUIService = OpenAccountSDK.getService(OpenAccountUIService.class);
    openAccountUIService.showNoPasswordLogin(this, new LoginCallback() {

        @Override
        public void onSuccess(OpenAccountSession session) {
            // 服务端token
            ToastUtil.show(MainActivity.this, "success: " + session.getAuthorizationCode());
        }

        @Override
        public void onFailure(int code, String msg) {
            ToastUtil.show(MainActivity.this, "error: " + msg);
        }
    });

showResetPassword

  • 打开重置密码页面

示例:

OpenAccountUIService openAccountUIService = OpenAccountSDK.getService(OpenAccountUIService.class);
        openAccountUIService.showResetPassword(this, new LoginCallback() {

        @Override
        public void onSuccess(OpenAccountSession session) {
            ToastUtil.show(MainActivity.this, "success: " + session.getUserId());
        }

        @Override
        public void onFailure(int code, String msg) {
            ToastUtil.show(MainActivity.this, "error: " + msg);
        }
    });



showQrCodeLogin

  • 唤起登录二维码展示页
/**
     * 唤起登录二维码展示页
     *
     * @param context
     * @param params        </BR>
     *                      k[domain]    :   v[约定的业务线域标示]  </BR>
     *                      k[config]    :   v[json格式:自定义样式时传递的配置参数, 不支持嵌套, kv均为String类型] </BR>
     *                      k[userDefActivity]   :   v[QrLoginActivity子类的全路径名, 如果没有提供此参数默认加载QrLoginActivity]</BR>
     *                      k[userDefLayoutId]   :   v[自定义Activity对应的Layout文件名不带后缀, 如果没有提供此参数,加载默认Layout]
     * @param loginCallback
     */
     OpenAccountUIService openAccountUIService = OpenAccountSDK.getService(OpenAccountUIService.class);
     Map<String, String> params = new HashMap<String,String>();
    params.put("domain","yunoswatch");
    params.put("config","{\"qrwidth\":180}");
    params.put("userDefActivity","com.alibaba.sdk.android.openaccount.ui.ui.QrLoginActivity");
    params.put("userDefLayoutId","ali_sdk_openaccount_qr_login");
     openAccountUIService.showQrCodeLogin(context, params,new LoginCallback){
       @Override
            public void onSuccess(OpenAccountSession session) {
                ToastUtil.show(MainActivity.this, "success: " + session.getUserId());
            }

            @Override
            public void onFailure(int code, String msg) {
                ToastUtil.show(MainActivity.this, "error: " + msg);
            }
     });

OpenAccountSession

// 区分当前成功登录的场景 int LOGIN = 1; int REGISTER = 2; int RESET_PASSWORD = 3; int NO_PASSWORD_LOGIN = 4;
   int getScenario();
   // 是否登录
   Boolean isLogin();
   // 登录时间
   Long getLoginTime();
   // 获得Open Account ID
   String getUserId();
   // 获得User对象
   User getUser();
   // 获得服务端验证的Token
   String getAuthorizationCode();
   // 获得第三方账号登录后的Access Token、Refresh Token等信息
   Map<String, Object> getOtherInfo();
   session可以在回调中获得或者通过OpenAcccountService.getSession获得

OpenAccountService

public interface OpenAccountService {

/**
 * 登出当前账户
 *
 * @param context
 * @param logoutCallback
 *            必填,登出回调,成功调用onSuccess失败调用void onFailure(int code, String msg)
 */
   public void logout(Context context, LogoutCallback logoutCallback);

/**
 * 通过Token登录
 *
 * @param token 由ISV Server登录逻辑返回
 * @param context
 * @param loginCallback
 *            登录授权回调,<@link LoginCallback> 必填
 */
   public void tokenLogin(final Context context, final String token, final LoginCallback loginCallback);

/**
 * 获取当前OpenAccount用户信息
 *
 * @return
 */
   public Session getSession();

/**
 * 设置OpenAccount会话状态监听处理器
 *
 * @param sessionListener
 */
   public void addSessionListener(SessionListener sessionListener);

/**
 * 移除当前设置的OpenAccount状态监听处理器
 *
 * @return
 */
   public SessionListener removeSessionListeners(SessionListener sessionListener);

  }

logout

登出

示例:

OpenAccountService openAccountService = OpenAccountSDK.getService(OpenAccountService.class);
    openAccountService.logout(this, new LogoutCallback() {

        @Override
        public void onFailure(int code, String msg) {
            Toast.makeText(getApplicationContext(), "登出失败" + code, Toast.LENGTH_SHORT).show();

        }

        @Override
        public void onSuccess() {
            Toast.makeText(getApplicationContext(), "登出成功", Toast.LENGTH_SHORT).show();

        }
    });

tokenLogin

使用token登录,建立SDK内登录态,进而使用其他依赖登录态的服务,如Open IM和Open Trade等。

示例:

OpenAccountService openAccountService = OpenAccountSDK.getService(OpenAccountService.class);
openAccountService.tokenLogin(this, token, new LoginCallback() {

    @Override
    public void onSuccess(OpenAccountSession session) {
        ToastUtil.show(getApplicationContext(), "success: " + session.getUserId());
    }

    @Override
    public void onFailure(int code, String msg) {
        ToastUtil.show(getApplicationContext(), "error: " + msg);
    }
});

OpenAccount免登IM

OpenAccount的账号支持免登OpenIM(IM需要先初始化,具体参考:OpenIM初始化),使用方式如下:

OpenAccountUIService openAccountUiService = OpenAccountSDK.getService(OpenAccountUIService.class);
    openAccountUiService.showLogin(this, new LoginCallback(){

        @Override
        public void onFailure(int code, String message) {
            Toast.makeText(MainActivity.this, "取消登录"+code+message,
                    Toast.LENGTH_SHORT).show();
        }

        @Override
        public void onSuccess(OpenAccountSession session) {
            String userid = session.getUserId();
            YWIMKit mIMkit = YWAPI.getIMKitInstance(userid,APP_KEY);
            IYWLoginService loginService = mIMkit.getLoginService();
           String pwd = OpenAccountSDK.getService(SessionManagerService.class).getSessionId();
            YWLoginParam loginParam = YWLoginParam.createLoginParam(userid,pwd); 
            loginParam.setPwdType(YWPwdType.openID); 
           com.alibaba.mobileim.YWChannel.setOpenAccountAdapter(new IOpenAccountAdapter(){

          @Override
          public String getOpenId() {
              return userid;
           }

         @Override
         public String getSessionId() {
             return pwd;
         }

        @Override
        public void refresh() {

        }
     });
     loginService.login(loginParam, new IWxCallback() { 
          @Override 
          public void onSuccess(Object... arg0) { 
               Toast.makeText(getApplicationContext(), "IM登录成功", Toast.LENGTH_SHORT).show(); 
          }
         @Override 
         public void onProgress(int arg0) { // TODO Auto-generated method stub 
        }
         @Override 
          public void onError(int errCode, String description) { 
             //如果登录失败,errCode为错误码,description是错误的具体描述信息 
            Toast.makeText(getApplicationContext(), "IM登录失败"+errCode+description, Toast.LENGTH_SHORT).show(); 
         }
    });
  }});

混淆配置

-keepattributes Signature

-keep class sun.misc.Unsafe { *; }

-keep class com.taobao.** {*;}

-keep class com.alibaba.** {*;}

-keep class com.alipay.** {*;}

-dontwarn com.taobao.**

-dontwarn com.alibaba.**

-dontwarn com.alipay.**

-keep class com.ut.** {*;}

-dontwarn com.ut.**

-keep class com.ta.** {*;}

-dontwarn com.ta.**

FAQ

关于此文档暂时还没有FAQ
返回
顶部