Android新浪微博登录

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",
                                 "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); 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); //获取微博的用户信息 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(); }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); } }}

注:应用未上线要测试Sina登录数据,必须是Web端填写的签名打包的app,才能进行测试。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值