Android 用官方SDK实现第三方(qq、微信、微博)登录

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://gaolei.blog.csdn.net/article/details/44680291

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

         可下载体验本人在项目中的实战运用:http://zhushou.360.cn/detail/index/soft_id/2749071?recrefer=SE_D_gosuhttps://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中设置  

<activity-alias

android:name="${applicationId}.wxapi.WXEntryActivity"

android:exported="true"

android:targetActivity="自己的Activity" />

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

      

                 其实友盟也是把各个平台官方的登录和分享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

 <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="tencent222222" />
                <!-- 100380359 100381104 222222 -->
            </intent-filter>
        </activity>
        <activity
            android:name="com.tencent.connect.common.AssistActivity"
            android:configChanges="orientation|keyboardHidden"
            android:screenOrientation="portrait"
            android:theme="@android:style/Theme.Translucent.NoTitleBar" />


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;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		setContentView(R.layout.flash_activity);
		<span style="color:#3366ff;">api = WXAPIFactory.createWXAPI(this, Property.wxLoginInfo.getAppid(), false);
		api.handleIntent(getIntent(), this);</span>
	}
	
	@Override
	public void onReq(BaseReq arg0) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public 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

<activity
            android:name="com.sina.weibo.sdk.component.WeiboSdkBrowser"
            android:configChanges="keyboardHidden|orientation"
            android:exported="false"
            android:windowSoftInputMode="adjustResize" >
        </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、微信、微博等)分享和登录

 

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

展开阅读全文

没有更多推荐了,返回首页