iOS个推一键登录接入

924 阅读4分钟

前言

一键登录功能现在很多app都有,产品就选择了个推,为什么不选择其它平台呢。产品给了答案有2点,第一点,有1千条是免费的,费用和其它平台差不多;第二点,文档清晰,对比一下其它的,的确个推这方面做的更好,小小白都能简单接入,那我们就来看看吧。

一键登录

介绍

个验一键认证产品整合了三大运营商的网关认证能力,并且兼容iOS和Android的智能手机,做到了三大运营商网络打通、常见机型全覆盖的效果。“一键认证”产品简化了登录的流程,为用户首次登录APP提供了畅通无阻的通道,有效地减少了他们的等待时间,帮助他们迅速地建立起与APP的连接。

一键登录具备授权页面,APP开发者经用户授权后可获得号码,适用于注册、登录等场景;

接入于初始化

1.导入GYSDK

pod 'GYSDK'

2.在appdelegate初始化

// AppDelegate 
[GeYanSdk startWithAppId:kGyAppID withCallback:^(BOOL isSuccess, NSError *error, NSString *gyUid) { }];

这个的gyUid要保存一下,后面请求我们服务器的时候要用到。

流程接入

我们先看一下流程图,圈住的就是核心。其它的自己再详细看看就好。

20211217143034.jpg

核心点一共有3个,先附上文档链接:docs.getui.com/geyan/mobil…

预登录

直接在我们要跳转登录的页面进行预登录,当然也可以提前请求也行。

[GeYanSdk preGetToken:^(NSDictionary * _Nullable verifyDictionary) {
        
        if ([verifyDictionary[@"code"] isEqualToNumber: @30000]) {
            
            // 预登录成功
        
        }
 }];

作用:预登录操作用于提前判定当前网络环境是否适合使用一键登录。有xG网络链接且有网就会返回true。

进入授权页面

预登录成功,我们就可以点击一个入口,就跳转到授权页面,授权页面可以弹起一个框,也可以全屏,你也可以理解为登录页,记住这个页面VC不用我们alloc。

[GeYanSdk oneTapLogin:self withViewModel:[_gyAuthManger configCustomFullScreenModel] andCallback:^(NSDictionary * _Nullable verifyDictionary) {

        if ([verifyDictionary[@"code"] isEqualToNumber:@30000]) {

            // 点击一键登录返回,获取teken

        }
}];

作用:授权页面主要就是换取token,来请求我们服务器获取登录信息。

请求服务器获取登录信息

上一步我们已经换取token,这时候我们结合初始化的gyUid,传给我们呢后台就能获取到登录信息了。

怎么请求呢,这个要看后端返回接口是怎样的,到这里整个流程就基本完成了。

配置登录页面信息

有没有发现上两步,我们配置了[_gyAuthManger configCustomFullScreenModel] ,这里面包装了登录信息。返回的是GyAuthViewModel

20211217150858.jpg

全屏样式

也可以配置其它唤起样式。

authViewModel.pullAuthVCStyle = OLPullAuthVCStylePush;

导航栏

可以配置导航栏标题,导航栏背景颜色,返回按钮图片,返回按钮位置于大小。

authViewModel.naviTitle = [[NSAttributedString alloc] initWithString:@"登录"];

authViewModel.naviBgColor = [UIColor clearColor];

authViewModel.naviBackImage = [UIImage imageNamed:@"nav_bar_back_icon"];

OLRect backButtonRect = {0, 0, 5, 0, 0, 0, {40, 40}};

authViewModel.backButtonRect = backButtonRect;

这里面简单说下OLRect,前面3个是竖屏的到顶部距离,X轴距离,左边距离。接着3个是横屏的。最后大括号是大小。

appLogo

appLogo,设置图片。

logoRect,设置位置大小。

背景图片

backgroundImage,背景图片。

条款勾选

defaultCheckBoxState,默认为NO。

checkedImage,勾选的图片。

uncheckedImage,没有勾选的图片。

checkBoxSize,勾选的大小。

隐私条款

privacyTermsAttributes,隐私条款的样式。

termTextColor,隐私条款普通文字的颜色,例如'我同意'之类的文字。

additionalPrivacyTerms,额外条款信息。

auxiliaryPrivacyWords, 自定义文字内容。

hasQuotationMarkOnCarrierProtocol,是否有<<>>。

本机号码按钮

authButtonTitle,按钮内容,如'一键登录'。

authButtonCornerRadius,按钮圆角。

authButtonImages,按钮背景图片的3种样式。

authButtonRect,按钮的位置于大小。

认证服务文字

sloganRect,内容位置大小。

sloganTextColor,内容颜色。

sloganTextFont,内容字体大小。

本机号码

phoneNumFont,号码字体大小。

phoneNumRect,号码位置大小。

换号

switchButtonHidden,是否显示换号

自定义视图

这个才重点,如果我们还想加入自己的view,就要通过这个来实现了。

setCustomUIHandler

效果图

这里的换号和app图标下的文字就是自定义做的。

20211217152922.jpg

遇到的问题

补充一下遇到的问题,首次安装的app(删掉重装没用),会弹出网络授权,这时候我们初始化是会失败的,失败就意味着拿不到gyuid,这时候,用户授权后,调用预登录接口是没有问题的。

问题就来了,预登录没问题,我们跳到了一键登录,结果点击登录拿到token,要把gyuidtoken给我们后台接口,是不可能了。

解决方案:初始化还有一个超时的startWithAppId withTimeout的方法,我们可以在报10006网络请求异常的时候,多调用几次。还有在调用预登录时候,先判断gyuid是否为空,空就不用一键登录方式。

总结

整体上除了配置登录页需要消耗点时间,其它都是很快就能做好的。整体上看,文档的确都写的很清晰,甚至还有集成视频,的确是用心了。想当年集成某T的SDK,一把辛酸泪。

个推文档链接:docs.getui.com/geyan/elogi…