@

本文目的:“ 实现一套易于使用、维护的第三方登录和分享模块”

我们开发App有时为了吸引用户,会引入三方的授权登录降低用户的注册和登录操作,同时会根据业务需求引入三方的分享服务。目前可用的第三方授权登录和分享有很多,国内比较常用的有微信、QQ、支付宝、微博等,一般我们会尽可能的同时支持多种三方功能,因此我们在开发中,需要将多种第三方的登录和分享功能组合在一起,形成统一的数据和接口,方便以后的维护。

1 流程

第三方登录和分享的流程相对来说比较简单,不同的第三方登录流程可能略有区别,但整体流程差别不大。以下是具体流程:

登录流程

1)用户在app中点击第三方登录的按钮(微信,或支付宝),app调用相应的第三方sdk进行授权;

2)三方sdk一般会打开自己的app或网页(没安装app的情况下)进行登录授权;

3)授权成功后,第三方sdk会将access_token等信息回调给app,app拿着access_token在请求用户信息等其他接口;

4)app拿到用户数据后,再向自己的服务器进行用户登录或注册。

分享流程

分享的流程比较简单,一般集成sdk后,调用第三方sdk的分享接口,将数据传递给sdk,sdk会打开自己的app进行分享操作。

2 设计与实现

首先,方便方便调用,可以这样设计登录测试用例:1)创建对象,2)调用登录方法,3)登录成功接收用户信息,失败则返回错误信息。

//微信登录
new WeixinLogin().login(new Listener(){
void onSuccess(userInfo data){}
void onFailure(String msg){}
void onCancel(){}
})
//QQ登录
new QQLogin().login(new Listener(){
void onSuccess(userInfo data){}
void onFailure(String msg){}
void onCancel(){}
})

分析这个测试用例,我们发现 WeixinLogin,QQLogin 都是带有 login(listener) 方法的对象,因此我们需要2个接口:

//登录接口
interface SocaillLoginInterface {
//登录,参数为回调接口
void login(SocaillLoginListener listener);
} //登录回调接口
interface SocaillLoginListener {
//成功,SocialLoginUserInfo为登录用户信息,根据根据业务需要一般包含uid,名称,性别,头像等。
void onSuccess(SocialLoginUserInfo userInfo);
//失败
void onFailure(String msg);
//取消
void onCancel();
}

接下来我们就需要分别创建微信登录,qq登录,支付宝登录的实现类,这些类都从接口 SocaillLoginInterface 继承:

class WeixinLogin implements SocaillLoginInterface {
public WeixinLogin(Activity activity){
}
void login(SocaillLoginListener listener){
}
}
class QQLogin implements SocaillLoginInterface {
public QQLogin(Activity activity){
}
void login(SocaillLoginListener listener){
}
}

具体的登录细节就不写了,各开放平台基本都有文档和demo。

实现这些细节以后我们就可以使用开始的测试用例来测试代码了。

3 优化

基于以上实现,我们基本可以实现了登录接口的统一调用,但是我们在实际开发中发现,在登录的地方我们需要引用 WeixinLogin,QQLogin 这些类,假如某一天qq登录的逻辑需要变更,我们要增加对象QQv2Login,这时引用 QQLogin 的地方都要修改为 QQv2Login,这就增加了代码的维护难度。

因此我们是进一步封装:

public class SocaillLoginBuilder{
SocaillLoginInterface weixin(Activity activity){
return new WeixinLogin(activity);
}
SocaillLoginInterface qq(Activity activity){
return new QQLogin(activity);
}
}

修改调用代码:

SocaillLoginBuilder.weixin(act).login(
new SocaillLoginListener(){
void onSuccess(SocialLoginUserInfo data){
}
void onFailure(String msg){
}
void onCancel(){
}
}
);

这样优化以后,每当有新实现类需要替换旧实现类的时候,只需要修改 SocaillLoginBuilder 类中的代码即可,调用方则不用关心具体是哪种实现。

下面用类图总结一下:

注:实际项目中我们使用了友盟社会化sdk,因此基于微信,微博,QQ的登录中间增加了抽象类 BaseUmengLogin。

第三方分享实现也是一样的思路,类图如下:

最后,不管用什么样的方式,能做到低耦合,易维护,易使用,就是好的设计。

END


本文的技术设计和实现都是基于作者工作中的经验总结,如有错误,请留言指正,谢谢。

App中第三方登录和分享模块的实现的更多相关文章

  1. iOS--通过MOB平台实现第三方登录与分享

     适合刚开始接触第三方登录与分享的IOS小白!! 这两天看了一下有关IOS第三方登录与分享的一些知识,发现在QQ开放平台与微信开放平台实现这些功能很繁琐,不容易实现,在导师的推荐下,找到了这样一个平台 ...

  2. 第四百零四节,python网站第三方登录,social-auth-app-django模块,

    第四百零四节,python网站第三方登录,social-auth-app-django模块, social-auth-app-django模块是专门用于Django的第三方登录OAuth2协议模块 目 ...

  3. 微信公众号与APP微信第三方登录账号打通

    一个项目同时开发了APP和微信服务号,需要做到APP和微信服务号的账号互通同步,也就是说一个账号在2个地方都可以用,当然这个前提是保证你公司自己的服务器的数据库用的是同一套. 为保证用户数据的唯一性, ...

  4. Android记录16-友盟第三方登录、分享实现

    Android开发记录16-友盟第三方登录.分享实现 2014年博客之星,投票地址username=wwj_748#content" style="font-family: Kai ...

  5. android使用友盟实现第三方登录、分享以及微信回调无反应问题解决办法

    这里介绍微信和新浪登录.微信登录和新浪登录都需要申请第三方账号.可以参考官方文档http://dev.umeng.com/social/android/operation#2还是很清晰的. 新浪微博开 ...

  6. iOS YSAuth 第三方登录及分享

    概述 在很多时候,我们使用的都是第三方插件来处理登录与分享,比如使用友盟.但要是我们需要自己写一套自己的登录.分享.支付的时候,就可以使用YSAuth这个类库. github:https://gith ...

  7. iOS开发---集成ShareSDK实现第三方登录、分享、关注等功能。

    (1)官方下载ShareSDK IOS 2.9.6,地址:http://sharesdk.mob.com/Download (2)根据实际情况,引入相关的库,参考官方文档. (3)在项目的AppDel ...

  8. IOS项目集成ShareSDK实现第三方登录、分享、关注等功能。

    (1)官方下载ShareSDK iOS 2.8.8,地址:http://sharesdk.cn/ (2)根据实际情况,引入相关的库,参考官方文档. (3)在项目的AppDelegate中一般情况下有三 ...

  9. IOS项目集成ShareSDK实现第三方登录、分享、关注等功能(备用)

    (1)官方下载ShareSDK iOS 2.8.8,地址:http://sharesdk.cn/ (2)根据实际情况,引入相关的库,参考官方文档. (3)在项目的AppDelegate中一般情况下有三 ...

  10. iOS:IOS项目集成ShareSDK实现第三方登录、分享、关注等功能。

    原文链接:http://blog.csdn.net/daleiwang/article/details/34081231 (3)在项目的AppDelegate中一般情况下有三个操作,第一是注册Shar ...

随机推荐

  1. Angular Material 18+ 高级教程 – Custom Themes for Material Design 2 (自定义主题 Material 2)

    v18 更新重要说明 从 Angular Material v18 开始,默认使用的是 Material 3 Design (简称 M3),本篇教的是旧版本的 Material 2 Design (简 ...

  2. Apache-Shiro <=1.2.4 反序列化漏洞 (代码审计)

    一.Apache Shiro 简介: Apache Shiro提供了认证.授权.加密和会话管理功能,将复杂的问题隐藏起来,提供清晰直观的API使开发者可以很轻松地开发自己的程序安全代码.并且在实现此目 ...

  3. Vue3——环境变量的配置

    vue3环境变量的配置 开发环境(development) 测试环境(testing) 生产环境(production) 项目根目录分别添加 开发.生产和测试环境的文件! .env.developme ...

  4. Sketch Measure切图插件无法导出标注 (换插件绕过解决)

    环境 MacOS 10.15+ sketch版本 69.2 插件版本 2.8.1 遇到的问题 导出标注卡死 更新版本无解,到插件的github issue中找到解决方法 使用MeaXure插件,git ...

  5. Kubernetes Pod生命周期(十七)

    前面我们已经了解了 Pod 的设计原理,接下来我们来了解下 Pod 的生命周期.下图展示了一个 Pod 的完整生命周期过程,其中包含 Init Container.Pod Hook.健康检查 三个主要 ...

  6. nexus 部署与设置

    安装nexus df -h 先查看目录磁盘空间,我安装的版本占用了四个G 空间,目录文件空间不够导致启动失败 上传 nexus 压缩包,并解压 查询 8081 端口号是否被占用 sudo netsta ...

  7. C#/.NET/.NET Core开发实战教程集

    DotNetGuide介绍 DotNetGuide是一个专注于C#/.NET/.NET Core学习.工作.面试指南的GitHub知识库,该知识库在GitHub中Star数已突破6.5k+当然这离不开 ...

  8. CSP 联训 3

    好吧,又倒数了,就签了个 T2,100 pts. T1 我把相同颜色的存起来,每种颜色找出枚举选哪两个座位不合法的矩阵的左上和右下,如果找到的矩阵左下和右上也相同,则这个矩阵确实不合法,减去,但判断左 ...

  9. 高通BoostFramework概要介绍

    概要介绍 为了保证Android系统的顺滑体验,各个厂家都有针对性的对Android系统做了性能优化的方案.高通也基于AOSP开发了一套性能优化框架,本文叫做BoostFramework.本文将介绍下 ...

  10. 配置 kali linux 的 apt (包管理工具) ,换成国内源

    1. 查看 apt 的源 输入命令: vim /etc/apt/sources.list 修改之后: 快捷键 A 进入编辑模式 : ESC 键 然后 输入 "  :wq  "  就 ...