</pre>一些基础性的东西我就不说了,至于怎么去下载SDK,什么的相信都知道<p></p><p>QQ </p><p>1.第三方登录:</p><p>首先在需要第三方登录的地方声明</p><p></p><pre name="code" class="java"> /*** QQ第三方登录** @param savedInstanceState*/private static Tencent mTencent; // qq主操作对象private String scope; // 获取信息的范围参数private UserInfo userInfo; // qq用户信息private String openid = "";
然后再Oncreate()方法中添加如下
<pre name="code" class="java"> /*** QQ第三方登录*/mTencent = Tencent.createInstance(YbgConstant.APP_ID, LoginActivity.this);scope = "all";

给到点击事件,在Onclick()方法中添加

case R.id.QQLogin_img:// 试用QQ第三方登录qqLogin();

方法qqLogin()的具体

// 第三方登陆QQpublic void qqLogin() {// 如果sesson有效if (!mTencent.isSessionValid()) {// 开始qq授权登录mTencent.login(LoginActivity.this, "all", loginListener);}}
loginListener是用来实现接口回调的,必须是IUiListener
<pre name="code" class="java">IUiListener loginListener = new IUiListener() {@Overridepublic void onError(UiError arg0) {T.showShort(LoginActivity.this, "登陆失败,请稍后重试!");}@Overridepublic void onComplete(Object value) {if (value == null) {return;}// valueinitOpenidAndToken((JSONObject) value);System.out.println("有数据返回..");// 获取用户信息getUserInfo();try {JSONObject jo = (JSONObject) value;T.showShort(getContext(), jo.toString());System.out.println("json=" + String.valueOf(jo));openid = jo.getString("openid");
//                thirdlogin("QQ");//初始背景startCustomLoading(LoginActivity.this);String accessToken = jo.getString("access_token");String expires = jo.getString("expires_in");mTencent.setOpenId(openid);mTencent.setAccessToken(accessToken, expires);} catch (Exception e) {T.showShort(LoginActivity.this, "exception1");}}@Overridepublic void onCancel() {T.showShort(LoginActivity.this, "取消登录!");}};

其中

//                thirdlogin("QQ");

是第三方登录的具体操作,获取到的json中有openid(这个是关键)

2.分享

首先是声明

 private Tencent mTencent;private String mAppId;

然后再oncreate()方法中添加如下

 mTencent = Tencent.createInstance(mAppId, getApplicationContext());

点击分享之后就有如下

case R.id.btnqqfriend:// 分享给QQ好友或群params = new Bundle();params.putInt(QQShare.SHARE_TO_QQ_KEY_TYPE, QQShare.SHARE_TO_QQ_TYPE_DEFAULT);params.putString(QQShare.SHARE_TO_QQ_TITLE, "要分享的标题");params.putString(QQShare.SHARE_TO_QQ_SUMMARY, "要分享的摘要");params.putString(QQShare.SHARE_TO_QQ_TARGET_URL, "http://www.qq.com/news/1.html");params.putString(QQShare.SHARE_TO_QQ_IMAGE_URL, "http://imgcache.qq.com/qzone/space_item/pre/0/66768.gif");params.putString(QQShare.SHARE_TO_QQ_APP_NAME, "测试应用222222");// params.putInt(QQShare.SHARE_TO_QQ_EXT_INT,// Integer.parseInt("其他附加功能"));mTencent.shareToQQ(this, params, new BaseUiListener());break;

并且需要实现BaseUiListener()回调

其实这里并没有写什么东西,只是如果需要回调之后的操作,可以在这里添加响应代码

/*** QQ分享*/private class BaseUiListener implements IUiListener {protected void doComplete(JSONObject values) {}@Overridepublic void onComplete(Object o) {doComplete((JSONObject) o);}@Overridepublic void onError(UiError e) {}@Overridepublic void onCancel() {}}

这样可以分享到QQ空间,QQ好友

微信

1.第三方登录

这里的第三方登录,是在手机APP端的,并不是公众号

首先也是需要先声明的

/*** 微信第三方登录** @param savedInstanceState*/private IWXAPI mWeiXinApi;private String WEIXIN_SCOPE = "snsapi_userinfo";private String WEIXIN_STATE = "10000";private String weixinCode;private static String get_access_token = "";// 获取第一步的code后,请求以下链接获取access_tokenpublic static String GetCodeRequest = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code";// 获取用户个人信息public static String GetUserInfo = "https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID";

这里的两个URL可以先不写,因为我们需要在第一次请求之后再次请求,第二次请求的时候需要根据第一次的返回值,拼写URL

然后第三方登录的点击事件

case R.id.WeiXinLogin_img:// 使用微信第三方登录WXlogin();v.startAnimation(shake);break;

这里是WXLogin()方法的实现

/*** 第三方微信登陆*/public void WXlogin() {mWeiXinApi = WXAPIFactory.createWXAPI(this, com.yibugou.ybg_app.views.payment.wechatpayment.Constants.APP_ID,true);if (!mWeiXinApi.isWXAppInstalled()) {T.showShort(LoginActivity.this, "请先安装微信");return;}mWeiXinApi.registerApp(com.yibugou.ybg_app.views.payment.wechatpayment.Constants.APP_ID);SendAuth.Req req = new SendAuth.Req();req.scope = WEIXIN_SCOPE;req.state = WEIXIN_STATE;mWeiXinApi.sendReq(req);}

这样,在首个页面的代码就完成了,这里的最后一句代码是请求回调的,我们在发送一个请求之后,就会调起授权页面,授权成功之后,需要有接受回调的地方,那么就需要在申请SDK的包名下面再新建一个名字是wxapi的文件夹,并且在该文件加下面新建WXENtryActivity.java文件,目录结构如下

然后再该类里面实现IWXAPIEventHandler接口,然后需要重写

 @Overridepublic void onReq(BaseReq baseReq) {}@Overridepublic void onResp(BaseResp resp) {
}

这两个方法

这个类的具体代码如下:

import android.content.Intent;
import android.os.Bundle;
import android.widget.Toast;import com.android.volley.Request;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.StringRequest;
import com.igexin.sdk.PushManager;
import com.tencent.mm.sdk.modelbase.BaseReq;
import com.tencent.mm.sdk.modelbase.BaseResp;
import com.tencent.mm.sdk.modelmsg.SendAuth;
import com.tencent.mm.sdk.openapi.IWXAPI;
import com.tencent.mm.sdk.openapi.IWXAPIEventHandler;
import com.tencent.mm.sdk.openapi.WXAPIFactory;import java.util.HashMap;
import java.util.Map;import de.greenrobot.event.EventBus;/*** Created by xiaoniu on 2015/12/1. 描述:微信第三方登录的时候的回调在此处完成*/
public class WXEntryActivity extends BaseActivity implements IWXAPIEventHandler {private IWXAPI api;public static BaseResp resp;public String code = "";String openid = "";// url 获取token的urlpublic String UrlTokenString;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);// 注册APIapi = WXAPIFactory.createWXAPI(this, com.yibugou.ybg_app.views.payment.wechatpayment.Constants.APP_ID);api.handleIntent(getIntent(), this);}@Overridepublic void onReq(BaseReq baseReq) {}@Overridepublic void onResp(BaseResp resp) {T.showShort(this, "onResp:" + resp.toString());T.showShort(this, "code" + ((SendAuth.Resp) resp).code);code = ((SendAuth.Resp) resp).code;String result = "";if (resp != null) {this.resp = resp;}// 根据resp获取到switch (resp.errCode) {case BaseResp.ErrCode.ERR_OK:finish();startCustomLoading(this);// 拼写URL获取openidUrlTokenString = "https://api.weixin.qq.com/sns/oauth2/access_token?appid="+ Constants.APP_ID + "&secret="+ Constants.API_SCEPE + "&code=" + code+ "&grant_type=authorization_code";WXGetUserInfo(UrlTokenString);break;case BaseResp.ErrCode.ERR_USER_CANCEL:result = "发送取消";Toast.makeText(this, result, Toast.LENGTH_LONG).show();finish();break;case BaseResp.ErrCode.ERR_AUTH_DENIED:result = "发送被拒绝";Toast.makeText(this, result, Toast.LENGTH_LONG).show();finish();break;default:result = "发送返回";Toast.makeText(this, result, Toast.LENGTH_LONG).show();finish();break;}}@Overrideprotected void onNewIntent(Intent intent) {super.onNewIntent(intent);setIntent(intent);api.handleIntent(intent, this);}/*** 根据URL获取微信用户个人信息** @param get_user_info_url*            调用URL*/private void WXGetUserInfo(String get_user_info_url) {new BaseModel(new Response.Listener<String>() {@Overridepublic void onResponse(String response) {// 获取openidopenid = JSONUtils.getString(response, "openid", null);// T.showShort(WXEntryActivity.this,"openid = "+openid);thirdlogin("WX", openid);}}, new Response.ErrorListener() {@Overridepublic void onErrorResponse(VolleyError error) {if (error != null) {T.showShort(mContext, "网络异常,请检查是否有网络连接");disCustomLoading();}}}, get_user_info_url, null);}/*** 第三方登录具体方法实现* * @param openidtype* @param openid*/public void thirdlogin(final String openidtype, final String openid) {}}

这里首先从返回的信息里面获取得到code值,然后通过拼写URL获取得到openid,这里也就可以得到授权用户的一些信息,包括用户名,性别,地址等等

2.微信分享

这个比较简单,我们可以直接访问,而不使用回调,这个也是可以的(不过可能会有一些问题,如果返回的时候没有找到,可能就会有点不好看,这里只是一个demo)

 private IWXAPI api;
在Oncreate()方法中,
api = WXAPIFactory.createWXAPI(this, Constants.APP_ID, false);api.registerApp(Constants.APP_ID);

然后再onclick()方法中直接吧所有的代码都完成


其中webpageUrl是链接的地址

title是标题

description是描述,

setThumbImage是一个自定义的图片

但是依然存在问题,在完成操作之后并没有直接回到我们想要的页面,而且会有闪屏的现象

这里在最后要在声明一下,如果在程序中一次性集成了微信的第三方登陆和微信分享,那么这两个功能会同时找到WXEntryActivity进行回调的,这个时候我们就需要进行一些必要的判断。

从官方的文档中我们可以发现在发送的时候有个state的变量是根据用户自己的定义而决定的,当请求发出去之后,会把这个state值在返还回来,可是我通过看jar包中的源码发现在BaseResp中并没有我们所需要的state变量,它在定义的时候是这样子的

所以只能另辟蹊径,注意,我当时的时间是2016年1月14日 19:14:46,以后如果官方有更新,就要适当的变化,根据具体的内容进行修改

现在既然没有state值返回,只能再去看看别的内容,在尝试中我发现getType()的值时发生变化的,就是说分享和第三方登陆返回的值是不同的

所以在样的情况下我在WXEntryActivity中做了如下判断

@Override
    public void onResp(BaseResp resp) {
//       T.showLong(mContext,"getType"+ resp.getType()+"transaction="+resp.transaction+"errStr"+resp.errStr);
        String result = "";
        if (resp != null) {this.resp = resp;
        }// 根据resp获取到
        switch (resp.errCode) {case BaseResp.ErrCode.ERR_OK:if(resp.getType() == 2){T.showLong(mContext,"分享成功");
                finish();
            }else if(resp.getType() == 1){code = ((SendAuth.Resp) resp).code;
                startCustomLoading(this);
                // 拼写URL获取openid
                UrlTokenString = "https://api.weixin.qq.com/sns/oauth2/access_token?appid="
                        + com.yibugou.ybg_app.views.payment.wechatpayment.Constants.APP_ID + "&secret="
                        + com.yibugou.ybg_app.views.payment.wechatpayment.Constants.API_SCEPE + "&code=" + code
                        + "&grant_type=authorization_code";
                WXGetUserInfo(UrlTokenString);
            }break;

这样就可以解决在回调之后的闪屏问题

QQ 微信 第三方登录 分享相关推荐

  1. Android中的友盟(微信、QQ、新浪)第三方登录分享

    前言:我再这里只总结Android开发人员需要做的,其他的就去看开发文档吧,例如获取Appkey,就找你的领导要去吧. 一.准备工作 第一步:快速集成. 快速集成包含自动集成与手动集成两种方式,开发者 ...

  2. 微信QQ第三方登录分享和支付宝微信支付

    登录是使用的是友盟第三方登录:APPID 和APPKEY都是成对出现的,改一个都要改不然出错. QQ第三方登录: APPID ,APPKEY: 微信第三方登录:WEIXINID, WEIXINKEY ...

  3. 微信第三方登录和微信相关的分享处理

    背景:前不久做的一个项目中涉及到第三方登录和第三方分享,其中就有微信第三方登录.微信朋友圈分享.微信好友分享和微信收藏.微信分享还是很简单的,现在有很多第三方都集成了分享功能,但是涉及到微信第三方登录 ...

  4. php实例-微信第三方登录

    下面小编就为大家带来一篇微信第三方登录(原生)demo[必看篇].小编觉得挺不错的,现在就分享给大家,也给大家做个参考.一起跟随小编过来看看吧 在一家ecstore二开公司有一段时间了,公司希望往自己 ...

  5. 微信第三方登录 -- (PC端+移动端)

    微信第三方登录 -- (PC端+移动端) 一.前言 一. 什么是第三方登录 所谓的第三方登录,是说基于用户在第三方平台上已有的账号和密码来快速完成己方应用的登录或者注册的功能.而这里的第三方平台,一般 ...

  6. [iOS常见问题] 关于使用QQ做第三方登录的问题!

    [iOS常见问题] 关于使用QQ做第三方登录的问题! 注意:QQ本身没有授权功能,所以想要使用QQ做第三方登录必须通过QQ空间来实现! 第一步:集成ShareSDK(步骤同集成分享的一样,如果已经集成 ...

  7. php手机注册和微信登录统一,微信第三方登录账户统一的问题

    微信公众号的 open_id和PC上的微信第三方登录 open_id 是一致的吗? 按照微信公众平台的文档 open_id应该是针对当前账户或者说是应用的,换句话说不同账号和应该应该是不一样的,那么如 ...

  8. iOS微信第三方登录实现

    iOS微信第三方登录实现 字数2824 阅读7603 评论19 喜欢46 注意:代码自己动手写,不要复制! 一.接入微信第三方登录准备工作. 移动应用微信登录是基于OAuth2.0协议标准构建的微信O ...

  9. 微信第三方登录,主要手机没有安装微信处理

    现在处理微信第三方处理的方法百度下有很多,这里主要说一下如果手机没有安装微信的处理. 前一段时间朋友由于没有对手机未安装微信做处理,被苹果审核组给拒绝了,主要原因就是说微信第三方登录没有对未安装微信的 ...

最新文章

  1. Linux日常命令记录
  2. 5G时代到来,人工智能设备如何重塑TMT行业
  3. 东拉西扯:那些“老”互联网公司
  4. delphi tclientsocket接收不到返回数据_RS—485中教你主站发送报文结构、从站返回报文结构?系列11...
  5. Java基本语法(15)--while循环结构do-while循环结构
  6. QImage QPixmap Mat区别
  7. oracle空格分割字符串,Oracle字符串分割的处理
  8. 数据解析1:XML解析(1)
  9. php小算法总结一(数组重排,进制转换,二分查找)
  10. cs1.6的c语言源代码,cs1.6source - 源码下载|游戏|其他游戏|源代码 - 源码中国
  11. JDK、J2EE、J2SE、J2ME的区别(转-2021-04-30)
  12. python 安装win32com_python调用win32com.client时提示:No module named win32com.client
  13. docker运行教程
  14. 16. M601 低功耗测试
  15. 二进制炸弹--拆弹实验
  16. 【问题解决】This container is having trouble accessing https://k8s.gcr.io | 如何解决从k8s.gcr.io拉取镜像失败问题?
  17. 服务器证书验证失败怎么办
  18. Debussy软件的脚本调用
  19. 江苏“同心圆”工程为银发投资安全设“保护圈”
  20. 装修小知识 杜绝厨房装修遗憾

热门文章

  1. TCP-实现英译汉服务器客户端(多进程/多线程)
  2. 电销行业新时代-AI智能电销机器人
  3. 力扣 第314场周赛 Q3 使用机器人打印字典序最小的字符串【难度:中等,rating: 1953】(栈+贪心)
  4. DDCTF 北京地铁
  5. win10安装rational rose
  6. SQL Server 2019 Express 及 SSMS18 下载安装配置教程
  7. Maven 虐我千百遍,我待 Maven 如初恋 侵删
  8. vc中定时器并非多线程
  9. 用ANSYS画矩形_3D建模:用SolidWorks画一个一字螺丝刀
  10. Ceph学习之路---Ceph检查和设置运行时nearfull和full的阀值