美文网首页
日志文档--网络鉴权顺序逻辑

日志文档--网络鉴权顺序逻辑

作者: 黑羽肃霜 | 来源:发表于2017-02-27 11:14 被阅读25次

百度地图打开时的鉴权问题

appdelegate中需要添加设定的授权。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    _mapManager = [[BMKMapManager alloc]init];
    // 如果要关注网络及授权验证事件,请设定     generalDelegate参数
    BOOL ret = [_mapManager start:BAIDU_KEY generalDelegate:self];
    if (!ret) {
        NSLog(@"manager start failed!");
    }
    // Add the navigation controller's view to the window and display.

    [self.window addSubview:navigationController.view];
    [self.window makeKeyAndVisible];
    return YES;
}

百度地图的sdk需要完成鉴权的操作。即为BOOL ret = [_mapManager start:BAIDU_KEY generalDelegate:self];,但是此时有一个代理需要完成鉴权的操作。如下:

#pragma mark 百度地图代理
-(void)onGetNetworkState:(int)iError {
    if (0 == iError)
        NSLog(@"联网成功");
    else
        NSLog(@"onGetNetworkState %d",iError);
}
-(void)onGetPermissionState:(int)iError {
    if (0 == iError)
        NSLog(@"授权成功");
    else
        NSLog(@"onGetPermissionState %d",iError);
}
  • 完成鉴权的操作代理回调,是异步的。当我们启动的rootViewController时,需要添加其他的百度地图的操作,但是这些操作,有可能是在鉴权完成之前就发起的。

这就造成了,我发起实际的命令操作时,鉴权还没有完成

  • 同时,上面代码中的两个代理本身也是异步的。只有当同时满足“联网成功”“授权成功”时,才通知对应的viewcontroller去开启代理和操作。解决的设想是用一个KVO操作,对一个数组进行监听。两个代理都对这个数组赋值。当数组内有两个元素时,通知rootViewController完成对应的操作。

逻辑梳理

鉴权和网络数据申请是分不开的。
整体的实现思路如下:

  • 先进行鉴权
    • 用一个可变数组,存放“联网”“鉴权”.并添加KVO观察数据的变化。如上所述,数组的两个元素赋值是在代理中赋值。
    • 当联网和鉴权都被赋值(成功或失败均可)时,KVO进入观察着的回调,调用自身的block,执行下一步操作。
  • 鉴权成功时才去进行下一步的数据申请。执行的是上一步的block.需要注意的是,block的内容则是在页面加载的时候,从viewdidload去设置:如下:
    app.accessCompleteBlk = ^(BOOL result){
        if (result == YES) {
            [self setBaiduRelatedDelegate];
            [[DataUtil managerCenter] updateAllInfoWithSucBlk:^{
                [[BaiduDistrictTool shareInstance] generateOverlaysFromPlist];
                self.isAccess = YES;
                [[NSNotificationCenter defaultCenter] postNotificationName:GUIDE_MODE_RADIO
                                                                    object:[NSNumber numberWithInt:NEARBY_GUIDE_MODE]];
                [self dismissTip];
            } failBlk:^(NSError *err) {
                XLog(@"信息请求失败,错误信息 = %@",err.domain);
                [self dismissTip];
                HUD_DATA_WARNING;
            }];
        } else {
            [self dismissTip];
            HUD_ACCESS_WARNING;
        }
    };

鉴权成功后,执行以下逻辑:

-(void)updateAllInfoWithSucBlk:(SucBlk)sucBlk
                       failBlk:(FailBlk)failBlk {
    plistManager *manager = [[plistManager alloc] initWithPlistName:PLIST_NAME];
    //1.1.从沙盒中取出行政区域边界信息plist用于绘制。如果plist不存在,就创建一个
    if ([manager ifPlistExist] == NO)
        [manager createPlist];
    //1.2读取这个plist文件
    NSDictionary *dict = [manager readPlist];
    if (dict.count == 0) {
        [[BaiduDistrictTool shareInstance] updateDistrictPlistWithSuccessBlk:^{
            //调试用,读plist
            NSDictionary *dict = [manager readPlist];
            XLog(@"空的plist重新获取数据后,读到的plist = %@",dict);

            // 2.1 到这一步,说明已读到正确的信息,继续请求站点信息
            [[StationInfo shareInstance] updateAllStationsInfoWithSuccessBlk:sucBlk
                                                                     FailBlk:failBlk];
        } FailBlk:failBlk];
    } else {// 3.2 已经读到正确的信息,继续获取站点信息
        [[StationInfo shareInstance] updateAllStationsInfoWithSuccessBlk:sucBlk
                                                                 FailBlk:failBlk];
    }
}
  • 设置百度相关的代理
  • 设置了一个单例,升级数据。结果中套用了两个block,以便把握数据请求的顺序和结果。
    • 先升级区域边界,查看本地沙盒中是否有一个对应的plist,如果不存在,就去创建一个
    • 请求站点数据信息。

相关文章

  • 日志文档--网络鉴权顺序逻辑

    百度地图打开时的鉴权问题 在appdelegate中需要添加设定的授权。 百度地图的sdk需要完成鉴权的操作。即为...

  • 开放平台中的鉴权的实现

    参看文档:开放平台中的鉴权的实现

  • 离线词典

    鉴权逻辑 给特定的apikey授权后,才可使用。 ①没有鉴权成功的apikey ②已授权但过有效期的apikey ...

  • WebSocket连接鉴权的过程

    鉴权授权方案 根据WebSocket文档上的说明,鉴权授权是需要自己实现。我们自己实现的流程大概是,在每次连接前,...

  • zk单机开启sasl认证

    1.需求 dubbo连接zk,默认是没开鉴权的,本次的需求是dubbo与zk开启鉴权,所以研究了一些官方文档,给出...

  • Redo相关参数

    redo和binlog区别 redo是物理逻辑日志,binlog是逻辑日志redo是发起时间顺序存储,而binlo...

  • GateWay概述

    网关能干嘛? 反向代理鉴权流量控制熔断日志监控。。。。 Spring Cloud Gateway[https://...

  • 谈谈鉴权与授权

    目录 鉴权场景实现 授权场景实现 鉴权 鉴权(authentication): 你是谁 场景 实现 关于鉴权的示例...

  • hadoop鉴权逻辑改造

    背景:自研的数据安全管理系统中为用户分配的hive、hdfs权限最终需要在访问hadoop时生效,借鉴ranger...

  • 常见的鉴权方式,你真的不想知道吗

    主要内容 鉴权的作用 几种常见的鉴权 各个鉴权的适用场景 一、什么是鉴权 鉴权是指验证用户是否有权利访问系统的行为...

网友评论

      本文标题:日志文档--网络鉴权顺序逻辑

      本文链接:https://www.haomeiwen.com/subject/bqkzwttx.html