您的位置:首页 > 移动开发 > Android开发

Android——第三方登录——新浪微博——获取用户信息——账户绑定

2016-06-17 14:02 771 查看
前一篇文章完成了使用新浪微博登陆,但是并没有获取到用户信息,这篇文章介绍一下登陆成功后如何获取用户信息,以及获取用户信息后怎样与你的App交互。

首先介绍一下获取用户信息:



从官方文档中找到获取用户的方法,看来几行代码就可以搞定了,但是 当我只导入 官方给的weiboSDKCore_3.1.4.jar包时,并没有用户管理需要的OpenAPI,刚开始以为是该API是需要高级权限呢,后来发现该API在给的 WeiboSDK 里面找到,之前官方文档上面给过(没有认真看文档。。。)



好了,前期工作搞定,下面是获取用户信息的代码:

mUsersAPI = new UsersAPI(mContext, WEIBO_APP_KEY, mAccessToken);
long uid = Long.parseLong(mAccessToken.getUid());
mUsersAPI.show(uid, new RequestListener() {

@Override
public void onWeiboException(WeiboException arg0) {
// TODO Auto-generated method stub

}

@Override
public void onComplete(String response) {
if (!TextUtils.isEmpty(response)) {
User user = User.parse(response);
Toast.makeText(mContext, user.screen_name, Toast.LENGTH_LONG).show();
}
}
});


下图是从官网上找的User类说明:



好了,现在已完成新浪微博的登陆与获取登陆的用户信息,下面先 写点我对 新浪微博登陆成功后返回的 Oauth2AccessToken 的理解 为什么在获得后要将这些信息保存到本地,// 保存 Token 到 SharedPreferences 中,其中 参数expires_in是登陆有效时间,可通过access_token 获取用户信息,通过这些信息 我联想到之前做用户登陆注册时做的将用户信息保存到本地,除了将用户信息还将用户登陆时间记录,即为了保存用户信息不是一直可以而是只保留一段时间,这些只是个人理解。

好了,怎样利用现有的新浪微博用户信息呢,怎样跟自己的App自己的服务器关联呢?下面来说一下我的理解。用第三方登录分一下两种情况,如下图所示:



下面是用 没有App账号使用第三方账号登录,流程图如下:



代码如下:

mUsersAPI = new UsersAPI(mContext, WEIBO_APP_KEY, mAccessToken);
long uid = Long.parseLong(mAccessToken.getUid());
mUsersAPI.show(uid, new RequestListener() {

@Override
public void onWeiboException(WeiboException arg0) {
// TODO Auto-generated method stub

}

@Override
public void onComplete(String response) {
if (!TextUtils.isEmpty(response)) {
// 璋冪敤 User#parse 灏咼SON涓茶В鏋愭垚User瀵硅薄
User user = User.parse(response);
Toast.makeText(mContext, user.profile_image_url, Toast.LENGTH_LONG).show();

PublicData.bu.setUsername(user.id);
PublicData.bu.setPassword(WeiboLoginScr(user.id));
PublicData.bu.setNick_URL_NET(user.profile_image_url);
PublicData.bu.setSex(user.gender.equals("m") == true ? false : true);

String avatarPath = PublicData.LocFileNick.getPath() + "/" +PublicData.getFileName(PublicData.bu.getNick_URL_NET());
PublicData.bu.setNick_URL_LOCAL(avatarPath);
System.out.println("Login Success get user info : \n"+PublicData.bu.toString());

File fileTmp = new File(PublicData.bu.getNick_URL_LOCAL());
if(!fileTmp.exists()){
BmobFile bmobfile =new BmobFile(PublicData.getFileName(PublicData.bu.getNick_URL_NET()),"",PublicData.bu.getNick_URL_NET());
downLoadAvatar(bmobfile);
}else{
System.out.println("avatar exists!");
}

PublicData.bu.signUp(mContext, new SaveListener() {

@Override
public void onSuccess() {
// TODO Auto-generated method stub
mActivity.finish();
PublicData.loginState = true;
PublicData.bu.setLoginState(true);
PublicData.bu.setTime(System.currentTimeMillis());
UserSharePreference sharePreference = new UserSharePreference(mContext);
sharePreference.saveMessage(PublicData.bu);
gooChat();
}

@Override
public void onFailure(int arg0, String arg1) {
// TODO Auto-generated method stub
Toast.makeText(mContext, arg1, Toast.LENGTH_LONG).show();
if(arg0 == 202){    //账户已存在直接登录
PublicData.bu.login(mContext, new SaveListener() {

@Override
public void onSuccess() {
// TODO Auto-generated method stub
PublicData.loginState = true;
PublicData.bu.setLoginState(true);
PublicData.bu.setTime(System.currentTimeMillis());
UserSharePreference sharePreference = new UserSharePreference(mContext);
sharePreference.saveMessage(PublicData.bu);

gooChat();
}
@Override
public void onFailure(int arg0, String arg1) {
// TODO Auto-generated method stub

}
});
}
}
});
}
}


好了,至此完成在没有自己账号的时候用新浪微博账号登录App。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: