Android授权登录新浪微博获取用户个人信息汇总.docx

上传人:b****6 文档编号:4957634 上传时间:2022-12-12 格式:DOCX 页数:15 大小:326.89KB
下载 相关 举报
Android授权登录新浪微博获取用户个人信息汇总.docx_第1页
第1页 / 共15页
Android授权登录新浪微博获取用户个人信息汇总.docx_第2页
第2页 / 共15页
Android授权登录新浪微博获取用户个人信息汇总.docx_第3页
第3页 / 共15页
Android授权登录新浪微博获取用户个人信息汇总.docx_第4页
第4页 / 共15页
Android授权登录新浪微博获取用户个人信息汇总.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

Android授权登录新浪微博获取用户个人信息汇总.docx

《Android授权登录新浪微博获取用户个人信息汇总.docx》由会员分享,可在线阅读,更多相关《Android授权登录新浪微博获取用户个人信息汇总.docx(15页珍藏版)》请在冰豆网上搜索。

Android授权登录新浪微博获取用户个人信息汇总.docx

Android授权登录新浪微博获取用户个人信息汇总

Android授权登录新浪微博获取用户个人信息

一、准备工作

我们都知道,无论是分享到新浪微博,还是获取新浪微博的用户信息,都离不开一样东西,那就是新浪微博的APPID,APPID通过绑定我们应用程序的包名和签名进行识别,可以说它是我们跟新浪微博官方所提供接口进行交互的一个重要令牌,这一点跟QQ、微信接口等访问原理基本是一样的。

那么问题来了,APPID到底怎么得到?

答案就是你要到新浪微博开放平台

点击创建应用后会出现如下图所示页面,在这个页面中你必须要填写你的Android包名和Android签名,包名就是你应用程序AndroidManifest.xml文件中的package中的字符串,比如你新建了一个名称为“test”的项目,那么你的包名应该是com.example.test了。

至于Android签名,你可以在该开放平台下载签名工具apk装到手机,然后打开该apk填写程序包名获取签名,也可以直接在开发工具eclispe中点击Window->Preferences->Android->Build查看,如下图所示,至于其它必要的填写信息,你自己去完善就可以了

将所有信息填写完善后我们点击提交审核,注意,只有审核通过的应用才能调用他们提供的API。

二、工程准备

新建一个工程,包名要跟你上面填写的包名一致。

新建完成后下载新浪微博SDK,下载完成后解压,将libs目录下的文件全部拷贝到你的工程libs目录下,将weiboSDKCore_3.1.2.jar包也拷贝到libs目录下,找到AccessTokenKeeper.Java、UsersAPI.java、AbsOpenAPI.java文件并拷贝到你的包中,我把我的工程目录图贴出来,后面我会把整个示例源码放上来。

注意上面common中的SinaUserInfo.java是我自己建的,只是用来方便存和取用户信息而已。

还有,别忘了在AndroidManifest.xml中添加权限:

name="android.permission.INTERNET"/>

三、动手写代码

几经波折,下面直接进入正题,贴代码

1、SinaUserInfo.java(前面说过,这个类非常简单,只是方便存取用户信息而已)

[java]viewplaincopy在CODE上查看代码片派生到我的代码片

publicclassSinaUserInfo{

privateStringuid;//用户ID

privateStringname;//用户昵称

privateStringavatarHd;//用户头像url

publicSinaUserInfo(){

super();

//TODOAuto-generatedconstructorstub

}

publicStringgetUid(){

returnuid;

}

publicvoidsetUid(Stringuid){

this.uid=uid;

}

publicStringgetName(){

returnname;

}

publicvoidsetName(Stringname){

this.name=name;

}

publicStringgetAvatarHd(){

returnavatarHd;

}

publicvoidsetAvatarHd(StringavatarHd){

this.avatarHd=avatarHd;

}

}

2.MainActivity.java(这个是核心,先分步讲解,后面直接贴出完整代码)

在这个java文件中,授权登录并获取信息的具体流程是这样子的,首先通过我们之前审核通过的APPID来实例化IWeiboShareAPI:

[java]viewplaincopy在CODE上查看代码片派生到我的代码片

weiboShareAPI=WeiboShareSDK.createWeiboAPI(context,SWB_APP_ID);

然后获取OAuth协议信息,并设置授权回调接口:

[java]viewplaincopy在CODE上查看代码片派生到我的代码片

authInfo=newAuthInfo(context,SWB_APP_ID,SWB_REDIRECT_URL,SWB_SCOPE);

ssoHandler=newSsoHandler(MainActivity.this,authInfo);

ssoHandler.authorize(newAuthListener());

在授权回调接口当中,我们通过利用onComplete方法中的参数values来解析访问令牌accessToken,并通过AccessTokenKeeper这个类将accessToken保存,这样我们就完成了授权,紧接着我们开了一个线程,实例化UsersAPI并调用show()方法,这个方法有两个参数,由于我们是通过accessToken.getUid()也就是用户ID来获取用户信息的,所以这里的参数类型是long而不是String,如果你不转成long的话,他实际上是通过用户名来访问用户信息的,那么就会出现“com.weibo.sdk.android.WeiboException:

{"error":

"Userdoesnotexists!

","error_code":

20003,"request":

"/2/users/show.json"}”,也就是用户不存在的现象。

[java]viewplaincopy在CODE上查看代码片派生到我的代码片

@Override

publicvoidonComplete(Bundlevalues){

//TODOAuto-generatedmethodstub

accessToken=Oauth2AccessToken.parseAccessToken(values);//从Bundle中解析Token

StringphoneNum=accessToken.getPhoneNum();//从这里获取用户输入的电话号码信息

if(accessToken.isSessionValid()){

AccessTokenKeeper.writeAccessToken(MainActivity.this,accessToken);//保存Token

Toast.makeText(context,"授权成功",Toast.LENGTH_SHORT)

.show();

newThread(newRunnable(){

@Override

publicvoidrun(){

//TODOAuto-generatedmethodstub

UsersAPIusersAPI=newUsersAPI(context,SWB_APP_ID,accessToken);

usersAPI.show(Long.valueOf(accessToken.getUid()),newSinaRequestListener());

}

}).start();

}else{

//以下几种情况,您会收到Code:

//1.当您未在平台上注册的应用程序的包名与签名时;

//2.当您注册的应用程序包名与签名不正确时;

//3.当您在平台上注册的包名和签名与您当前测试的应用的包名和签名不匹配时。

Stringcode=values.getString("code");

Stringmessage="授权失败";

if(!

TextUtils.isEmpty(code)){

message=message+"\nObtainedthecode:

"+code;}Toast.makeText(context,message,Toast.LENGTH_LONG).show();

}

}

上面show方法中的第二个参数是新浪微博请求监听回调接口,我们可以在这个接口的onComplete方法中的参数respon中得到返回的json数据,

通过解析json数据就可以得到我们想要的新浪微博用户信息啦,到此整个流程也就结束了,以下是请求接口的部分代码。

[java]viewplaincopy在CODE上查看代码片派生到我的代码片

publicclassSinaRequestListenerimplementsRequestListener{//新浪微博请求接口

@Override

publicvoidonComplete(Stringresponse){

//TODOAuto-generatedmethodstub

try{

JSONObjectjsonObject=newJSONObject(response);

StringidStr=jsonObject.getString("idstr");//唯一标识符(uid)

Stringname=jsonObject.getString("name");//姓名

StringavatarHd=jsonObject.getString("avatar_hd");//头像

要想授权回调有效,别忘了在Activity中添加如下代码:

[java]viewplaincopy在CODE上查看代码片派生到我的代码片

@Override

protectedvoidonActivityResult(intrequestCode,intresultCode,Intentdata){

//TODOAuto-generatedmethodstub

super.onActivityResult(requestCode,resultCode,data);

if(ssoHandler!

=null){

ssoHandler.authorizeCallBack(requestCode,resultCode,data);

}

}

好了,下面直接贴出完整的代码:

[java]viewplaincopy在CODE上查看代码片派生到我的代码片

importorg.json.JSONException;

importorg.json.JSONObject;

importandroid.app.Activity;

importandroid.content.Context;

importandroid.content.Intent;

importandroid.os.Bundle;

importandroid.os.Handler;

importandroid.os.Message;

importandroid.text.TextUtils;

importandroid.util.Log;

importandroid.view.View;

importandroid.view.View.OnClickListener;

importandroid.widget.Button;

importandroid.widget.TextView;

importandroid.widget.Toast;

importmon.SinaUserInfo;

importcom.sina.weibo.sdk.api.share.IWeiboShareAPI;

importcom.sina.weibo.sdk.api.share.WeiboShareSDK;

importcom.sina.weibo.sdk.auth.AuthInfo;

importcom.sina.weibo.sdk.auth.Oauth2AccessToken;

importcom.sina.weibo.sdk.auth.WeiboAuthListener;

importcom.sina.weibo.sdk.auth.sso.SsoHandler;

importcom.sina.weibo.sdk.exception.WeiboException;

import.RequestListener;

publicclassMainActivityextendsActivityimplementsOnClickListener{

privateContextcontext;

privateIWeiboShareAPIweiboShareAPI;

privatefinalstaticStringSWB_APP_ID="3802299039";

privateButtonlogin;

privateAuthInfoauthInfo;

privateSsoHandlerssoHandler;

privateOauth2AccessTokenaccessToken;

privateTextViewuserinfo_tv;

privateSinaUserInfouserInfo;

publicstaticfinalStringSWB_REDIRECT_URL="

publicstaticfinalStringSWB_SCOPE="email,direct_messages_read,direct_messages_write,"

+"friendships_groups_read,friendships_groups_write,statuses_to_me_read,"

+"follow_app_official_microblog,"+"invitation_write";

@Override

protectedvoidonCreate(BundlesavedInstanceState){

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

context=this;

weiboShareAPI=WeiboShareSDK.createWeiboAPI(context,SWB_APP_ID);

userinfo_tv=(TextView)findViewById(R.id.userinfo_tv);

login=(Button)findViewById(R.id.login);

login.setOnClickListener(this);

}

@Override

publicvoidonClick(Viewv){

//TODOAuto-generatedmethodstub

authInfo=newAuthInfo(context,SWB_APP_ID,SWB_REDIRECT_URL,SWB_SCOPE);

ssoHandler=newSsoHandler(MainActivity.this,authInfo);

ssoHandler.authorize(newAuthListener());

}

publicclassAuthListenerimplementsWeiboAuthListener{

@Override

publicvoidonCancel(){

//TODOAuto-generatedmethodstub

Toast.makeText(context,"授权取消",Toast.LENGTH_LONG).show();

}

@Override

publicvoidonComplete(Bundlevalues){

//TODOAuto-generatedmethodstub

accessToken=Oauth2AccessToken.parseAccessToken(values);//从Bundle中解析Token

StringphoneNum=accessToken.getPhoneNum();//从这里获取用户输入的电话号码信息

if(accessToken.isSessionValid()){

AccessTokenKeeper.writeAccessToken(MainActivity.this,accessToken);//保存Token

Toast.makeText(context,"授权成功",Toast.LENGTH_SHORT)

.show();

newThread(newRunnable(){

@Override

publicvoidrun(){

//TODOAuto-generatedmethodstub

UsersAPIusersAPI=newUsersAPI(context,SWB_APP_ID,accessToken);

usersAPI.show(Long.valueOf(accessToken.getUid()),newSinaRequestListener());

}

}).start();

}

}else{

//以下几种情况,您会收到

//1.当您未在平台上注册的应用程序的包名与签名时;

//2.当您注册的应用程序包名与签名不正确时;

//3.当您在平台上注册的包名和签名与您当前测试的应用的包名和签名不匹配时。

Stringcode=values.getString("code");

Stringmessage="授权失败";

if(!

TextUtils.isEmpty(code)){

message=message+"\nObtainedthecode:

"+code;

}

Toast.makeText(context,message,Toast.LENGTH_LONG).show();

}

@OverridepublicvoidonWeiboException(WeiboExceptione)

{//TODOAuto-generatedmethodstub

Toast.makeText(context,"Authexception:

"+e.getMessage(),Toast.LENGTH_LONG).show();

}

}

publicHandlerhandler=newHandler(){

publicvoidhandleMessage(Messagemsg){

if(msg.what==1){

userinfo_tv.setText("用户id:

"+userInfo.getUid()+"\n"+"用户名:

"+userInfo.getName()+"\n"+"用户头像url:

"+userInfo.getAvatarHd());

}

};

};

publicclassSinaRequestListenerimplementsRequestListener{//新浪微博请求接口

@Override

publicvoidonComplete(Stringresponse){//TODOAuto-generatedmethodstub

try{

JSONObjectjsonObject=newJSONObject(response);

StringidStr=jsonObject.getString("idstr");//唯一标识符(uid)

Stringname=jsonObject.getString("name");//姓名

StringavatarHd=jsonObject.getString("avatar_hd");//头像

userInfo=newSinaUserInfo();

userInfo.setUid(idStr);

userInfo.setName(name);

userInfo.setAvatarHd(avatarHd);

Messagemessage=Message.obtain();

message.what=1;handler.sendMessage(message);

}catch(JSONExceptione){//TODOAuto-generatedcatchblock

e.printStackTrace();

}

}

@Override

publicvoidonWeiboException(WeiboExceptione)

{//TODOAuto-generatedmethodstubToast.makeText(context,"Authexception:

"+e.getMessage(),Toast.LENGTH_LONG)how();

Log.i("mylog","Authexception:

"+e.getMessage());

}

}

@Override

protectedvoidonActivityResult(intrequestCode,intresultCode,Intentdata){//TODOAuto-generatedhodstub

super.onActivityResult(requestCode,resultCode,data);

if(ssoHandler!

=null){

ssoHandl

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 军事

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1