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.**