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/" }
和云账号有关的SDK有三个,分别是:云账号、云账号基础、三方登录和分享。他们的使用场景如下
云账号基础:云账号登录态维护。如果不希望集成带界面的云账号SDK,而只希望集成生易(Open Trade)、云旺(Open IM)等SDK,可以单独下载此SDK。
云账号:提供登录、注册界面等。云账号依赖云账号基础。
三方登录和分享:如果希望云账号SDK的登录页上具有使用第三方账号登录的功能,需要勾选此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'
//三方 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。
在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(); } });
带界面服务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); }
示例:
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); } });
用于没有注册和找密,直接通过手机号+短信验证码登录
示例:
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); } });
示例:
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); } });
/** * 唤起登录二维码展示页 * * @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); } });
// 区分当前成功登录的场景 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获得
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); }
登出
示例:
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(); } });
使用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的账号支持免登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.**