第三方登录(QQ登录)

news/2025/3/16 6:06:44/
 public void login() {
//                                   在腾讯开放平台获取的APPID
        mTencent = Tencent.createInstance("1106541335", this.getApplicationContext());if (!mTencent.isSessionValid()) {mTencent.login(this, Scope, listener);}}@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {Tencent.onActivityResultData(requestCode, resultCode, data, listener);}
 
 
回调监听类
package jiyun.com.lovepet.qq;import android.content.SharedPreferences;
import android.util.Log;import com.google.gson.Gson;
import com.tencent.tauth.IUiListener;
import com.tencent.tauth.UiError;import org.json.JSONObject;import java.io.IOException;
import java.util.HashMap;
import java.util.Map;import jiyun.com.lovepet.api.App;
import jiyun.com.lovepet.qq.bean.QQ;
import jiyun.com.lovepet.qq.bean.QQphoto;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;/**
 * Created by DELL on 2017/12/17.
 */

public class BaseUiListener implements IUiListener {
//"https://graph.qq.com/user/get_user_info?access_token=access_token&oauth_consumer_key=1106541335&openid=openid&format=json"
    private String access_token1;private Object oauth_consumer_key;private String openid1;private String format;@Override
    public void onComplete(Object o) {
//        mBaseMessageText.setText("onComplete:");
//        mMessageText.setText(o.toString());
        doComplete((JSONObject) o);}protected void doComplete(JSONObject values) {//        values.toString();
        Log.e("doComplete: ", values.toString());Gson gson = new Gson();QQ qq = gson.fromJson(values.toString(), QQ.class);String access_token = qq.getAccess_token();SharedPreferences sharedPreferences = App.baseActivity.getSharedPreferences("user_info", 0);SharedPreferences.Editor edit = sharedPreferences.edit();edit.putString("access_token", access_token);int authority_cost = qq.getAuthority_cost();int expires_in = qq.getExpires_in();int login_cost = qq.getLogin_cost();String msg = qq.getMsg();String openid = qq.getOpenid();edit.putString("openid", openid);String pay_token = qq.getPay_token();String pf = qq.getPf();String pfkey = qq.getPfkey();int query_authority_cost = qq.getQuery_authority_cost();int ret = qq.getRet();//获取用户QQ信息
        getQQ(access_token, openid);}public void getQQ(String access_token, String openid) {StringBuffer buffer = new StringBuffer("https://graph.qq.com/user/get_user_info");Map<String, Object> map = new HashMap<>();map.put("access_token", access_token);map.put("oauth_consumer_key", 1106541335);map.put("openid", openid);map.put("format", "json");buffer.append("?");for (int i = 0; i < map.size(); i++) {access_token1 = (String) map.get("access_token");oauth_consumer_key = map.get("oauth_consumer_key");openid1 = (String) map.get("openid");format = (String) map.get("format");}buffer.append("access_token").append("=").append(access_token1).append("&").append("oauth_consumer_key").append("=").append(oauth_consumer_key).append("&").append("openid").append("=").append(openid1).append("&").append("format").append("=").append(format);final Request request = new Request.Builder().url(buffer.toString()).build();OkHttpClient okHttpClient=new OkHttpClient.Builder().build();Call call = okHttpClient.newCall(request);call.enqueue(new Callback() {@Override
            public void onFailure(Call call, IOException e) {Log.e("onFailure: ",e.getMessage() );}@Override
            public void onResponse(Call call, Response response) throws IOException {String string = response.body().string();if (response.code() == 200) {Gson gson = new Gson();QQphoto qQphoto = gson.fromJson(string, QQphoto.class);//城市
                    String city = qQphoto.getCity();Log.e("所在城市: ",city );//                    大小为30×30像素的QQ空间头像URL。
                    String figureurl = qQphoto.getFigureurl();Log.e("QQ空间头像: ",figureurl );//                    大小为50×50像素的QQ空间头像URL。
                    String figureurl_1 = qQphoto.getFigureurl_1();Log.e("QQ空间头像: ",figureurl_1 );//                    大小为100×100像素的QQ空间头像URL。
                    String figureurl_2 = qQphoto.getFigureurl_2();Log.e("QQ空间头像: ",figureurl_2 );//                    大小为40×40像素的QQ头像URL。
                    String figureurl_qq_1 = qQphoto.getFigureurl_qq_1();Log.e("QQ空间头像: ",figureurl_qq_1 );//                    大小为100×100像素的QQ头像URL。需要注意,不是所有的用户都拥有QQ的100x100的头像,但40x40像素则是一定会有
                    String figureurl_qq_2 = qQphoto.getFigureurl_qq_2();Log.e("QQ空间头像: ",figureurl_qq_2 );//                    性别。 如果获取不到则默认返回"男"
                    String gender = qQphoto.getGender();Log.e("性别: ",gender );int is_lost = qQphoto.getIs_lost();
//                    标识用户是否为黄钻用户(0:不是;1:是)。
                    String is_yellow_vip = qQphoto.getIs_yellow_vip();
//                    标识是否为年费黄钻用户(0:不是; 1:是)
                    String is_yellow_year_vip = qQphoto.getIs_yellow_year_vip();String level = qQphoto.getLevel();
//                    用户在QQ空间的昵称。
                    String nickname = qQphoto.getNickname();Log.e("昵称: ",nickname );String province = qQphoto.getProvince();
//                    返回码
                    int ret = qQphoto.getRet();
//                    如果ret<0,会有相应的错误信息提示,返回数据全部用UTF-8编码。
                    String msg = qQphoto.getMsg();
//                    标识用户是否为黄钻用户(0:不是;1:是)
                    String vip = qQphoto.getVip();//出生在哪年
                    String year = qQphoto.getYear();
//                    黄钻等级
                    String yellow_vip_level = qQphoto.getYellow_vip_level();}}});}@Override
    public void onError(UiError e) {
//        showResult("onError:", "code:" + e.errorCode + ", msg:"
//                + e.errorMessage + ", detail:" + e.errorDetail);

        Log.e("onError:", "code:" + e.errorCode + ", msg:"
                + e.errorMessage + ", detail:" + e.errorDetail);}@Override
    public void onCancel() {
//        showResult("onCancel", "");
        Log.e("onCancel: ", "");}
}
//获取QQ信息的bean类
package jiyun.com.lovepet.qq.bean;/**
 * Created by DELL on 2017/12/18.
 */

public class QQphoto {private int ret;private String msg;private int is_lost;private String nickname;private String gender;private String province;private String city;private String year;private String figureurl;private String figureurl_1;private String figureurl_2;private String figureurl_qq_1;private String figureurl_qq_2;private String is_yellow_vip;private String vip;private String yellow_vip_level;private String level;private String is_yellow_year_vip;public int getRet() {return ret;}public void setRet(int ret) {this.ret = ret;}public String getMsg() {return msg;}public void setMsg(String msg) {this.msg = msg;}public int getIs_lost() {return is_lost;}public void setIs_lost(int is_lost) {this.is_lost = is_lost;}public String getNickname() {return nickname;}public void setNickname(String nickname) {this.nickname = nickname;}public String getGender() {return gender;}public void setGender(String gender) {this.gender = gender;}public String getProvince() {return province;}public void setProvince(String province) {this.province = province;}public String getCity() {return city;}public void setCity(String city) {this.city = city;}public String getYear() {return year;}public void setYear(String year) {this.year = year;}public String getFigureurl() {return figureurl;}public void setFigureurl(String figureurl) {this.figureurl = figureurl;}public String getFigureurl_1() {return figureurl_1;}public void setFigureurl_1(String figureurl_1) {this.figureurl_1 = figureurl_1;}public String getFigureurl_2() {return figureurl_2;}public void setFigureurl_2(String figureurl_2) {this.figureurl_2 = figureurl_2;}public String getFigureurl_qq_1() {return figureurl_qq_1;}public void setFigureurl_qq_1(String figureurl_qq_1) {this.figureurl_qq_1 = figureurl_qq_1;}public String getFigureurl_qq_2() {return figureurl_qq_2;}public void setFigureurl_qq_2(String figureurl_qq_2) {this.figureurl_qq_2 = figureurl_qq_2;}public String getIs_yellow_vip() {return is_yellow_vip;}public void setIs_yellow_vip(String is_yellow_vip) {this.is_yellow_vip = is_yellow_vip;}public String getVip() {return vip;}public void setVip(String vip) {this.vip = vip;}public String getYellow_vip_level() {return yellow_vip_level;}public void setYellow_vip_level(String yellow_vip_level) {this.yellow_vip_level = yellow_vip_level;}public String getLevel() {return level;}public void setLevel(String level) {this.level = level;}public String getIs_yellow_year_vip() {return is_yellow_year_vip;}public void setIs_yellow_year_vip(String is_yellow_year_vip) {this.is_yellow_year_vip = is_yellow_year_vip;}
}
//获取QQ id和token的bean类
package jiyun.com.lovepet.qq.bean;/**
 * Created by DELL  on 2017/12/17.
 */

public class QQ {private int ret;private String openid;private String access_token;private String pay_token;private int expires_in;private String pf;private String pfkey;private String msg;private int login_cost;private int query_authority_cost;private int authority_cost;public int getRet() {return ret;}public void setRet(int ret) {this.ret = ret;}public String getOpenid() {return openid;}public void setOpenid(String openid) {this.openid = openid;}public String getAccess_token() {return access_token;}public void setAccess_token(String access_token) {this.access_token = access_token;}public String getPay_token() {return pay_token;}public void setPay_token(String pay_token) {this.pay_token = pay_token;}public int getExpires_in() {return expires_in;}public void setExpires_in(int expires_in) {this.expires_in = expires_in;}public String getPf() {return pf;}public void setPf(String pf) {this.pf = pf;}public String getPfkey() {return pfkey;}public void setPfkey(String pfkey) {this.pfkey = pfkey;}public String getMsg() {return msg;}public void setMsg(String msg) {this.msg = msg;}public int getLogin_cost() {return login_cost;}public void setLogin_cost(int login_cost) {this.login_cost = login_cost;}public int getQuery_authority_cost() {return query_authority_cost;}public void setQuery_authority_cost(int query_authority_cost) {this.query_authority_cost = query_authority_cost;}public int getAuthority_cost() {return authority_cost;}public void setAuthority_cost(int authority_cost) {this.authority_cost = authority_cost;}
}
//好像没有用的的监听类
package jiyun.com.lovepet.qq;import android.util.Log;import com.tencent.open.utils.HttpUtils;
import com.tencent.tauth.IRequestListener;import org.apache.http.conn.ConnectTimeoutException;
import org.json.JSONException;
import org.json.JSONObject;import java.io.IOException;
import java.net.MalformedURLException;
import java.net.SocketTimeoutException;/**
 * Created by DELL  on 2017/12/17.
 */

public class BaseApiListener implements IRequestListener {@Override
    public void onComplete(JSONObject jsonObject) {
//        showResult("IRequestListener.onComplete:", jsonObject.toString());
        Log.e("onComplete: ",jsonObject.toString() );doComplete(jsonObject);}private void doComplete(JSONObject jsonObject) {}@Override
    public void onIOException(IOException e) {
//        showResult("IRequestListener.onIOException:", e.getMessage());
        Log.e("onIOException: ", e.getMessage());}@Override
    public void onMalformedURLException(MalformedURLException e) {
//        showResult("IRequestListener.onMalformedURLException", e.toString());

        Log.e("onMalformedURLException", e.toString());}@Override
    public void onJSONException(JSONException e) {
//        Log.e("IRequestListener.onJSONException:", e.getMessage());
        Log.e("onJSONException: ", e.getMessage());}@Override
    public void onConnectTimeoutException(ConnectTimeoutException e) {
// TODO Auto-generated method stub
    }@Override
    public void onSocketTimeoutException(SocketTimeoutException e) {
// TODO Auto-generated method stub
    }//1.4版本中IRequestListener 新增两个异常
    @Override
    public void onNetworkUnavailableException(HttpUtils.NetworkUnavailableException e) {
// 当前网络不可用时触发此异常
    }@Override
    public void onHttpStatusException(HttpUtils.HttpStatusException e) {
// http请求返回码非200时触发此异常
    }@Override
    public void onUnknowException(Exception e) {
// 出现未知错误时会触发此异常
    }
}
清单文件配置 : 用哪个你复制哪个
    
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="jiyun.com.lovepet">
<uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<application android:name=".api.App" android:allowBackup="true" android:icon="@mipmap/pet_icon" android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:name=".ui.MainActivity"></activity> <activity android:name=".ui.order.activity.MyOrderActivity" /> <activity android:name=".ui.BaseActivity" /> <activity android:name=".ui.pet.activity.MyPetActivity" /> <activity android:name=".ui.pet.activity.LoginActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".ui.pet.activity.BingPhoneActivity" /> <activity android:name=".ui.pet.activity.ToolbarActivity" /> <activity android:name=".ui.pet.activity.WeChatActivity" /> <activity android:name=".ui.pet.activity.RegisterActivity"></activity> <activity android:name=".order.XiangQingActivity">
</activity> <activity android:name=".order.EvaluateActivity">
</activity>
<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="tencent1106541335" /> </intent-filter> </activity>
<activity android:name="com.tencent.connect.common.AssistActivity" android:configChanges="orientation|keyboardHidden|screenSize" android:theme="@android:style/Theme.Translucent.NoTitleBar" />
<activity android:name=".ui.pet.activity.HomeActivity" />
<application> <activity android:name="com.tencent.plus.ImageActivity" /> </application>
</application>
</manifest>
  
QQ登录配置等信息的网址 :http://wiki.open.qq.com/wiki/%E5%88%9B%E5%BB%BA%E5%B9%B6%E9%85%8D%E7%BD%AE%E5%B7%A5%E7%A8%8B
获取头像等个人信息的网址:http://wiki.open.qq.com/wiki/website/get_simple_userinfo

http://www.ppmy.cn/news/246718.html

相关文章

Linux之mariadb数据库管理

mariadb 简介 MariaDB 数据库管理系统是 MySQL 的一个分支&#xff0c;主要由开源社区在维护&#xff0c;采用GPL 授权许可 MariaDB 的目的是完全兼容 MySQL , 包括 API 和命令行&#xff0c;是MySQL 的代替品 MariaDB 由 MySQL 的创始人 Michael Widenius 主导开发&#xff0…

php常见的异常,PHP常见的报错信息和异常处理

PHP常见的错误和异常处理都有哪些呢&#xff1f;里面做了简单的解析 Code: \lib\inc\table.php(2) : eval()d code(1) : eval()d code(1) : eval()d code on line 27 解决方法: php.ini 打开 short tag Code: 没有找到settings类 解决方法&#xff1a; config文件夹来宾不可读…

Tomcat使用笔记

1、手工启动tomcat&#xff0c;环境变量都换了&#xff0c;为何tomcat7还是加载老的JAVA_HOME路径&#xff1f; 应该是tomcat缓存问题&#xff0c;删除work目录下所有内容即可。 2、tomcat如何指定JDK&#xff1f; https://jingyan.baidu.com/article/066074d62d371cc3c21cb…

关于RN热更新-iOS端捕获加载jsbundle异常解决方案

1.监听加载jsbundle异常的处理 模拟情况&#xff1a;合并增量后jsbundle文件出现部分错误调试发现当加载jsbundle出现异常时&#xff0c;RN模块RCTBatchedBridge.m中如下代码会执行&#xff1a; - (void)stopLoadingWithError:(NSError *)error {RCTAssertMainThread();if (!se…

error exception php,PHP ErrorException

介绍 PHP的Exception类实现Throwable接口。ErrorException类扩展Exception类。当想要捕获和处理否则会被忽略的错误(例如&#xff0c;通知或警告)时&#xff0c;将明确抛出ErrorException。 PHP核心由以下预定义的错误常量组成值不变描述1个E_ERROR致命的运行时错误。 2E_WARNI…

AES解密类,解密案例 解决No matching distribution found for Crypto

AES解密类 # 解密武器 class decrypt_AES:def __init__(self, encrypted_data):self.encrypted_dataencrypted_dataself.secret_key jo8j9wGw%6HbxfFn# encrypted_strencrypted_dataself.iv 0123456789ABCDEFdef decrypt(self,data_html):dedata b64decode(data_html)encyp…

php错误显示错误提示,PHP解决显示错误提示问题

PHP解决显示错误提示问题 在php.ini文件中&#xff0c;找到 error_reporting E_ALL 修改为&#xff1a; error_reporting E_ALL & ~E_NOTICE 将display_errors On 修改为&#xff1a; display_errors Off php undefined index 忽略错误的解决方法 首先&#xff0c;这个…

公司管理-Saas多租户平台开发

公司管理-Saas多租户平台开发 目录 文章目录 1、表1.1、序言1.2、规范1.3、公司表sql1.4、地区表1.5、行业表 2、接口文档2.1、公司管理接口 3、后端接口3.1、mybatis-plus 4、前端页面4.1、新增内容4.2、页面详情4.2.1、公司列表页 ***后记*** &#xff1a; 内容 前面我们已经…