第三方登录实现及基本原理 |
您所在的位置:网站首页 › instagram安卓登录教程 › 第三方登录实现及基本原理 |
一、什么是第三方登录?
简单来讲,就是用户可以通过已有网站或应用的账号,登录我们自己的应用;如常见的QQ,微信,微博;效果是,如果不需要在我们应用再次注册账户,直接使用QQ,微信,微博等平台账户就可以登录我们的应用。 如图: 降低用户使用产品的门槛;因为,注册和登录,确实是一个比较麻烦的事情。 二、原理基本原理: 当用户点击第三方登录时,会跳转到第三方登录SDK内部;用户输入第三方登录用户名或密码,有些第三方登录平台,可以直接调用已经登录的账号,例如:QQ;完成第三方平台登录的;登录完成后,第三方平台,或者SDK会回调我们的应用,在回调的信息里面,可以拿到用户在第三方平台的OpenId,以及昵称,头像等信息。 详细流程如下: (A)用户打开客户端以后,客户端要求用户给予授权。 (B)用户同意给予客户端授权。 (C)客户端使用上一步获得的授权,向认证服务器申请令牌。 (D)认证服务器对客户端进行认证以后,确认无误,同意发放令牌。 (E)客户端使用令牌,向资源服务器申请获取资源。 (F)资源服务器确认令牌无误,同意向客户端开放资源 更仔细的原理学习,请参考下链,本文着重应用层面的实现流程 OAuth 2 深入介绍 OAuth 2 Simplified • Aaron Parecki 三、实现流程这一步,几乎是所有集成第三方服务需要的步骤。 根据不同的平台,不同的服务,提供的信息也不一样,可能需要提供,用户名称,应用类型,应用平台(iOS,Android,Web),BundleId等信息,以下用接入QQ登录服务为例讲解 1)进入qq开放者平台,接入应用应用 2)开始创建,进入创建页面,点击“创建应用”
注意:首次使用一般要认证身份,自行认证一下就行
3)接下来填写安装包名及签名信息即可,提交后等待审核,此时也=就已经可以调用登录接口,只是有一些限制,通过审核后就完全可调用,一般3天内 4)审核通过后如图:
5)点击查看,获取APP ID和 APP Key:
这两个信息在集成SDK时要用
从上面的5)可获取 3、客户端集成SDK这里使用的是ShareSDK,因为: 聚合了很多第三方平台,包括QQ,微信,微博,支付宝等; 可以实现分享,第三方登录等功能。 对外提供统一的登录,分享接口;他屏蔽了不同SDK之间的API差异,这里使用它就可以更加轻松的集成QQ,微信,微博,支付宝等平台了。虽然前面在QQ创建了应用,但由于用到了ShareSDK,他也是一个第三方服务,所以也要创建应用,同样最终是要获取到AppKey这样的信息,过程和QQ差不多,这里不再赘述 SharedSDK执行时序图(底层原理还是上面上面说的OAuth2):下述代码以点击登录按钮,实现三方QQ登录为例: public void onQQLoginClick() { //初始化具体的平台 Platform platform = ShareSDK.getPlatform(QQ.NAME); //设置false表示使用SSO授权方式 platform.SSOSetting(false); //回调信息 //可以在这里获取基本的授权返回的信息 platform.setPlatformActionListener(new PlatformActionListener() { /** * 登录成功了 * @param platform * @param i * @param hashMap */ @Override public void onComplete(Platform platform, int i, HashMap hashMap) { //登录成功了 //就可以获取到昵称,头像,OpenId //该方法回调不是在主线程 //从数据库获取信息 //也可以通过user参数获取 PlatformDb db = platform.getDb(); data = new User(); PlatformDb db = platform.getDb(); String nickname = db.getUserName(); String avatar = db.getUserIcon(); String openId = db.getUserId(); LogUtil.d(TAG, "other login success:" + nickname + "," + avatar + "," + openId + "," + HandlerUtil.isMainThread()); } /** * 登录失败了 * @param platform * @param i * @param throwable */ @Override public void onError(Platform platform, int i, Throwable throwable) { LogUtil.d(TAG, "other login error:" + throwable.getLocalizedMessage() + "," + HandlerUtil.isMainThread()); } /** * 取消登录了 * @param platform * @param i */ @Override public void onCancel(Platform platform, int i) { LogUtil.d(TAG, "other login cancel:" + i + "," + HandlerUtil.isMainThread()); } }); //authorize与showUser单独调用一个即可 //授权并获取用户信息 platform.showUser(null); } 复制代码 这样,就已经达到三方登录的目的了,咱们可以根据拿到的三方应用应用信息,展示到我们对应的客户端上 其他接口说明:大家可自行根据业务场景去细化,融会贯通 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |