1.开放平台
新浪开放平台
百度开放平台
QQ开放平台
2.步骤
2.1新浪
1、注册成为新浪微博开发者,创建应用,输入基本信息。
2、在新浪第三登录接口下,需要输入packagename和apk签名,调试程序时,apk签名为debug签名,而发布之后,则会生成新的签名指纹(ubuntu获取签名指纹命令:keytool -list -v -keystore 签名路径 -storepass 密码),其中获取md5签名后,去除冒号并将大写字母变为小写即可。
3、创建的应用RedirectUrl这个字段的值就是我们后台项目中的应用信息——>高级信息——>OAuth2.0 授权设置中的授权回调页这个字段,需要我们填写一个有效的地址,一般为:https://api.weibo.com/oauth2/default.html
4.使用
4.1在项目的gradle文件下加入maven { url " https://dl.bintray.com/thelasterstar/maven/" }
并且在app gradle下加入//微博sdk
compile 'com.sina.weibo.sdk:core:2.0.3:openDefaultRelease@aar'
compile files('libs/android-support-v4.jar')
在application入口初始化如下代码
WbSdk.install(this,new AuthInfo(this, Constants.APP_KEY, Constants.REDIRECT_URL,Constants.SCOPE));
第三方应用应该使用自己的 APP_KEY 替换该 APP_KEY
建议使用默认回调页 String REDIRECT_URL = "https://api.weibo.com/oauth2/default.html";
//sina
mSsoHandler = new SsoHandler(this);
mSsoHandler.authorize(new 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);
SPUtils.setSharedBooleanData(LoginActivity.this,"isLogin",true);
SPUtils.setSharedlongData(LoginActivity.this,"deadline", System.currentTimeMillis()+7*24*60*60*1000);
Toast.makeText(LoginActivity.this,
R.string.weibosdk_demo_toast_auth_success, Toast.LENGTH_SHORT).show();
Intent intent = new Intent(LoginActivity.this,MainActivity.class);
intent.putExtra("sina",true);
intent.putExtra("loginWay",1);
LoginActivity.this.startActivity(intent);
LoginActivity.this.finish();
}
}
});
}
@Override
public void cancel() {
Toast.makeText(LoginActivity.this,
R.string.weibosdk_demo_toast_auth_canceled, Toast.LENGTH_LONG).show();
}
@Override
public void onFailure(WbConnectErrorMessage errorMessage) {
Toast.makeText(LoginActivity.this, errorMessage.getErrorMessage(), Toast.LENGTH_LONG).show();
}
});
3.1百度
1.同理注册为开发者
2.百度第三方登陆相对简单,无需填包名和签名
3.下载baidusdk,倒入到工程中即可
baidu = new Baidu(clientId, LoginActivity.this);//client是分配给应用的id
baidu.authorize(LoginActivity.this, isForceLogin,isConfirmLogin,new BaiduDialog.BaiduDialogListener() {
@Override
public void onComplete(Bundle values) {
new Thread(){
@Override
public void run() {
String json = "你好";
try {
json = baidu.request("https://openapi.baidu.com/rest/2.0/passport/users/getInfo", null, "GET");
} catch (IOException e) {
e.printStackTrace();
} catch (BaiduException e) {
e.printStackTrace();
}
final String finalJson = json;
runOnUiThread(new Runnable() {
@Override
public void run() {
Util.logd("线程", Thread.currentThread()+"");
if (finalJson != null) {
SPUtils.setSharedBooleanData(LoginActivity.this,"isLogin",true);
SPUtils.setSharedlongData(LoginActivity.this,"deadline", System.currentTimeMillis()+7*24*60*60*1000);
Gson gson = new Gson();
BaiduLoginBean baiduLoginBean = gson.fromJson(finalJson, BaiduLoginBean.class);
Intent intent = new Intent(LoginActivity.this,MainActivity.class);
intent.putExtra("baidu", (Serializable) baiduLoginBean);
intent.putExtra("loginWay",2);
LoginActivity.this.startActivity(intent);
LoginActivity.this.finish();
}
}
});
}
}.start();
}
@Override
public void onBaiduException(BaiduException e) {
}
@Override
public void onError(BaiduDialogError e) {
}
@Override
public void onCancel() {
}
});
4.1QQ
1.注册成为开发者并创建应用
2.获取id,下载qq sdk jar包即可
compile files('libs/open_sdk_r5886_lite.jar')
//qq
// Tencent类是SDK的主要实现类,开发者可通过Tencent类访问腾讯开放的OpenAPI。
// 其中APP_ID是分配给第三方应用的appid,类型为String。
mTencent = Tencent.createInstance("1106499896", this.getApplicationContext());
listener = new IUiListener(){
@Override
public void onComplete(Object o) {
//"回调结果"
SPUtils.setSharedBooleanData(LoginActivity.this,"isLogin",true);
SPUtils.setSharedlongData(LoginActivity.this,"deadline", System.currentTimeMillis()+7*24*60*60*1000);
Gson gson = new Gson();
QQLoginBean qqLoginBean = gson.fromJson(o.toString(), QQLoginBean.class);
Intent intent = new Intent(LoginActivity.this,MainActivity.class);
intent.putExtra("qq", (Serializable) qqLoginBean);
intent.putExtra("loginWay",3);
LoginActivity.this.startActivity(intent);
LoginActivity.this.finish();
}
@Override
public void onError(UiError e) {
Util.logd("onError:", "code:" + e.errorCode + ", msg:"
+ e.errorMessage + ", detail:" + e.errorDetail);
}
@Override
public void onCancel() {
Util.logd("cancel","");
}
};
if (!mTencent.isSessionValid())
{
mTencent.login(this, "all", listener);
}
源码地址