admin 管理员组

文章数量: 1184232

微信、QQ、微博第三方登录与分享

最近项目终于要完结了,甲方可能是觉得这个项目做得不错,准备推广,说他们的boss要开发布会了,我听后内心偷偷一笑,这种傻b系统还开发布会,别逗我笑,我的小心脏受不了。于是他们又过来了几次,说加个第三方登录与分享功能。嗯,加个第三方登录与分享,说得轻巧,可苦了我。而且啊,第三方登录,是要做iOS端和Android端的,还要做服务器端,忧伤。

新来的妹子电脑太卡了,帮她调了个bug,intellij IDEA卡到爆炸,实在受不了了,就把唯一一台imac让给她了,又抄起自己的小macbook pro,虽然屏幕小了点,但好在敲敲代码啥的性能上没问题,就是同时开着xcode、as、intellij IDEA和网易云音乐时风扇转得太厉害,怕把本本烧坏,有点小心烦。记录一下集成三大平台的登录与分享。

首先,肯定是马上上CSDN博客找解决方案,不负希望,找到了不少前辈分享的博客。在此分享一下




对比着几个博客和官网文档,嗯,其实也不太难,不过腾讯开发平台和微博的文档是真的有点那啥,特别是微博的,sdk托管在github上,文档解释也是少得可怜,而微信最坑的是就算你完全按步骤集成了,你也是跑不通的,因为你要清除微信的缓存,或者说自己重装一遍微信,当时调试了半天,总是调不通,最后换了台测试机,上面没装微信,就新安装下,居然跑通了,当时心里一万句mmp,不知道微信怎么会这样,也不知道其中的原理是啥,知道的小伙伴请在评论或者发邮件我,大家交流交流心得。

1.微信

在微信开放平台注册一个账号并且创建一个应用,再申请第三方登录与分享的权限

然后就按照开发文档,微信的开发文档写得还是非常不错的

在Android Studio的app build.gradle中添加依赖

然后就是添加一些用户权限了

<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>


如果已经添加过了,就不用再添加了。

然后就是在自己的Application类中添加微信注册代码

 private void registerToWX() {
        mWxApi = WXAPIFactory.createWXAPI(this,AppConst.WEIXIN.APP_ID,false);
        mWxApi.registerApp(AppConst.WEIXIN.APP_ID);
    }

在Application中的onCreate()方法中调用registerToWX()

在需要登微信登录的地方,也就是点击微信登录按钮处理方法中调用如下方法

 private void wechatLogin() {
        IWXAPI wxapi = ((MyApplication)getActivity().getApplication()).mWxApi;
        if(!wxapi.isWXAppInstalled()){
            Toast.makeText(getContext(),"您还未安装微信客户端",Toast.LENGTH_SHORT).show();
            return;
        }
        final SendAuth.Req req = new SendAuth.Req();
        req.scope = "snsapi_userinfo";
        req.state = "yuanda_wx_login";
        wxapi.sendReq(req);
    }

这个方法很简单,就是先判断用户机是否安装了微信客户端,如果安装了,就向微信客户端发一个获取用户信息的请求,当然,微信其实已经处理了很多种情况了,比如微信没登录,那么调起微信客户端后就会进入到微信登录界面。微信登录验证用了 ,具体过程就是首先发起上面的请求,然后微信客户端登录确认后就会在回调Activity中返回一个code的字符串,然后用这code去请求这个url,就可以获取一个token,这个token就是一个凭证,后面的很多微信请求都需要使用这个token,但其实我们的第三方登录用不到这个token,我们其实需要的是访问这个url后返回的openid字段,因为这个openid表示的是我们创建的这个app应用中每个微信用户的唯一标识。我的设计思路是把code提交给后台,然后后台发起这个url请求,把获取的openid与用户原有的账号绑定,以后再登录时就可以直接通过这个openid获取用户账号,然后就可以返回用户数据了。

回调的Activity必须是应用包名+wxapi.WXEntryActivity,并且要实现I

本文标签: 系统 微信 编程