一、在官网注册开发账号: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第三方登录类似 也有不同。