文档章节

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

hao1208hao
 hao1208hao
发布于 2016/07/28 10:46
字数 583
阅读 42
收藏 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
石家庄
程序员
私信 提问
有人在利用 80legs 自定义爬虫服务搞 OSChina!

刚才 OSC 突然访问很慢,查看日志大量的一个名为 80legs 的爬虫在抓去 OSC 页面,而且 IP 地址非常之多。 例如: 92.100.201.23 - - [17/Jun/2013:14:40:01 +0800] "GET /ios/codingList/37...

红薯
2013/06/17
5.2K
38
iOS曝出新漏洞:可绕过密码保护访问联系人信息

北京时间2月24日凌晨消息,据外国破解网站iPhoneislam.com周四发布的消息显示,该网站于本周在苹果iOS 5.0.1软件中发现了一个 新的漏洞,可以让攻击者绕过iPhone手机的密码保护,在未获授权的...

红薯
2012/02/24
1K
6
又一“中国特色”?记 iOS 7 越狱风波

12 月 22 日晚,苦等越狱的 iOS 用户收到了一份突如其来的“圣诞礼物”—— 国外黑客团队 evad3rs 放出了号称完美越狱 iOS 7 的工具 evasi0n7。但奇怪的是,此次随着 evasi0n 7 发布的还有一...

鉴客
2013/12/23
1K
22
苹果发布第一个 Android 应用,支持切换到 iOS 9

苹果发布了第一个 Android 应用。这并不是一个 Android 版本的 Safari 或者是其他的,而是一个用来简化切换到 iOS 过程的工具。Move to iOS 应用会吸引很多想使用 iPhone 6s/iPhone 6s Plus...

oschina
2015/09/17
10.6K
49
Windows8 平板 Metro 利器妄图对抗 iPad3?

MWC2012年会微软顺势发布Windows 8消费者预览版,并且在短短的24小时内下载量突破百万,全世界在这个2月的尾声感受到了自Windows 95问世至今变革幅度最大的Metro UI的独特魅力。令人印象最深...

WPDang
2012/03/04
1K
11

没有更多内容

加载失败,请刷新页面

加载更多

关于ComponentOne For WinForm 的全新控件 – DataFilter数据切片器(Beta)

概述 数据切片器在电子商务网站上很常见 - 它们可以帮助用户快速过滤所选商品,并且所有过滤选项都可以在一个地方使用,通常包含核心控件类型为:清单,范围栏和单选按钮等。在ComponentOne ...

葡萄城技术团队
11分钟前
0
0
Spring Data JPA 常见异常

异常一: Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'userRepository': Invocation of init method failed; nested exception i......

小99
11分钟前
0
0
聊聊flink的EventTime

序 本文主要研究一下flink的EventTime SourceFunction flink-streaming-java_2.11-1.7.0-sources.jar!/org/apache/flink/streaming/api/functions/source/SourceFunction.java /** * Inte......

go4it
24分钟前
1
0
如何解决 homebrew 更新慢的问题

之前一直困扰于 Homebrew 的更新速度,曾试过修改更新源(清华、中科大等)的方式,但是并没什么卵用;也试过设置 curl 代理的方式,但是 brew 走的好像不是 curl 的方式,所以也没用。 通过...

whoru
29分钟前
2
0
TiDB EcoSystem Tools 原理解读系列(二)TiDB-Lightning Toolset 介绍

简介 TiDB-Lightning Toolset 是一套快速全量导入 SQL dump 文件到 TiDB 集群的工具集,自 2.1.0 版本起随 TiDB 发布,速度可达到传统执行 SQL 导入方式的至少 3 倍、大约每小时 100 GB,适合...

TiDB
31分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部