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

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

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,如果不存在,就去创建一个
    • 请求站点数据信息。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,390评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,821评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,632评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,170评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,033评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,098评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,511评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,204评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,479评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,572评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,341评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,213评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,576评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,893评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,171评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,486评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,676评论 2 335

推荐阅读更多精彩内容