转载请标明原地址:http://blog.csdn.net/gaolei1201/article/details/44680291

         可下载体验本人在项目中的实战运用:http://zhushou.360.cn/detail/index/soft_id/2749071?recrefer=SE_D_gosu、https://sj.qq.com/myapp/detail.htm?apkName=com.xuetangx.mobile

       最近项目需要做第三方登录,由于以前没做过,所以也是花了不少时间,走了好多弯路,总算是完成了。依据有福同享有难同当这句话,还有互相学习的原则,还有还有。现在把一些知识点总结一下,供需要者参考,有不足之处还望指点。有两种方式可实现:一种是用友盟的(它是把qq、微信、微博登陆集成一下),另一种是直接用官方sdk。

          我开始想用友盟,友盟提能够提供第三方平台分享和登录功能,其实也是一个挺好的选择,随着sdk的不断迭代,接入也越来越方便。首先研究官方提供的资料,U-Share集成文档:https://developer.umeng.com/docs/66632/detail/66639和官方Demo:https://github.com/umeng/MultiFunctionAndroidDemo,也参考了别人使用经验,文章(有demo)地址:http://blog.csdn.net/wwj_748/article/details/41117173   。你首先需要申请友盟的账号,然后下载需要的SDK,然后把在各个平台注册账号配置到Umeng中,根据自己的需要选择对应的平台,如下

 PlatformConfig.setWeixin("wxdc1e388c3822c80b", "3baf1193c85774b3fd9d18447d76cab0");        //豆瓣RENREN平台目前只能在服务器端配置        PlatformConfig.setSinaWeibo("3921700954", "04b48b094faeb16683c32669824ebdad","http://sns.whalecloud.com");        PlatformConfig.setYixin("yxc0614e80c9304c11b0391514d09f13bf");        PlatformConfig.setQQZone("100424468", "c7394704798a158208a74ab60104f0ba");        PlatformConfig.setTwitter("3aIN7fuF685MuZ7jtXkQxalyi", "MK6FEYG63eWcpDFgRYw4w9puJhzDl0tyuqWjZ3M7XJuuG7mMbO");        PlatformConfig.setAlipay("2015111700822536");        PlatformConfig.setLaiwang("laiwangd497e70d4", "d497e70d4c3e4efeab1381476bac4c5e");        PlatformConfig.setPinterest("1439206");        PlatformConfig.setKakao("e4f60e065048eb031e235c806b31c70f");        PlatformConfig.setDing("dingoalmlnohc0wggfedpk");        PlatformConfig.setVKontakte("5764965","5My6SNliAaLxEm3Lyd9J");        PlatformConfig.setDropbox("oz8v5apet3arcdy","h7p2pjbzkkxt02a");        PlatformConfig.setYnote("9c82bf470cba7bd2f1819b0ee26f86c6ce670e9b");

           微信集成有一个大坑,例如我的apk,包名(也就是AndroidManifest.xml中的包名)是com.kingdowin.gosu,你项目中必须有一个包名是com.kingdowin.gosu.wxapi,下面有一个类是WXEntryActivity.java,里面写登录微信的代码,否则就获取不到用户信息.其实我们也可以把自己的Activity在Manifest.xml中设置  

友盟登录做好之后,分享就简单了,可参考上面提供的例子如何实现分享功能。

      

                 其实友盟也是把各个平台官方的登录和分享API封装到自己的SDK中,我们调用方便,但是我们也可以选择自己调用封装各个平台官方SDK来实现。

       首先普及一下准备工作:1、要说明的是微信登录、qq登陆、微博登录,都分别要在微信开放平台(https://open.weixin.qq.com/)、腾讯开放平台(http://wiki.open.qq.com/wiki/%E9%A6%96%E9%A1%B5)、微浪微博开放平台(http://open.weibo.com/)申请账号,提交app信息审核通过才能调用。在申请过程中会让你填写自己项目的Android包名和Android签名(项目包名必须和注册的包名一致),这是必须的否则登录不成功。台会给你APPKEY,APPID等有用信息。签名工具开放平台都能下载,我为大家提供一个新浪微博的签名工具,下载地址:http://download.csdn.net/detail/gaolei1201/8576635。平

2、项目必须是签过名项目也就是发布版,顺便给大家介绍一下项目签名步骤:1.右键项目选择AndroidTools  2.选择Export Signed Application Package...3.点击Next  4.补充说明KeyCreation过程中,如图2信息填写由一条灰线分为上下两部分,上部分Alias、Password、Confirm、Validity(years)必填,下部分必须至少选填一项,如填写First and Last Name这项即可,否则回报如图2错误,尽量把信息填完整些。这次创建后以后此项目可重复利用此 keystore,不必每次都创建,看图1,点击Useing exiting keystore,然后选择创建过的keystore即可,然后finish。

 

 

 

 一、QQ开放平台,地址:http://open.qq.com/,下载一个demo,把自己APPID替换一下就行,然后把代码和jar包集成到你的项目中,需要在manifest.xml中声明相应的权限和两个Activity

                                                                                                                         


qq登录还是比较简单的。每次qq的login之后需要logout,如果不logout就会出现异常,大家可以试试.微信和微博登露是不需要logout,可连续多次login。有时会出现非官方授权请到应用宝下载,是因为运行时需要签名包,然后就正常了,但是腾讯贴心的提供一个测试账号即使不签名打包也行,还可以调试,就是登录你注册基本信息时的Q号,如图

 

 

 

二、微信开放平台,地址:https://open.weixin.qq.com/,下载一个demo运行一下,把自己的APPKEY替换一下,把代码和jar包集成到你的项目中,还需要在manifest.xml中声明相应的权限。但是官方demo,没有授权的界面,这是要闹哪样?需要自己加几行代码  

SendAuth.Req req = new SendAuth.Req();  req.scope = "snsapi_userinfo";  req.state = "wechat_sdk_demo_test";  api.sendReq(req);

主要代码

 

 

public class WXEntryActivity extends Activity implements IWXAPIEventHandler{private IWXAPI api;@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);setContentView(R.layout.flash_activity);api = WXAPIFactory.createWXAPI(this, Property.wxLoginInfo.getAppid(), false);api.handleIntent(getIntent(), this);}@Overridepublic void onReq(BaseReq arg0) {// TODO Auto-generated method stub}@Overridepublic void onResp(BaseResp resp) {Bundle bundle = new Bundle();switch (resp.errCode) {case BaseResp.ErrCode.ERR_OK://可用以下两种方法获得code//resp.toBundle(bundle);//Resp sp = new Resp(bundle);//String code = sp.code;//或者String code = ((SendAuth.Resp) resp).code;}}

下面还有关键的一步是如何通过code获取openId和accessToken。可访问此地址:"https://api.weixin.qq.com/sns/oauth2/access_token?" +
"appid="+Constant.WEIXIN_APP_ID(即自己的APPID)+"&secret="+Constant.WEIXIN_APP_SECRET(即自己的APPSECRET)+"&code="+code(即获取到的code)+"&grant_type=authorization_code";  返回的json字符串包括openId和accessToken。

注意:上面是获取code。现在最新的官方jar包好像不支持获得code了。直接就能得到token,省略了获取code 这一步。所以方法不变,大家取的时候直接resp.token就行了。不用再去取code了。但是,但是,这样直接拿到token了好像按照官方文档上的方法就不能获得openid了。自己找不到办法也找不到相关资料,反正是jar包更新了但是文档还没更新,大家弄不成功的话可以先用旧的jar和上面获取code的方法。点击下载旧版jar包

 

 

最需要需要注意,例如我的apk,包名(也就是AndroidManifest.xml中的包名)是com.kingdowin.gosu,你项目中必须有一个包名是com.kingdowin.gosu.wxapi,下面有一个类是WXEntryActivity.java,里面写登录微信的代码,否则就获取不到用户信息,记好是必须。如图

 

我就是没有在意才导致浪费了很长时间也没调试成功,和友盟的是一样的,是不是很变态啊,把我本来的包名和类名全都改了,没办法呀!但是也可以有对应解决方法

1、用<activity-alias/>让配置WXEntryActivity更方便 

2、

public class WXEntryActivity extends WXCallbackActivity {}
 

三、微博开放平台,地址:http://open.weibo.com/。下载个demo替换成自己的APPKEY,然后替换一下自己的,把代码和jar包集成到你的项目中,在manifest.xml中加入相应的权限和这个activity

        

 

说起来也是一肚子苦水要倒啊。妈的,开始下载一个官方demo一切都配置好了,还是报 sso package or sign error,抱头苦思不得其解,后来经过网上查阅资料和分析,可能是下载了一个老版本,有许多人反映老版本会一直报此错误。后来经过自己一番研究和实验,发现了这个地址上的demo还是靠谱的,https://github.com/sinaweibosdk/weibo_android_sdk,立马生效,但是遗憾的是无论如何也不能调用微博客户端登录,到授权页面后直接闪退(和友盟的情况一样),获取不到用户信息,无奈呀,最后只是调用网页版登录可行放在了项目中,有经验的朋友可以告知一下啊,还有个经常报的错就是 redirect_uri_dismatch,那是因为你代码Constant中的回调地址和你在开放平台中注册的地址不一样,一般都写成REDIRECT_URL = "https://api.weibo.com/oauth2/default.html";就行!

 

 效果图:

 第三方登录做好之后,分享就简单了,可访问下篇文章:Android 第三方(qq、微信、微博等)分享和登录

 

                                   源码地址,点击下载......

更多相关文章

  1. Android官方技术文档翻译——IntelliJ 项目迁移
  2. Android如何app优雅退出(项目必用)
  3. AndroidStudio使用Git发布与更新,同步,关联github
  4. Android(安卓)有关java.lang.NoClassDefFoundError
  5. Android(安卓)MTK平台修改开关机动画和开机logo【转】
  6. Eclipse新建Android项目报错解决方案详细汇总
  7. Gerrit跨平台合并提交
  8. Android(安卓)Studio导入和删除模块
  9. 【Android(安卓)Studio探索之路系列】之五:Android(安卓)Studio项

随机推荐

  1. android surfaceView 概述
  2. Android实现3个圆圈的动画
  3. Android简易注解View(java反射实现)
  4. android解析json小例子
  5. AndroidManifest.xml之 element详解
  6. android讲义9之向电话本进行批处理的插入
  7. cocos2d-x环境搭建 for eclipse
  8. Android 原生开发、H5、React-Native开发
  9. [实战示例] 带您深入探讨 Android 传感器
  10. Android一个textview显示多段文本不同颜