首页 > 其他分享 >App中第三方登录和分享模块的实现

App中第三方登录和分享模块的实现

时间:2024-11-13 19:08:51浏览次数:1  
标签:登录 app 第三方 void 模块 分享 App sdk

@

目录

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

我们开发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,第三方,void,模块,分享,App,sdk
From: https://www.cnblogs.com/shuijinglingsos/p/18544584

相关文章

  • rust学习八、包和模块
    总体上,也没有什么特别的地方,和其它语言比较起来。我们可以看懂熟悉的字眼:包括、模块、use、公共等等如果是英文,则需要知道crate、pub。本章节对应相关书籍的第七章节.一、一个rust可执行程序的大体结构就本章节而言,尚未接触到一个非常复杂的工程结构,据说有什么工作空间。不......
  • 用函数实现模块化程序设计四
    数组作为函数参数调用有参函数时,需要提供实参,实参可以是常量、变量或表达式数组元素的作用与变量相当,一般来说,凡是变量可以出现的地方,都可以用数组元素代替,因此,数组元素也可以用作函数实参,其用法与变量相同,向形参船体数组元素的值。此外,数组名也可以作实参和形参,传递的是数组第......
  • App Store上架4.3以后还可以通过吗?
    AppStore上架被拒4.3以后仍然有可能通过,但需要开发者对应用做出实质性的修改和优化,以下是一些提高通过率的方法:一:功能方面增加新功能:开发独特的、有创新性的功能模块,为用户提供新的价值和体验。例如,如果是一款笔记类应用,可以添加智能笔记整理、语音转文字笔记等功能,使其......
  • 通过微信测试公众号实现扫码登录
    目录通过微信测试公众号实现扫码登录一:效果展示:二:功能实现1:流程分析:2:准备工作:1:申请微信测试公众号2:内网穿透3:代码实现:通过微信测试公众号实现扫码登录一:效果展示:我们在扫描完二维码之后会自动跳转到公众号中,然后可以看到:二:功能实现1:流程分析:具体的流程就是......
  • CSC3150 memory-mapped files
    CSC3150-Instruction-A3:IntroductionThisassignmentusesxv6,asimpleandUnix-liketeachingoperatingsystem,astheplatformtoguideyouinimplementingthemmapandmunmpsystemcalls.Thesetwoareusedtosharememoryamongprocesesandtomapfil......
  • 【最新原创毕设】面向课堂教学的智能课堂点名系统+09531(免费领源码)可做计算机毕业设计
    摘要本文旨在设计和实现一个基于智能课堂点名系统的智能助手。随着高校招生规模的不断扩大和信息化技术的发展,为教师提供一款便捷、全面的点名系统具有重要意义。本系统通过整合校园各项服务资源和功能,旨在帮助教师和学生更好地适应智能课堂,提供全方位的指导和支持。本文......
  • (2024最新毕设合集)基于SpringBoot的广州糖水甜品店推荐系统-28495|可做计算机毕业设计J
    摘要随着人们生活水平的提高和饮食习惯的多样化,甜品在日常生活中扮演着越来越重要的角色。特别是在中国南方地区,甜品店和糖水店已经成为人们经常光顾的地方,而广州作为美食之都,拥有众多具有独特风味的糖水甜品店。然而,由于市场竞争激烈,消费者往往面临选择困难,需要花费大量时间......
  • 通过爬虫方式获取小红书授权登录的cookie的代码
    1、代码里的normal_sign.js代码是某书签名算法xs,xt的实现-CSDN博客里的;2、CookieUtil工具代码见抖音最新bd-ticket-guard-client-data逆向方法(2024年11月)-CSDN博客里的CookieUtil.py;importjsonimporttimeimportzlibfromurllib.parseimporturlparseimportexecj......
  • 高效稳定的校园管理系统源码,APP小程序H5三端源码交付支持二开
    校园系统源码的核心优势在于其高度的定制化和可扩展性。可以根据自己的实际需求,对源码进行二次开发,实现个性化的功能定制。同时,源码的模块化设计使得系统能够轻松应对未来需求的增长和变化,为你的长期发展提供了有力保障 。校园管理系统源码系统特点:1.基于TP6+Uni-app框架开......
  • C# 抛出异常代码应该避免使用 System.Exception或ApplicationException
    在.NET开发中,异常处理是确保程序健壮性和可靠性的关键部分。然而,许多开发者在编写代码时,可能会默认使用System.Exception或ApplicationException来抛出异常。这种做法虽然简单,但并不推荐。本文将探讨为什么应该避免使用这些通用异常,并提供更好的替代方案,以及如何结合这些最佳......