文档章节

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

hao1208hao
 hao1208hao
发布于 2016/07/28 10:46
字数 583
阅读 1.2K
收藏 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
石家庄
程序员
私信 提问
加载中
请先登录后再评论。
树莓派(Raspberry Pi):完美的家用服务器

自从树莓派发布后,所有在互联网上的网站为此激动人心的设备提供了很多有趣和具有挑战性的使用方法。虽然这些想法都很棒,但树莓派( RPi )最明显却又是最不吸引人的用处是:创建你的完美家用...

异次元
2013/11/09
7K
8
程序猿媛一:Android滑动翻页+区域点击事件

滑动翻页+区域点击事件 ViewPager+GrideView 声明:博文为原创,文章内容为,效果展示,思路阐述,及代码片段。文尾附注源码获取途径。 转载请保留原文出处“http://my.oschina.net/gluoyer...

花佟林雨月
2013/11/09
4.2K
1
HTTPS切换工具--HttpsSwitcher

HttpsSwitcher 是一个帮你进行 HTTPS 切换的 Chrome 插件,本工具可以帮你尝试使用https打开指定的域名,点击本插件的浏览器图标后会自动切换本标 签页的http/https状态,并且会记住你的选择...

leehorsley
2013/01/26
1K
0
JavaScript 服务器页--JSSP

JSSP (JavaScript Server Pages) 可以让你在 Java 的应用服务器上使用 JavaScript 生成网页。支持已有的 Java 包和嵌入式 SQL 命令。包含 Dervish 这个 JavaScript 交互操作包用于简化 Ajax...

匿名
2013/02/11
3.8K
0
iOS 应用版本更新检查--Harpy

实现 app 版本检查功能。用户打开app之后,进行app的版本更新检查。如果检查到 appstore 上有当前qpp的新版本,则弹出对话框提醒用户下载。可以设置让用户选择下载或者强制用户下载。 [Code4...

匿名
2013/02/18
1.8K
0

没有更多内容

加载失败,请刷新页面

加载更多

没有指定分支的“git push”的默认行为 - Default behavior of “git push” without a branch specified

问题: I use the following command to push to my remote branch: 我使用以下命令推送到我的远程分支: git push origin sandbox If I say 如果我说 git push origin does that push ch......

技术盛宴
47分钟前
21
0
为什么在允许某些Unicode字符的注释中执行Java代码?

问题: The following code produces the output "Hello World!" 以下代码生成输出“Hello World!” (no really, try it). (不,真的,试试吧)。 public static void main(String... args......

富含淀粉
今天
18
0
字符串格式:%与.format - String formatting: % vs. .format

问题: Python 2.6 introduced the str.format() method with a slightly different syntax from the existing % operator. Python 2.6引入了str.format()方法,其语法与现有的%运算符略有不......

javail
今天
22
0
什么是按位移位(位移)运算符以及它们如何工作? - What are bitwise shift (bit-shift) operators and how do they work?

问题: I've been attempting to learn C in my spare time, and other languages (C#, Java, etc.) have the same concept (and often the same operators) ... 我一直在尝试在业余时间学习......

法国红酒甜
今天
32
0
OSChina 周二乱弹 —— 卧槽 李荣浩的契约兽啊

Osc乱弹歌单(2020)请戳(这里) 【今日歌曲】 @薛定谔的兄弟 :分享洛神有语创建的歌单「我喜欢的音乐」: 《红色的回忆》- 痛仰乐队 手机党少年们想听歌,请使劲儿戳(这里) 动弹, 又好多...

小小编辑
今天
69
1

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部