Android新浪微博SDK登录功能接入

集成前准备

1. 申请APP_KEY

第三方需要接入微博SDK必须在微博开放平台上对应用进行注册,并获取APP_KEY,添加
应用的授权回调页面(Redirect URI)

2. 注册应用程序的包名和签名

您需要在微博开放平台上注册应用程序的包名和签名后,才能正确进行授权。
请注意:包名和签名未注册,或者签名注册不正确,都会导致无法授权。
应用程序包名:指AndroidManifest.xml文件中,package标签所代表的内容。
应用程序签名:该签名是通过官方提供的签名工具生成的MD5值。
详情请查看:微博Android平台SDK文档V4.0pdf 中:如何使用签名工具获取您应用的签名?

注:这个pdf链接不知道是我浏览器的原因还是怎么回事,一直是打不开的,但是这个文档在文章末尾提到的官方demo中,是有这个文档的,大家可以将demo下载下来,然后就可以看里面的 Android平台SDK文档V4.0pdf。

3. 集成sdk

1:Android Studio接入 在你工程的主模块下面修改build.gradle文件,添加微博sdk的依赖

allprojects {
    repositories {
        jcenter()
        mavenCentral()
        maven { url "https://dl.bintray.com/thelasterstar/maven/" }
    }
}
compile 'com.sina.weibo.sdk:core:4.1.4:openDefaultRelease@aar'

或者将新文档目录下的openDefault-4.1.4.aar复制到工程libs目录下,修改build.gradle文件如下:

repositories{
    flatDir {
        dirs 'libs'
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:24.2.1'
    compile(name: 'openDefault-4.1.4', ext: 'aar')

}

2:关于so

微博sdk aar中默认直提供了[armeabi] [armeabi-v7a] [x86]三个平台的so,如果你需要适配更多版本的so,请到github->so目录中获取全部平台的so文件

如果你只想引入特别的平台在gradle 中配置如下

splits {
        abi {
            enable true
            reset()
            include 'armeabi-v7a', 'arm64-v8a' //根据需求自己修改
            universalApk true 
        }
    }

3:关于混淆

-keep class com.sina.weibo.sdk.** { *; }

应用接入

1. 替换成自己应用的 APP_KEY 等参数

定义Constants接口,并将Constants类中的各种参数替换成自己应用的参数,请仔细阅读代码注释。

public interface Constants {
    /** 当前 DEMO 应用的 APP_KEY,第三方应用应该使用自己的 APP_KEY 替换该 APP_KEY */
    public static final String APP_KEY = "2045436852";

    /** 
     * 当前 DEMO 应用的回调页,第三方应用可以使用自己的回调页。
     * 建议使用默认回调页:https://api.weibo.com/oauth2/default.html
     */
    public static final String REDIRECT_URL = "http://www.sina.com";

    /**
     * WeiboSDKDemo 应用对应的权限,第三方开发者一般不需要这么多,可直接设置成空即可。
     * 详情请查看 Demo 中对应的注释。
     */
    public 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";
}

2. 初始化WbSdk对象

初始化WbSdk对象,在你的应用的Application或者调用Sdk功能代码前。

建立一个MyApplication.java文件,继承Application。并且在Mainifest.xml修改使用自己定义的Application。

package com.sdlj.vehiclerepair.util;

import android.app.Application;
import android.util.Log;

import com.sdlj.vehiclerepair.webo.Constants;
import com.sina.weibo.sdk.WbSdk;
import com.sina.weibo.sdk.auth.AuthInfo;

/**
 * Created by Chunna.zheng on 2017/9/7.
 */
public class MyApplication extends Application {
    private static final String TAG = "ZCN==VehicleApplication";

    @Override
    public void onCreate() {
        super.onCreate();
        Log.d(TAG,"=====onCreate()=====");
        //初始化WbSdk
        WbSdk.install(this,new AuthInfo(this, Constants.APP_KEY, Constants.REDIRECT_URL, Constants.SCOPE));
    }
}

3.Activity中接入登录

布局文件中只有一个id为btn_login_wb的Button按钮。

LoginActivity.java文件

public class LoginActivity extends AppCompatActivity implements View.OnClickListener{
    public static final String TAG = "ZCN_LoginActivity";
    private Button  btnWB;

    private SsoHandler mSsoHandler;
    /** 封装了 "access_token","expires_in","refresh_token",并提供了他们的管理功能  */
    private Oauth2AccessToken mAccessToken;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);
        btnWB = (Button)findViewById(R.id.btn_login_wb);
        btnWB.setOnClickListener(this);

        mSsoHandler = new SsoHandler(LoginActivity.this);
    }

    @Override
    public void onClick(View view) {
        switch(view.getId()){
            case R.id.btn_login_wb:
                // SSO 授权, 仅客户端
                //mSsoHandler.authorizeClientSso(new SelfWbAuthListener());
                // SSO 授权, 仅Web
                //mSsoHandler.authorizeWeb(new SelfWbAuthListener());
                // SSO 授权, ALL IN ONE   如果手机安装了微博客户端则使用客户端授权,没有则进行网页授权
                mSsoHandler.authorize(new SelfWbAuthListener());
                break;
        }
    }

    /**
     * 当 SSO 授权 Activity 退出时,该函数被调用。
     *
     */
    @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);
        }

    }

    private class SelfWbAuthListener implements com.sina.weibo.sdk.auth.WbAuthListener{
        @Override
        public void onSuccess(final Oauth2AccessToken token) {
            LoginActivity.this.runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    mAccessToken = token;
                    if (mAccessToken.isSessionValid()) {
                        // 显示 Token
                        updateTokenView(false);
                        // 保存 Token 到 SharedPreferences
                        AccessTokenKeeper.writeAccessToken(LoginActivity.this, mAccessToken);
                        Log.d(TAG,"=====onSuccess=====");
                        Toast.makeText(LoginActivity.this,"授权成功", Toast.LENGTH_SHORT).show();
                    }
                }
            });
        }

        @Override
        public void cancel() {
            Log.d(TAG,"=====cancel=====");
            Toast.makeText(LoginActivity.this,"取消授权", Toast.LENGTH_LONG).show();
        }

        @Override
        public void onFailure(WbConnectErrorMessage errorMessage) {
            Log.d(TAG,"=====onFailure=====");
            Toast.makeText(LoginActivity.this, errorMessage.getErrorMessage(), Toast.LENGTH_LONG).show();
        }
    }

    /**
     * 显示当前 Token 信息。
     *
     * @param hasExisted 配置文件中是否已存在 token 信息并且合法
     */
    private void updateTokenView(boolean hasExisted) {
        String date = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss").format(
                new java.util.Date(mAccessToken.getExpiresTime()));
        String format = "Token:%1$s \\n有效期:%2$s";
        Log.d(TAG,String.format(format, mAccessToken.getToken(), date));

        String message = String.format(format, mAccessToken.getToken(), date);
        if (hasExisted) {
            message = "Token 仍在有效期内,无需再次登录。" + "\n" + message;
        }
        Log.d(TAG,message);
    }
}

文章参考:新浪微博开发文档
文章参考:新浪微博github地址中的demo

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值