第三方登錄除了在qq平臺(tái)申請(qǐng),也可以用mob 的shareSDK來登錄,不過前提是之前先嵌入好了shareSDK分享功能的,前面的分享這里就不多說了,主要是做登錄,分享的具體做法,可以看mob官網(wǎng)的方法,提供一個(gè)鏈接
mob的分享快速集成指南
這里保證你的demo能夠完成分享功能,如下圖所示

之后是一些配置問題,在ShareSDK.xml里面配置自己的appid

記得在登錄前必須先初始化
ShareSDK.initSDK(this);
之后就是mainActivity的代碼了:
這里包含了兩個(gè)頁面,也寫了分享功能在里面
package com.example.yukun.webapplication;
import android.content.Intent;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;
import com.mob.tools.utils.UIHandler;
import java.util.HashMap;
import cn.sharesdk.framework.Platform;
import cn.sharesdk.framework.PlatformActionListener;
import cn.sharesdk.framework.ShareSDK;
import cn.sharesdk.onekeyshare.OnekeyShare;
import cn.sharesdk.tencent.qq.QQ;
import cn.sharesdk.tencent.weibo.TencentWeibo;
public class ShareActivity extends AppCompatActivity implements PlatformActionListener, Handler.Callback {
private static final int MSG_USERID_FOUND = 1;//用戶已經(jīng)存在
private static final int MSG_LOGIN = 2;//登錄中
private static final int MSG_AUTH_CANCEL = 3;//取消授權(quán)
private static final int MSG_AUTH_ERROR = 4;//授權(quán)出錯(cuò)
private static final int MSG_AUTH_COMPLETE = 5;//授權(quán)成功
private HashMap<String, Object> mapQQ = new HashMap<String, Object>();//授權(quán)信息
private HashMap<String, Object> mapSina = new HashMap<String, Object>();//授權(quán)信息
private SquareProgressBar squareProgressBar;
private TextView textView;
private com.example.yukun.webapplication.squareprogressbar.SquareProgressBar progressBar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_share);
ShareSDK.initSDK(this);
init();
}
//第一個(gè)按鈕,表示分享
public void Btn1(View view) {
showShare();
}
//第二個(gè)按鈕表示qq登錄
public void Btn2(View view) {
authorize(new QQ(this));
}
//第三個(gè)按鈕表示微博登錄
public void Btn3(View view) {
authorize(new TencentWeibo(this));
}
private void showShare() {
OnekeyShare oks = new OnekeyShare();
//關(guān)閉sso授權(quán)
oks.disableSSOWhenAuthorize();
// 分享時(shí)Notification的圖標(biāo)和文字 2.5.9以后的版本不調(diào)用此方法
//oks.setNotification(R.drawable.ic_launcher, getString(R.string.app_name));
// title標(biāo)題,印象筆記、郵箱、信息、微信、人人網(wǎng)和QQ空間使用
oks.setTitle("title");
// titleUrl是標(biāo)題的網(wǎng)絡(luò)鏈接,僅在人人網(wǎng)和QQ空間使用
oks.setTitleUrl("http://sharesdk.cn");
// text是分享文本,所有平臺(tái)都需要這個(gè)字段
oks.setText("我是分享文本");
//分享網(wǎng)絡(luò)圖片,新浪微博分享網(wǎng)絡(luò)圖片需要通過審核后申請(qǐng)高級(jí)寫入接口,否則請(qǐng)注釋掉測試新浪微博
oks.setImageUrl("http://f1.sharesdk.cn/imgs/2014/02/26/owWpLZo_638x960.jpg");
// imagePath是圖片的本地路徑,Linked-In以外的平臺(tái)都支持此參數(shù)
//oks.setImagePath("/sdcard/test.jpg");//確保SDcard下面存在此張圖片
// url僅在微信(包括好友和朋友圈)中使用
oks.setUrl("http://sharesdk.cn");
// comment是我對(duì)這條分享的評(píng)論,僅在人人網(wǎng)和QQ空間使用
oks.setComment("我是測試評(píng)論文本");
// site是分享此內(nèi)容的網(wǎng)站名稱,僅在QQ空間使用
oks.setSite(getString(R.string.app_name));
// siteUrl是分享此內(nèi)容的網(wǎng)站地址,僅在QQ空間使用
oks.setSiteUrl("http://sharesdk.cn");
// 啟動(dòng)分享GUI
oks.show(this);
}
private void authorize(Platform plat) {
if (plat.isValid()) {
String userId = plat.getDb().getUserId();
Log.i("----id",userId);
if (!TextUtils.isEmpty(userId)) {
UIHandler.sendEmptyMessage(MSG_USERID_FOUND, this);
if (plat.getName().equals("QQ")) {
login(plat.getName(), userId, mapQQ);
}
else if (plat.getName().equals("TencentWeibo")) {
login(plat.getName(), userId, mapSina);
}
return;
}
}
//若本地沒有授權(quán)過就請(qǐng)求用戶數(shù)據(jù)
plat.setPlatformActionListener(this);//
plat.SSOSetting(false);//此處設(shè)置為false,則在優(yōu)先采用客戶端授權(quán)的方法,設(shè)置true會(huì)采用網(wǎng)頁方式
plat.showUser(null);//獲得用戶數(shù)據(jù)
}
private void login(String plat, String userId, HashMap<String, Object> userInfo) {
Message msg = new Message();
msg.what = MSG_LOGIN;
msg.obj = plat;
UIHandler.sendMessage(msg, this);
//跳轉(zhuǎn)到第二個(gè)頁面,獲取到的數(shù)據(jù)就在這里
Intent intent = new Intent(ShareActivity.this, SecondActivity.class);
intent.putExtra("userinfo", "userinfo:" + userInfo.toString());
startActivity(intent);
}
//一定要停止
@Override
protected void onDestroy() {
ShareSDK.stopSDK(this);
super.onDestroy();
}
public void onComplete(Platform platform, int action,
HashMap<String, Object> res) {
if (action == Platform.ACTION_USER_INFOR) {
Log.e("ShareActivity", platform.getName());
if (platform.getName().equals("QQ")) {
mapQQ.clear();
mapQQ.putAll(res);
}
else if (platform.getName().equals("TencentWeibo")) {
mapSina.clear();
mapSina.putAll(res);
}
// else if (platform.getName().equals("Facebook")) {
// mapFB.clear();
// mapFB = res;
// }
// else if (platform.getName().equals("GooglePlus")) {
// mapGG.clear();
// mapGG = res;
// }
UIHandler.sendEmptyMessage(MSG_AUTH_COMPLETE, this);
login(platform.getName(), platform.getDb().getUserId(), res);
}
System.out.println(res);
}
public void onError(Platform platform, int action, Throwable t) {
if (action == Platform.ACTION_USER_INFOR) {
UIHandler.sendEmptyMessage(MSG_AUTH_ERROR, this);
}
t.printStackTrace();
}
public void onCancel(Platform platform, int action) {
if (action == Platform.ACTION_USER_INFOR) {
UIHandler.sendEmptyMessage(MSG_AUTH_CANCEL, this);
}
}
@Override
public boolean handleMessage(Message message) {
switch (message.what) {
case MSG_USERID_FOUND: {
Toast.makeText(this, R.string.userid_found, Toast.LENGTH_SHORT).show();
}
break;
case MSG_LOGIN: {
String text = getString(R.string.logining, message.obj);
Toast.makeText(this, text, Toast.LENGTH_SHORT).show();
}
break;
case MSG_AUTH_CANCEL: {
Toast.makeText(this, R.string.auth_cancel, Toast.LENGTH_SHORT).show();
}
break;
case MSG_AUTH_ERROR: {
Toast.makeText(this, R.string.auth_error, Toast.LENGTH_SHORT).show();
}
break;
case MSG_AUTH_COMPLETE: {
Toast.makeText(this, R.string.auth_complete, Toast.LENGTH_SHORT).show();
}
break;
}
return false;
}
}
還有一些string的字符,記得拷貝到string資源里
<string name="app_version">2.0.0</string>
<string name="proj_name">ShareSDK_TPL</string>
<string name="share_sdk">Share SDK</string>
<string name="login_with_sina_weibo">用新浪微博登錄</string>
<string name="login_with_qzone">用QQ空間登錄</string>
<string name="login_with_other_plat">其他帳號(hào)登錄</string>
<string name="userid_found">用戶信息已存在,正在跳轉(zhuǎn)登錄操作…</string>
<string name="logining">使用%s帳號(hào)登錄中…</string>
<string name="auth_cancel">授權(quán)操作已取消</string>
<string name="auth_error">授權(quán)操作遇到錯(cuò)誤,請(qǐng)閱讀Logcat輸出</string>
<string name="auth_complete">授權(quán)成功,正在跳轉(zhuǎn)登錄操作…</string>
<string name="if_register_needed">如果您需要注冊(cè)功能…</string>
<string name="after_auth">一般來說第三方登錄時(shí),第三方平臺(tái)已經(jīng)為您完成用戶身份校驗(yàn),您可以放心讓用戶登錄。\n\n但如果您需要判斷用戶是否為新用戶,可以在授權(quán)操作完成后,將用戶的信息通過字段“HashMap userInfo”攜帶給login方法??蛻舳送ㄟ^“String userId”執(zhí)行登錄請(qǐng)求,如果服務(wù)端判定此userId為未注冊(cè)用戶,可以將userInfo發(fā)送給注冊(cè)接口,獲取用戶在此平臺(tái)上的昵稱、頭像等數(shù)據(jù),然后執(zhí)行注冊(cè)</string>
<string name="ok">確定</string>
還有第二個(gè)activity,用來顯示獲取到的個(gè)人數(shù)據(jù)的 ,只有一個(gè)textview
package com.example.yukun.webapplication;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;
public class SecondActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
TextView tv = (TextView) this.findViewById(R.id.tv);
String text = getIntent().getStringExtra("userinfo");
tv.setText(text);
}
}
效果圖如下所示:
其中獲取到的userInfo是map集合,具體的解析過程,可以在網(wǎng)上查查,解析出Map里面的個(gè)人信息
qq的個(gè)人信息

微博的個(gè)人信息

對(duì)于其他的,可以照葫蘆畫瓢,一樣可以完成。(部分代碼參考與網(wǎng)路)