文档章节

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

hao1208hao
 hao1208hao
发布于 2016/07/28 10:46
字数 583
阅读 35
收藏 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
石家庄
程序员
(转)直接拿来用!最火的iOS开源项目(二)

“每一次的改变总意味着新的开始。”这句话用在iOS上可谓是再合适不过的了。GitHub上的iOS开源项目数不胜数,iOS每一次的改变,总会引发iOS开源项目的演变,从iOS 1.x到如今的iOS 7,有的项目...

孙启超
2013/06/21
0
1
UIView Animations 学习笔记(二)定制动画效果及切换效果

目录 UIView Animations 学习笔记(一)简介及API说明 UIView Animations 学习笔记(二)定制动画效果及切换效果 UIView Animation 学习笔记 应用示例 二、视图切换定制 2.1 基础说明 要创建...

灰大羊
2015/08/12
0
0
如果坑请深坑之ionic微信开发

第一个是网上很多网友提出的问题:就是安卓机上微信里面无法播放视频的问题,而ios里面却不存在; 这个就要责怪一下傻逼微信了,微信里面调用的浏览器内核是QQ浏览器X5内核,我们在点击自己的...

武文海
2015/07/22
0
0
转:基于IOS上MDM技术相关资料整理及汇总

一、MDM相关知识: MDM (Mobile Device Management ),即移动设备管理。在21世纪的今天,数据是企业宝贵的资产,安全问题更是重中之重,在移动互联网时代,员工个人的设备接入企业网络并查...

移动互联百科
2013/10/06
0
0
iOS 6.0旋转兼容的那点事

这两天问答系统里,问ios横竖屏切换、还有状态栏旋转的问题有点多,来些小心得,希望遇到的人少走弯路; 先贴官方说明: iOS 6.0 Release Notes: Autorotation is changing in iOS 6. In iOS...

董桉远
2013/04/07
0
1

没有更多内容

加载失败,请刷新页面

加载更多

hive分桶

hive为啥分桶? 更加细粒度的划分数据,既可以使用分桶技术实现。 作用 对数据进行抽样查询,较为高效。 可以使查询效率提高。 hive分桶技术 分桶字段是表内字段,默认是对分桶的字段进行has...

Mr_yul
17分钟前
0
0
SQL中的case when then else end用法

Case具有两种格式。简单Case函数和Case搜索函数。 --简单Case函数CASE sex WHEN '1' THEN '男' WHEN '2' THEN '女'ELSE '其他' END--Case搜索函数CASE WHEN sex...

牛奋Debug
37分钟前
0
0
log4j2发送消息至Kafka

title: 自定义log4j2发送日志到Kafka tags: log4j2,kafka 为了给公司的大数据平台提供各项目组的日志,而又使各项目组在改动上无感知。做了一番调研后才发现log4j2默认有支持将日志发送到kaf...

微笑向暖wx
46分钟前
1
0
LINUX中如何查看某个端口是否被占用(转发)

LINUX中如何查看某个端口是否被占用 之前查询端口是否被占用一直搞不明白,问了好多人,终于搞懂了,现在总结下: 1.netstat -anp |grep 端口号 如下,我以3306为例,netstat -anp |grep 33...

覃大光
今天
1
0
JBolt 1.5.0新版发布,升级到支持最新版JFinal和Jetty,实现了在线更新插件功能

JBolt是一个JFinal极速开发框架 定制版IDE插件 目前仅有Eclipse插件版,Idea插件版正在开发中。 JBolt的详细使用教程请移步到这里 =====版本1.5.0 更新内容 2018年10月13日10:41:52===== 注意...

山东-小木
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部