Android新浪微博登录
一、注册新浪微博开放平台账号
1. 在新浪微博开放平台注册账号获取开发者资格:http://open.weibo.com/
2. 注册完成后登录开放平台,创建应用
3. 创建应用之后在基本信息栏下载签名工具,获取Android签名,根据提示完善应用信息
4. 下载SDKjar包、so文件:http://open.weibo.com/wiki/SDK
5. 在我的应用 -- 应用信息 -- 高级信息中填写您的应用回调页,这样才能使OAuth2.0授权正常使用。
一般app没有回调地址,可以填写OAuth2.0客户端默认回调页:https://api.weibo.com/oauth2/default.html
注:这里填写的回调页要和APP中填写的回调页一致,否则报21322错误。
6. 对应项目文件(**.jar、**.so、**.java):
http://download.csdn.net/download/binjianliu/9985095
二、实现Sina登录
1. 将weibosdkcore_release.jar包放入主项目libs文件夹下,同步Gradle
2. 在main包下新建jniLibs包,在jniLibs包下新建armeabi-v7a包,将libweibosdkcore.so文件放入该包下,同步Gradle。
3. 在清单文件Androidmanifest.xml中添加Sina登录授权所需权限
<!--Sina登录授权所需权限--> <uses-permission android:name="android.permission.INTERNET"/> |
4. 注册Sina登录SDK中所要使用的Activity
<!-- 新浪微博登录 --> <activity android:name="com.sina.weibo.sdk.component.WeiboSdkBrowser" android:configChanges="keyboardHidden|orientation" android:exported="false" android:windowSoftInputMode="adjustResize"> </activity> |
5. 进行Sina登录
1)初始化Sina登录类
/** 微博用户信息*/ private AuthInfo mAuthInfo; /** 微博ssoHandler*/ private SsoHandler mSsoHandler;
//微博 SDK初始化 mAuthInfo = new AuthInfo(this, "你的APPID", "https://api.weibo.com/oauth2/default.html", "email,direct_messages_read,direct_messages_write," + "friendships_groups_read,friendships_groups_write,statuses_to_me_read," + "follow_app_official_microblog," + "invitation_write"); //微博 Sso初始化 mSsoHandler = new SsoHandler(this, mAuthInfo);
2)获取Sina授权登录基础数据:mSinaToken、mAccessToken、mSinaUID
/** 封装了 "access_token","expires_in","refresh_token",并提供了他们的管理功能*/ private Oauth2AccessToken mAccessToken; /** 微博返回信息token*/ private String mSinaToken; /** 微博的uid*/ private String mSinaUID;
mSsoHandler.authorize(new SinaLoginListener());
private class SinaLoginListener implements WeiboAuthListener{ @Override public void onComplete(Bundle bundle) { //从Bundle中解析Token mAccessToken = Oauth2AccessToken.parseAccessToken(bundle); if(mAccessToken.isSessionValid()){ mSinaToken = String.valueOf(bundle.get("access_token")); mSinaUID = String.valueOf(bundle.get("uid")); Log.e("LKing","sinatoken = "+mSinaToken); Log.e("LKing","sinaid = "+mSinaUID); }else{ // 以下几种情况,您会收到 Code: // 1. 当您未在平台上注册的应用程序的包名与签名时; // 2. 当您注册的应用程序包名与签名不正确时; // 3. 当您在平台上注册的包名和签名与您当前测试的应用的包名和签名不匹配时。 //授权失败 // Toast.makeText(SinaActivity.this,"授权失败",Toast.LENGTH_SHORT).show(); } } @Override public void onWeiboException(WeiboException e) { Toast.makeText(SinaActivity.this,"授权异常,请联系管理员",Toast.LENGTH_SHORT).show(); } @Override public void onCancel() { Toast.makeText(SinaActivity.this,"取消授权",Toast.LENGTH_SHORT).show(); } }
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); // SSO 授权回调 // 重要:发起 SSO 登陆的 Activity 必须重写 onActivityResults if (mSsoHandler != null) { mSsoHandler.authorizeCallBack(requestCode, resultCode, data); } }
3)获取Sina用户信息 将下载的文件AbsOpenAPI.java和UsersAPI.java文件放到项目中
//获取微博的用户信息 new Thread(new Runnable() { @Override public void run() { UsersAPI userApi = new UsersAPI(SinaActivity.this, "你的APPID", mAccessToken); userApi.show(Long.valueOf(mSinaUID), new RequestListener() { @Override public void onComplete(String s) {//s 就是微博的用户信息 Log.e("LKing","用户信息 = "+s); JSONObject object = null; try { object = new JSONObject(s); String name = object.getString("name");//微博的用户名 Log.e("LKing","用户名 = " + name); } catch (JSONException e) { e.printStackTrace(); } } @Override public void onWeiboException(WeiboException e) { } }); } }).start(); |
6. 完整Sina登录并获取用户信息代码
public class SinaActivity extends Activity{
/** 微博用户信息*/
private AuthInfo mAuthInfo;
/** 微博ssoHandler*/
private SsoHandler mSsoHandler;
/** 封装了 "access_token","expires_in","refresh_token",并提供了他们的管理功能*/
private Oauth2AccessToken mAccessToken;
/** 微博返回信息token*/
private String mSinaToken;
/** 微博的uid*/
private String mSinaUID;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//微博 SDK初始化
mAuthInfo = new AuthInfo(this,
"你的APPID",
|
注:应用未上线要测试Sina登录数据,必须是Web端填写的签名打包的app,才能进行测试。