轉(zhuǎn)載請(qǐng)注明出處:http://www.reibang.com/p/c104fa307c60
前言
第三方登錄幾乎是每個(gè)APP的必須功能宋雏。有些人說(shuō)看官方的文檔實(shí)在讓人眼花繚亂,以前自己第一次做這些功能的時(shí)候也會(huì)遇到很多坑务豺。這里整理了一份比較詳細(xì)的磨总,主要給新手學(xué)習(xí)。有任何問題歡迎提出來(lái)笼沥!
1蚪燕、獲取ShareSDK的AppKey
(照著流程來(lái),很簡(jiǎn)單>赐亍)
http://bbs.mob.com/forum.php?mod=viewthread&tid=8212&extra=page%3D1
2邻薯、下載SDK
下載地址:http://www.mob.com/downloadDetail/ShareSDK/android
下載的時(shí)候一般用默認(rèn)的就足夠了
下載后解壓出來(lái)是這樣的
3、準(zhǔn)備資源
點(diǎn)擊第一個(gè)文件夾乘凸,進(jìn)去如下厕诡,雙擊QuickIntegrater.jar
只需要填寫項(xiàng)目名稱和項(xiàng)目包名即可,其他默認(rèn)营勤。如圖:
點(diǎn)擊確認(rèn)后會(huì)生成如下文件夾灵嫌,如圖:
4、開始集成
1葛作,將上面的文件夾依次粘貼到工程相應(yīng)的文件夾即可寿羞,如圖:
2,在清單文件AndroidManifest.xml添加權(quán)限
<uses-permission android:name="android.permission.GET_TASKS" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.MANAGE_ACCOUNTS"/>
<uses-permission android:name="android.permission.GET_ACCOUNTS"/>
<!-- 藍(lán)牙分享所需的權(quán)限 -->
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
3赂蠢,在清單文件AndroidManifest.xml添加activity信息
(注意:tencent后面的appid要保持和您配置的QQ的appid一致)
<activity
android:name="com.mob.tools.MobUIShell"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:configChanges="keyboardHidden|orientation|screenSize"
android:screenOrientation="portrait"
android:windowSoftInputMode="stateHidden|adjustResize" >
<intent-filter>
<data android:scheme="tencent100371282" />
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.BROWSABLE" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
<!-- 調(diào)用新浪原生SDK绪穆,需要注冊(cè)的回調(diào)activity -->
<intent-filter>
<action android:name="com.sina.weibo.sdk.action.ACTION_SDK_REQ_ACTIVITY" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
<!--集成line客戶端登錄授權(quán),需要添如下格式的過(guò)濾器-->
<intent-filter>
<data android:scheme="line.1477692153" />
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.BROWSABLE" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
如果您集成了微信虱岂,還需要添加下面回調(diào)的activity處理玖院;
<activity
android:name=".wxapi.WXEntryActivity"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:configChanges="keyboardHidden|orientation|screenSize"
android:exported="true"
android:screenOrientation="portrait" />
4,在剛剛拷貝進(jìn)去的ShareSDK中替換mob后臺(tái)申請(qǐng)的Appkey與各個(gè)平臺(tái)申請(qǐng)的key
注意:
mob后臺(tái)申請(qǐng)的Appkey:就是第一部中獲取ShareSDK的AppKey
各個(gè)平臺(tái)申請(qǐng)的key:需要到各個(gè)平臺(tái)申請(qǐng),例如需要微信分享第岖,則需要到微信開放平臺(tái)進(jìn)行申請(qǐng)
5难菌,添加登錄代碼
1,在您程序啟動(dòng)的時(shí)候添加初始化代碼(注:不要等調(diào)用ShareSDK功能之前才初始化)
即自己添加一個(gè)類繼承Application蔑滓,在onCreate方法添加下面的代碼郊酒,如下:
package com.xinhao.thirdpartysharelogin;
import android.app.Application;
import cn.sharesdk.framework.ShareSDK;
/**
* author Alpha58
* date 2017/03/15
* desc ${Application}
* <p>
* upDateAuthor $Author$
* upDate $Date$
* upDateDesc ${TODO}
*/
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
//初始化ShareSDK
ShareSDK.initSDK(this);
}
}
注意: 該類需要在清單文件中注冊(cè),如圖:
2键袱,登錄activity代碼
package com.xinhao.thirdpartysharelogin;
import android.app.Activity;
import android.app.ProgressDialog;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.widget.ImageView;
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.sina.weibo.SinaWeibo;
import cn.sharesdk.tencent.qq.QQ;
import cn.sharesdk.wechat.friends.Wechat;
import static android.R.attr.action;
/**
* author Alpha58
* date 2017/03/16
* desc ${第三方登錄}
* <p>
* upDateAuthor $Author$
* upDate $Date$
* upDateDesc ${TODO}
*/
public class LoginActivity extends Activity implements PlatformActionListener, Handler.Callback, View.OnClickListener {
private static final int MSG_ACTION_CCALLBACK = 0;
private ImageView ivWxLogin;
private ImageView ivQqLogin;
private ImageView ivBlog;
private ProgressDialog progressDialog;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
initView();
initListener();
initData();
}
public void initView() {
ivWxLogin = (ImageView) findViewById(R.id.iv_wx_login);
ivQqLogin = (ImageView) findViewById(R.id.iv_qq_login);
ivBlog = (ImageView) findViewById(R.id.iv_blog);
}
public void initListener() {
ivWxLogin.setOnClickListener(this);
ivQqLogin.setOnClickListener(this);
ivBlog.setOnClickListener(this);
}
public void initData() {
}
@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.iv_wx_login:
Platform wechat = ShareSDK.getPlatform(Wechat.NAME);
wechat.setPlatformActionListener(this);
wechat.SSOSetting(false);
authorize(wechat, 1);
break;
case R.id.iv_qq_login:
Platform qq = ShareSDK.getPlatform(QQ.NAME);
qq.setPlatformActionListener(this);
qq.SSOSetting(false);
authorize(qq, 2);
break;
case R.id.iv_blog:
Platform sina = ShareSDK.getPlatform(SinaWeibo.NAME);
sina.setPlatformActionListener(this);
sina.SSOSetting(false);
authorize(sina, 3);
break;
default:
break;
}
}
//授權(quán)
private void authorize(Platform plat, int type) {
switch (type) {
case 1:
showProgressDialog(getString(R.string.opening_wechat));
break;
case 2:
showProgressDialog(getString(R.string.opening_qq));
break;
case 3:
showProgressDialog(getString(R.string.opening_blog));
break;
}
if (plat.isValid()) { //如果授權(quán)就刪除授權(quán)資料
plat.removeAccount();
}
plat.showUser(null);//授權(quán)并獲取用戶信息
}
//登陸授權(quán)成功的回調(diào)
@Override
public void onComplete(Platform platform, int i, HashMap<String, Object> res) {
Message msg = new Message();
msg.what = MSG_ACTION_CCALLBACK;
msg.arg1 = 1;
msg.arg2 = action;
msg.obj = platform;
UIHandler.sendMessage(msg, this); //發(fā)送消息
}
//登陸授權(quán)錯(cuò)誤的回調(diào)
@Override
public void onError(Platform platform, int i, Throwable t) {
Message msg = new Message();
msg.what = MSG_ACTION_CCALLBACK;
msg.arg1 = 2;
msg.arg2 = action;
msg.obj = t;
UIHandler.sendMessage(msg, this);
}
//登陸授權(quán)取消的回調(diào)
@Override
public void onCancel(Platform platform, int i) {
Message msg = new Message();
msg.what = MSG_ACTION_CCALLBACK;
msg.arg1 = 3;
msg.arg2 = action;
msg.obj = platform;
UIHandler.sendMessage(msg, this);
}
//登陸發(fā)送的handle消息在這里處理
@Override
public boolean handleMessage(Message message) {
hideProgressDialog();
switch (message.arg1) {
case 1: { // 成功
Toast.makeText(LoginActivity.this, "授權(quán)登陸成功", Toast.LENGTH_SHORT).show();
//獲取用戶資料
Platform platform = (Platform) message.obj;
String userId = platform.getDb().getUserId();//獲取用戶賬號(hào)
String userName = platform.getDb().getUserName();//獲取用戶名字
String userIcon = platform.getDb().getUserIcon();//獲取用戶頭像
String userGender = platform.getDb().getUserGender(); //獲取用戶性別燎窘,m = 男, f = 女,如果微信沒有設(shè)置性別,默認(rèn)返回null
Toast.makeText(LoginActivity.this, "用戶信息為--用戶名:" + userName + " 性別:" + userGender, Toast.LENGTH_SHORT).show();
//下面就可以利用獲取的用戶信息登錄自己的服務(wù)器或者做自己想做的事啦!
//蹄咖。荠耽。。
}
break;
case 2: { // 失敗
Toast.makeText(LoginActivity.this, "授權(quán)登陸失敗", Toast.LENGTH_SHORT).show();
}
break;
case 3: { // 取消
Toast.makeText(LoginActivity.this, "授權(quán)登陸取消", Toast.LENGTH_SHORT).show();
}
break;
}
return false;
}
//顯示dialog
public void showProgressDialog(String message) {
progressDialog = new ProgressDialog(this);
progressDialog.setMessage(message);
progressDialog.setCancelable(true);
progressDialog.show();
}
//隱藏dialog
public void hideProgressDialog() {
if (progressDialog != null)
progressDialog.dismiss();
}
}
3比藻,布局activity_login.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="horizontal"
>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center">
<ImageView
android:id="@+id/iv_wx_login"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="10dp"
android:clickable="true"
android:src="@mipmap/wechat_icon"
/>
<ImageView
android:id="@+id/iv_qq_login"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginLeft="20dp"
android:layout_marginRight="20dp"
android:layout_marginTop="10dp"
android:clickable="true"
android:src="@mipmap/qq_icon"
/>
<ImageView
android:id="@+id/iv_blog"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="10dp"
android:clickable="true"
android:src="@mipmap/blog_icon"
/>
</LinearLayout>
</LinearLayout>
效果如下:
Demo下載:https://github.com/wildma/ShareSDKThirdPartyShareLogin
如果對(duì)你有幫助記得點(diǎn)贊铝量,star支持下哈~