昨天群里有个群友看到我之前做的那个qq第三方登录怎么做的,于是乎思考了一下,还是决定写一篇博客记录下,其实都不难的,其实之前我又写到FaceBook的第三方登录不知道看下这Android集成FaceBook登入《-》 今天只举例QQ登录其他像微信大同小异需要微信工具签名然后md5+包名等。
开车啦
准备工作需要下载ShareSDK这里我不再赘述不知道的看我的这篇文章ShareSDK社会化分享之那些年我们踩过的坑我这里不再赘述因为很多步骤是重复的。
然后在项目工程中assets文件下修改ShareSDK.xml文件更改您的Appkey
然后QQ第三方登录准备的Jar点击直接下载opensdk
然后解压将jar放到工程中的libs中如下图所示
1、申请appid和appkey的用途
appid :应用的唯一标识。在OAuth2.0认证过程中,appid的值即为oauth_consumer_key的值。
appkey:appid对应的密钥,访问用户资源时用来验证应用的合法性。在OAuth2.0认证过程中,appkey的值即为oauth_consumer_secret的值。
2、配置清单文件AndroidMainfest.xml
2.1添加相关权限
<!-- 添加权限 -->
<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"/>
<!-- 蓝牙分享所需的权限 -->
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<activity
android:name="com.mob.tools.MobUIShell"
android:configChanges="keyboardHidden|orientation|screenSize"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:windowSoftInputMode="stateHidden|adjustResize">
2.2微信授权回调
<!--微信分享回调 -->
<activity
android:name=".wxapi.WXEntryActivity"
android:configChanges="keyboardHidden|orientation|screenSize"
android:exported="true"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.Translucent.NoTitleBar" />
2.3注册Activity
<!-- 注册SDKActivity -->
<activity
android:name="com.tencent.tauth.AuthActivity"
android:launchMode="singleTask"
android:noHistory="true">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="tencent1105658914" /> <!-- 开放平台获取的APPID -->
</intent-filter>
</activity>
<activity
android:name="com.tencent.connect.common.AssistActivity"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.Translucent.NoTitleBar" />
<activity android:name=".bdmap.BMapActivity" />
3、代码简单实现
声明变量
private Tencent mTencent;
private BaseUiListener mIUiListener;
private UserInfo mUserInfo;
private CallbackManager mCallBackManager;
SDK初始化这个大多数都会有需要注意的这里是传入getApplicationContext
mTencent=Tencent.createInstance(AppConstant.APP_ID,LoginActivity.this.getApplicationContext());
3.1 QQ登录授权接口回调
public void QQLogin(View v) {
mIUiListener = new BaseUiListener();
//all表示获取所有权限
mTencent.login(LoginActivity.this,"all", mIUiListener);
//授权成功后跳转到引导页面
startActivity(new Intent(LoginActivity.this,WelcomeGuideActivity.class));
}
3.2自定义监听器实现IUiListener接口后,需要实现的3个方法 onComplete完成 onError错误 onCancel取消
/**
* 自定义监听器实现IUiListener接口后,需要实现的3个方法
* onComplete完成 onError错误 onCancel取消
*/
private class BaseUiListener implements IUiListener{
@Override
public void onComplete(Object response) {
Toast.makeText(LoginActivity.this, "授权成功", Toast.LENGTH_SHORT).show();
Log.e(TAG, "response:" + response);
JSONObject obj = (JSONObject) response;
try {
String openID = obj.getString("openid");
String accessToken = obj.getString("access_token");
String expires = obj.getString("expires_in");
mTencent.setOpenId(openID);
mTencent.setAccessToken(accessToken,expires);
QQToken qqToken = mTencent.getQQToken();
mUserInfo = new UserInfo(getApplicationContext(),qqToken);
mUserInfo.getUserInfo(new IUiListener() {
@Override
public void onComplete(Object response) {
Log.e(TAG,"登录成功"+response.toString());
}
@Override
public void onError(UiError uiError) {
Log.e(TAG,"登录失败"+uiError.toString());
}
@Override
public void onCancel() {
Log.e(TAG,"登录取消");
}
});
} catch (JSONException e) {
e.printStackTrace();
}
}
@Override
public void onError(UiError uiError) {
Toast.makeText(LoginActivity.this, "授权失败", Toast.LENGTH_SHORT).show();
}
@Override
public void onCancel() {
Toast.makeText(LoginActivity.this, "授权取消", Toast.LENGTH_SHORT).show();
}
}
3.3在调用Login的Activity或者Fragment中重写onActivityResult方法
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if(requestCode == Constants.REQUEST_LOGIN){
Tencent.onActivityResultData(requestCode,resultCode,data,mIUiListener);
}
super.onActivityResult(requestCode, resultCode, data);
}
总结:
整个流程如下图所示
效果如下图所示360高清无码正在加载中别眨眼!为了做个这东西把自己QQ都卖了我容易吗?我没办法老司机!
转载请注明出处同时欢迎大家加我的群号,欢迎开车,自己可以去尝试做一下我这里可能也不是很完整,最好建议大家去管网看文档!应该是没问题的!我这人有一点不好不喜欢拖拉!喜欢的事情就去做!因为年轻!因为任性!因为代码是敲出来的!还记得我有个群友代码9.99评分豆瓣棒棒哒!来个合照