Android第三方登录——微博

该文章详细介绍了如何在Android应用中集成微博登录授权,包括在微博开放平台注册应用、设置回调URL、导入WeiboSDK的jar和so文件、配置AndroidManifest.xml以及编写登录类代码实现授权逻辑。重点提到了so文件的对应和OAuth2.0授权机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、在官网注册开发账号:http://open.weibo.com

二、创建应用,授权回调必须写上,取消授权回调页可以不用填。

 

三、导入jar包和so文件(so文件跟jar要对应上,否则会出现问题;最好是在官网上面下载好再导入 )

 四、添加权限、配置manifest文件

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:supportsRtl="true"
    android:theme="@style/Theme.FirstWBDemo">
    <activity android:name=".LoginActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity android:name=".MainActivity"
        android:theme="@style/Theme.AppCompat.Light.NoActionBar"/>
    <activity android:name="com.sina.weibo.sdk.component.WeiboSdkBrowser"
        android:configChanges="keyboardHidden|orientation"
        android:exported="false"
        android:windowSoftInputMode="adjustResize"/>
</application>

 五、登录类代码

public class LoginActivity extends AppCompatActivity implements View.OnClickListener {
    private Button author;
    private Button login;
    private TextView tv;
    private static final String APP_KEY = "2692524105";
    private static final String REDIRECT_URL = "http://www.sina.com";
    /**
     * scope是ouath2.0授权机制中authorize接口的一个参数
     * 通过scope,平台将开放更多的微博核心功能给开发者
     */
    private static final String SCOPE = "email,direct_messages_read,direct_messages_write," +
                                     "friendships_groups_read,friendships_groups_write,statuses_to_me_read" +
                                     "follow_app_official_microblog" + "invitation_write";
    private SsoHandler mSSoHandler;
    private Oauth2AccessToken mAccessToken;
    private String nickname="";

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);
        initWeiBoSDK();
        initView();
        initData();
    }

    //初始化SDK
    private void initWeiBoSDK(){
        AuthInfo mAuthInfo = new AuthInfo(LoginActivity.this,APP_KEY,REDIRECT_URL,SCOPE);
        mSSoHandler = new SsoHandler(LoginActivity.this,mAuthInfo);//创建微博实例,认证授权
    }

    private void initView() {
        author = (Button)findViewById(R.id.bt_author);
        author.setOnClickListener(this);
        login = (Button)findViewById(R.id.bt_login);
        login.setOnClickListener(this);
        tv = (TextView)findViewById(R.id.tv_text);
        tv.setMovementMethod(new ScrollingMovementMethod());
    }

    private void initData() {
         mAccessToken = AccessTokenKeeper.readAccessToken(this);
        if (mAccessToken.isSessionValid()){
            updateTokenView(true);
        }
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (mSSoHandler != null){
            mSSoHandler.authorizeCallBack(requestCode,resultCode,data);
            Log.v("data中的数据为:", String.valueOf(data.getData()));
        }
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.bt_author:
                mSSoHandler.authorize(new AuthListener());
                break;
            case R.id.bt_login:
                mSSoHandler.authorizeWeb(new AuthListener());
                break;
        }
    }

        class AuthListener implements WeiboAuthListener {
            @Override
            public void onCancel() {
                // TODO Auto-generated method stub
                Toast.makeText(LoginActivity.this, "取消授权", Toast.LENGTH_LONG).show();
            }

            @Override
            public void onComplete(Bundle values) {
                // TODO Auto-generated method stub
                // 从 Bundle 中解析 Token
                mAccessToken = Oauth2AccessToken.parseAccessToken(values);
                if (mAccessToken.isSessionValid()) {
                    nickname = "用户名:" + String.valueOf(values.get("com.sina.weibo.intent.extra.NICK_NAME"));
                    // 保存 Token 到 SharedPreferences
                    AccessTokenKeeper.writeAccessToken(LoginActivity.this, mAccessToken);
                    // 显示 Token
                    updateTokenView(false);
                    Toast.makeText(LoginActivity.this, "授权成功", Toast.LENGTH_SHORT).show();
                } else {
                    // 以下几种情况,您会收到 Code:
                    // 1. 当您未在平台上注册的应用程序的包名与签名时;
                    // 2. 当您注册的应用程序包名与签名不正确时;
                    // 3. 当您在平台上注册的包名和签名与您当前测试的应用的包名和签名不匹配时。
                    String code = values.getString("code");
                    String message = "授权失败";
                    if (!TextUtils.isEmpty(code)) {
                        message = message + "\nObtained the code: " + code;
                    }
                    Toast.makeText(LoginActivity.this, message, Toast.LENGTH_LONG).show();
                }
            }

            @Override
            public void onWeiboException(WeiboException e) {
                // TODO Auto-generated method stub
                Toast.makeText(LoginActivity.this, "Auth exception : " + e.getMessage(), Toast.LENGTH_LONG).show();
            }
        }

        /**
         * 显示当前 Token 信息。
         * @param hasExisted
         * 配置文件中是否已存在 token 信息并且合法
         */
        @SuppressLint("StringFormatInvalid")
        private void updateTokenView(boolean hasExisted) {
            String date = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss").format(new java.util.Date(mAccessToken.getExpiresTime()));
            String format = getString(R.string.weibosdk_demo_token_to_string_format_1);
            tv.setText(String.format(format, mAccessToken.getToken(), date));
//            String message = String.format(format, mAccessToken.getToken(), date);
            String message = format + mAccessToken.getToken() + "日期" + date;
            if (hasExisted) {
                message = getString(R.string.weibosdk_demo_token_has_existed) + "\n" + message;
            }
            message += "\n" + nickname;
            tv.setText(message);
        }
    }

 最后、再app目录底下的build.gradle加上

注:微博授权登录需要注意的点在so文件的导入,其他与QQ第三方登录类似 也有不同。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值