Dreamer2q Blog
见到,不如不见
Dreamer2q

Code is cheap, talk is expensive

64日志

Flutter 集成第三方登录

创建于 2021-02-09 共 1368 字,阅读约 5 分钟 更新于 21-02-09 17:08
浏览 23评论 0


许多App,大的小的,总是爱搞一个用户系统,如果是一个网站,那就更常见了。让你注册一个用户,不注册就许多功能无法使用,人们对此习以为常。啊?要注册, 那就注册呗,没什么大不了的。注册又需要填写各种信息,嘿嘿,填吧,想着都写到这里了,就继续填下去吧。填了还不算完,还有的要验证你的手机号,邮箱号,嘿嘿,各种验证一通后,你的脾气估计都没有了。如果是搞什么活动,说不定还要绑定银行卡,防止薅羊毛。注册了那木多家平台,最后搞得自己忘记密码设置多少了,久而久之,为了图方便,就只设置成同一个密码,最多也就在密码前、后做一下改变;如果突然忘记密码了,又得将密码每一个组合尝试一遍。这真的是很抓狂的一件事情。


没有办法,这似乎是一种时代的潮流,人们也对此习以为常。然而用户认证登录这个需求无法避免,如果是自己做未免又得花费很多功夫,这个时候就有第三方提供了登录/认证的功能,例如QQ,微信等,当然像huawei, xiaomi也提供了它们自家的认证/登录系统。只不过人人都有一个QQ, 但不是人人都有一个huawei或者xiaomi。


OAuth2


虽然平台各不相同,但是集成的标准都是一样的,只不过实现上略有区别罢了。


这里引用了oauth2介绍

OAuth 2.0 is the industry-standard protocol for authorization. OAuth 2.0 focuses on client developer simplicity while providing specific authorization flows for web applications, desktop applications, mobile phones, and living room devices. This specification and its extensions are being developed within the IETF OAuth Working Group.


OAuth2学习参考


总的来说OAuth2有以下四种授权方式

  • 授权码(code)
  • 隐藏式(implicit)
  • 密码式(password)
  • 凭证式(client credentials)


第一种授权码(code)模式是一般网站经常使用的模式,因为它的安全性最高,同时也是流程最复杂的一个。

而App接入的第三方登录一般是隐藏式(implicit)的,在这个模式下面用户可以直接拿到 ​access_token

省去了使用 ​code​ 换取令牌的步骤。例如,你使用QQ登录,你同意后授权后,即可立即拿到令牌,进而通过令牌调用用户信息。


至于其它的授权方式,使用场景并不是很多,这里不做过多介绍。


第三方登录用途


这里的用途主要取决于你有没有自己独立的认证系统

如果你有独立的认证系统,这个第三方认证很可能是为了获取更多的使用用户,通过第三方认证来简化登录/注册流程,进而提供更好的体验;但是要求你必须要有自己独立的后台,且完成相关的对接。


另一种情况是,你并没有一个用户认证系统,这时候使用第三方认证很可能只是需要它提供的认证授权以及用户信息,作为你开发的App一个feature。


据我所知,第一种的情况会占多数,既然都需要认证功能了,相比一个后台是少不了的;有了后台,用户系统自然也不会落下。


Flutter集成问题


一般而言,第三方登录都会提供安卓/iOS的SDK以供用户快速接入,但是不一定会有flutter的SDK。大如小米这样的厂商,我就没有发现小米登录相关的flutter版本SDK,反倒是华为提供了许多官网的Flutter版本SDK。


如果厂商没有直接提供,还有有第三方厂商提供大而全,即集成了多家认证/登录的SDK。这个时候你只需要这一个插件即可实现多个平台的登录功能。按照道理来说,像MOB这样专门做这里的厂商会比较靠谱,而实际情况不是很靠谱。光从他们文档来看,就更新的不够及时;Github看一下反倒不如个人开源的靠谱。开源作者一般还能回复你的issue,而mob居然叫你加一个企业QQ。


在尝试使用mob的sharesdk_plugin时,一直出现一个 ​appkey is illegal​ 的错误。我就很纳闷,我完全按照文档来集成的,但就是死活不能正常登录,而Demo又可以正常运行。后面经过我不断试错,终于发现 ​mobpush_plugin​ 会和 ​sharesdk_plugin​ 冲突,导致无法正常使用。如果禁用推送插件,登录即可使用。


我百思不得不解,无奈只能放弃了 ​sharesdk_plgugin​ 转而采用开源项目 ​tencent_kit​ 来实现QQ认证登录。