场景简介
- 由于目前SDK免密接口是同步的,给用户返回成功时, 只是表示当前SDK的满足可以免密的条件, 真正免密认证是SDK内部异步发起的, 部分集成开发者希望获取到SDK内部免密成功或失败的事件以便给出自定义的交互提示
- 当前认证成功后, 部分集成开发者希望获取到SDK和代理服务器的连接/断开情况, 以便给出自定义的交互提示
基于以上两个需求, SDK提供了事件回调接口, 支持回调通知以下4类事件
1) 由于网络问题导致的内部免密失败事件, 该事件发生时内部还是会一直重试免密直到成功
2) 内部免密成功事件
3) 与代理服务器断开连接事件
4) 与代理服务器连接成功事件
前置步骤
在实际集成之前,我们要确保已经进行过开发准备
集成步骤
1、实现用户名密码主认证
参考典型场景用户名密码认证
2、实现 SFGenericNotifDelegate协议
举例简单实现:
/**
* 该控制器实现了SFGenericNotificationDelegate协议
*/
@interface BasicSceneViewController () <SFAuthResultDelegate, SFGenericNotificationDelegate>
@end
@implementation BasicSceneViewController
/**
* 实现方法
*/
- (void)onNotify:(SFGenericNotification *)notification {
NSLog(@"onNotify:%ld, %@", (long)notification.notificationType, notification.msg);
// 处理免密内部成功的事件
if (notifContent.eventType == SFNotificaitonTypeTicketAuthFailed) {
NSLog(@"do something...");
// 处理免密内部失败的事件
} eles if (notifContent.eventType == SFNotificaitonTypeTicketAuthSuccess) {
NSLog(@"do other thing...");
}
}
在对应的类上实现协议要求的方法,即可监听上述的四个事件。
SFGenericNotificationInfo介绍
SFGenericNotificationInfo中包括三个属性,notificationType,msg,code。
@interface SFGenericNotification : NSObject
@property (nonatomic, assign) SFNotificationType notificationType;
@property (nonatomic, copy) NSString *msg; // 提示信息
@property (nonatomic, assign) int code; // 事件详细错误码
@end
msg是关于这个事件的一些描述信息,code是事件的错误码,notificationType是传递的事件类型,其定义如下(可以在sdk中自行查看):
typedef NS_ENUM(NSInteger, SFNotificationType) {
SFNotificaitonTypeTicketAuthFailed = 0, // 内部免密认证失败
SFNotificaitonTypeTicketAuthSuccess, // 内部免密成功
SFNotificaitonTypeDisconnectFromProxy, // 探测到与服务端断开连接
SFNotificaitonTypeConnectedToProxy, // 探测到和服务端恢复连接
};
需要监听哪个事件,则在回调的内容中选择处理对应的事件即可。