文档章节

iOS切换备用服务器/备用域名

hao1208hao
 hao1208hao
发布于 2016/07/28 10:46
字数 583
阅读 17
收藏 0
点赞 0
评论 0

        如果正在使用的APP突然间不能正常访问了,,遇到这种情况,该怎么办呢,做为一个开发菜鸟,这个需求其实公司的技术大牛已经考虑到了,并已经给出 了解决方案,但领导觉得解决的还不是太好,所以我们重新实现了下,逻辑 :每次发网络请求都先验证下主域名服务器是否可用,如果可用则请求主域名服务器, 如果不可用,则请求备用服务器。下面贴出代码

1、导入Reachability

​//引用 Reachability  检测设备是否可以正常请求网络

2、自己定义工具类  Tool.h

#import

#import "Reachability.h"

typedefvoid(^getValidDomainBlock)(NSString *);

@interface Tool : NSObject

//传入2个参数   第一个参数表示默认请求的地址  第二个参数表示为备用请求地址

+(void)checkValidDomain:(NSString*)mainDomainandSpareDomain:(NSString*)backupDomainCompleteBlock:(getValidDomainBlock)block;

@end

3、Tool类实现 Tool.m          //如果url 没有http/https   默认拼接 https://

#import "Tool.h"

@implementation Tool

+(void)checkValidDomain:(NSString*)mainDomainandSpareDomain:(NSString*)backupDomainCompleteBlock:(getValidDomainBlock)block

{

   if (![self checkNetWorkState]) {

       NSLog(@"网络异常,请检查您的网络设置!");

       return;

   }

   if (![mainDomain containsString:@"http"]){

       mainDomain =[NSStringstringWithFormat:@"https://%@",mainDomain];

   }

   if (![backupDomain containsString:@"http"]) {

       backupDomain =[NSStringstringWithFormat:@"https://%@",backupDomain];

   }

   if (mainDomain.length&& backupDomain.length) {

       dispatch_async(dispatch_get_global_queue(0,0), ^{

          if([selfcheckDomain IsValid:mainDomain]){

             //主域名可用

             if (block) {

                 block(mainDomain);

             }

          }else{

             //主域名不可用检测从域名

             if ([selfcheckDomain IsValid:backupDomain]){

                 //从域名可用

                 if (block) {

                    block(backupDomain);

                 }

             }else{

                 //从域名不可用结果为空

                 if (block) {

                    block(@"");

                 }

             }

          }

       });      

   }else{

       //param invalid

       NSLog(@"paraminvalid");

   }

}

+(BOOL)checkDomainIsValid:(NSString*)domainStr

{

   NSURL *url =[NSURLURLWithString:domainStr];

   NSURLRequest *request =[NSURLRequestrequestWithURL:urlcachePolicy:NSURLRequestReloadIgnoringCacheDatatimeoutInterval:30.0];

   NSHTTPURLResponse *response = nil;

   NSError *error =nil;

   [NSURLConnectionsendSynchronousRequest:requestreturningResponse:&response error:&error];

   if (response.statusCode== 200) {

       returnYES;

   }else{

       returnNO;

   }

}

#pragma mark-监听网络回调

//检测当前网络是否可用

+(BOOL)checkNetWorkState{

   Reachability* r =[Reachability reachabilityWithHostname:@"www.baidu.com"];

   switch ([r currentReachabilityStatus]) {

       caseNotReachable:

          //没有网络连接

          returnNO;

          break;

       caseReachableViaWWAN:

          //使用3G网络

          returnYES;

          break;

       caseReachableViaWiFi:

          //使用WiFi网络

          returnYES;

          break;

   }

   

   returnYES;

}

@end

调用示例

NSString* url= @"google.com.hk";

​ NSString* url2 = @"www.baidu.com";

  [Tool checkValidDomain:url andSpareDomain:url2 CompleteBlock:^(NSString *validDomain) {

       if (validDomain.length) {

          NSLog(@"*****当前可使用的url是*********=%@",validDomain);

       }else{

          NSLog(@"请传入正确的域名后再试!");

       }

   }];

以上仅供参考,菜鸟第一次写,如果有什么问题,请大家见谅。当然有更好的方案,请各位不吝赐教。

© 著作权归作者所有

共有 人打赏支持
hao1208hao
粉丝 0
博文 3
码字总数 2237
作品 0
石家庄
程序员
【AR】开始使用Vuforia开发iOS(2)

原 设置iOS开发环境 安装Vuforia iOS SDK 如何安装Vuforia iOS示例 编译并运行Vuforia iOS示例 支持iOS金属 iOS 64位迁移 设置iOS开发环境 适用于iOS的Vuforia引擎目前支持运行iOS 9及更高版...

lichong951 ⋅ 06/11 ⋅ 0

又拍云Prism CDN 超低价 低延时 超强兼容的P2P-CDN

又拍云Prism CDN 超低价 低延时 超强兼容的P2P-CDN 2018-05-15 10:26编辑: 枣泥布丁分类:业界动态来源:https://www.upyun.com/products CDN又拍云 招聘信息: C++工程师 Cocos2d-x游戏客户...

枣泥布丁 ⋅ 05/15 ⋅ 0

iOS-Security 苹果安全白皮书都讲了些啥?

2017.03.27 原文地址 使用Google 按段落翻译(上传文档的不太准),通读一遍后去掉设备或网络的超专业术语,也算是筛选掉对开发者意义不大的信息吧! 苹果设计的 iOS 平台向来是以安全为核心...

si1ence ⋅ 2017/12/14 ⋅ 0

iOS高仿微信、仪表盘、图片标注图片滤镜、高斯模糊、上拉加载、下拉刷新等源码

iOS精选源码 Swift-图片画框标注(http://www.code4app.com/thread-29884-1-1.html) Swift版的上拉加载, 下拉刷新控件(一句话集成, 超级易用)(http://www.code4app.com/thread-29885-1-1.html...

sunnyaigd ⋅ 05/22 ⋅ 0

IOS12开发者预览版第二版使用评测

     手头有一部iPhone 6s Plus,因为之前看同学和朋友们升到IOS 11后手机变得非常卡顿所以没有升级。最近偶然看到IOS 12针对旧机型做了性能优化,号称提升70%相机打开速度、50%键盘显示...

张旭乾 ⋅ 前天 ⋅ 0

2018 一份"有点难"的iOS面试题(5年iOS开发)

序言: 之前一时兴致在本站上出过一份iOS的中级面试题,引起一些关注,不少同学表示对”隐藏关卡“感兴趣。升级版iOS面试题来了,目测难倒90%iOS程序员,目测一大波程序员撸着袖子在靠近。 ...

原来是泽镜啊 ⋅ 05/26 ⋅ 0

HDU ~ 6297 ~ CCPC直播 (模拟,输出格式控制)

思路:模拟就行了,注意Running和RTE的开头字母一样。 iomanip是I/O流控制头文件,就像printf的格式化输出一样。 以下是一些常用的: dec 置基数为10 相当于"%d" hex 置基数为16 相当于"%X" oc...

zscdst ⋅ 05/29 ⋅ 0

目前有成熟的App代码翻译技术吗?

大家好: 本人多年技术老鸟,现有抛出一个思考。针对目前市面上的移动互联网项目(主要指客户端)类型,无非以下几种主要类型: 原生App: iOS/Android H5响应式 H5套壳(PhoneGap/微信小程序/国...

瑾少 ⋅ 04/14 ⋅ 0

你见过最目瞪狗呆的bug是什么?

你见过最目瞪狗呆的bug是什么? 2018-05-28 14:01编辑: garace分类:程序人生来源:代码湾 bug网上注册刘伟楠 招聘信息: C++工程师 Cocos2d-x游戏客户端开发 iOS开发工程师 京东招聘iOS开发...

garace ⋅ 05/28 ⋅ 0

UISegmentedControl segmentedControl

一、简介 <UIControl-->UIView-->UIResponder-->NSObject 格式为 1-->初始化(作用) typedef NS_OPTIONS(NSUInteger, UIDataDetectorTypes) { UIDataDetector......

无邪8 ⋅ 05/22 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Linux中的端口大全

1 被LANA定义的端口 端口 名称 描述 1 tcpmux TCP 端口服务多路复用 5 rje 远程作业入口 7 echo Echo 服务 9 discard 用于连接测试的空服务 11 systat 用于列举连接了的端口的系统状态 13 d...

寰宇01 ⋅ 21分钟前 ⋅ 0

Confluence 6 如何备份存储文件和页面信息

备份的 ZIP 文件包含有 entities.xml,这个 XML 文件包含有 Confluence 的所有页面内容和存储附件的目录。 备份 Zip 文件结构 页面的附件是存储在附件存储目录中的,通过页面和附件 ID 进行识...

honeymose ⋅ 24分钟前 ⋅ 0

【每天一个JQuery特效】根据状态确定是否滑入或滑出被选元素

主要效果: 本文主要采用slideToggle()方法实现以一行代码同时实现以展开或收缩的方式显示或隐藏被选元素。 主要代码如下: <!DOCTYPE html><html><head><meta charset="UTF-8">...

Rhymo-Wu ⋅ 27分钟前 ⋅ 0

度量.net framework 迁移到.net core的工作量

把现有的.net framework程序迁移到.net core上,是一个非常复杂的工作,特别是一些API在两个平台上还不能同时支持。两个类库的差异性,通过人工很难识别全。好在微软的工程师们考虑到了我们顾...

李朝强 ⋅ 33分钟前 ⋅ 0

请不要在“微服务”的狂热中迷失自我!

微服务在过去几年一直是一个非常热门的话题(附录1)。何为“微服务的疯狂”,举个例子: 众所周知,Netflix在DevOps上的表现非常棒。Netfix可以做微服务。因此:如果我做微服务,我也将非常...

harries ⋅ 34分钟前 ⋅ 0

oAuth2 升级Spring Cloud Finchley.RELEASE踩坑分享

背景 6.19号,spring团队发布了期待已久的 Spring Cloud Finchley.RELEASE 版本。 重要变化: 基于Spring Boot 2.0.X 不兼容 Spring Boot 1.5.X 期间踩过几个坑,分享出来给大伙,主要是关于...

冷冷gg ⋅ 今天 ⋅ 0

OSChina 周一乱弹 —— 理发师小姐姐的魔法

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @冰冰棒- :分享田馥甄的单曲《My Love》 《My Love》- 田馥甄 手机党少年们想听歌,请使劲儿戳(这里) @Li-Wang :哎,头发又长了。。。又要...

小小编辑 ⋅ 今天 ⋅ 9

Kafka1.0.X_消费者API详解2

偏移量由消费者管理 kafka Consumer Api还提供了自己存储offset的功能,将offset和data做到原子性,可以让消费具有Exactly Once 的语义,比kafka默认的At-least Once更强大 消费者从指定分区...

特拉仔 ⋅ 今天 ⋅ 0

NEO智能合约之发布和升级(二)

接NEO智能合约之发布和升级(一),我们接下来说说智能合约的升级功能。 一 准备工作 合约的升级需要在合约内预先设置好升级接口,以方便在升级时调用。接下来我们对NEO智能合约之发布和升级...

红烧飞鱼 ⋅ 今天 ⋅ 0

个人博客的运营模式能否学习TMALL天猫质量为上?

心情随笔|个人博客的运营模式能否学习TMALL天猫质量为上? 中国的互联网已经发展了很多年了,记得在十年前,个人博客十分流行,大量的人都在写博客,而且质量还不错,很多高质量的文章都是在...

原创小博客 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部