浅谈iOS中的userAgent
浅谈iOS中的userAgent
User-Agent(用户代理)字符串是Web浏览器用于声明自身型号版本并随HTTP请求发送给Web服务器的字符串,在Web服务器上可以获取到该字符串。
在公司产品中,在userAgent中增加了NetType字段,用于标识客户端当前的网络环境。
- NetType/WIFI
- NetType/3G
web服务器端根据NetType类型加载不同分辨率的商品图片。我们只有两种,WIFI下高清图,非WIFI低分辨率图。
获取WebView的userAgent
iOS客户端中获取webView的userAgent的方法:
NSMutableString *userAgent = [NSMutableString stringWithString:[[UIWebView new] stringByEvaluatingJavaScriptFromString:@"navigator.userAgent"]];
根据需要添加不同的标识到新的userAgent中,这里添加一个WMall标识。
NSString *newUagent = [NSString stringWithFormat:@"%@ WMall/%@", userAgent, [SystemInfo appShortVersion]];
NSDictionary *dictionnary = [[NSDictionary alloc] initWithObjectsAndKeys:newUagent, @"UserAgent", nil];
[[NSUserDefaults standardUserDefaults] registerDefaults:dictionnary];
newUagent 为Mozilla/5.0 (iPhone; CPU iPhone OS 9_3 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Mobile/13E230 WMall/3.0
根据网络类型设置不同的NetType标识
iOS中判断网络状态一般用AFNetWorking中的方法:
在appDelegate的application didFinishLaunchingWithOptions方法中启动网络状态监听:
[[AFNetworkReachabilityManager sharedManager] startMonitoring];
[[AFNetworkActivityIndicatorManager sharedManager] setEnabled:YES];
然后在基类BaseViewController中监听网络更新通知
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(networkReachabilityStatusDidChange:) name:AFNetworkingReachabilityDidChangeNotification object:nil];
- (void)networkReachabilityStatusDidChange:(NSNotification *)notify{
NSLog(@"网络变化通知:%@",notify.userInfo[AFNetworkingReachabilityNotificationStatusItem]);
AFNetworkReachabilityStatus status = [notify.userInfo[AFNetworkingReachabilityNotificationStatusItem] integerValue];
NSString *net = nil;
switch (status) {
case AFNetworkReachabilityStatusNotReachable:
net = @"无网络";
break;
case AFNetworkReachabilityStatusReachableViaWiFi:
net = @"WIFI";
[self changeUserAgentWithType:@"WIFI"];
break;
case AFNetworkReachabilityStatusReachableViaWWAN:
net = @"2G/3G/4G";
[self changeUserAgentWithType:@"3G"];
break;
default:
net = @"xxx";
break;
}
[Error showError:[NSString stringWithFormat:@"当前网络状态%@",net]];
}
注意先判断userAgent中是否存在NetType
//更新NetType
- (void)changeUserAgentWithType:(NSString *)type{
NSMutableString *userAgent = [NSMutableString stringWithString:[[UIWebView new] stringByEvaluatingJavaScriptFromString:@"navigator.userAgent"]];
NSString *newUagent = nil;
NSString *temp = nil;
if ([userAgent containsString:@"NetType"]) {
if ([userAgent containsString:@"WIFI"]) {
temp = @"WIFI";
}else if([userAgent containsString:@"3G"]){
temp = @"3G";
}
newUagent = [userAgent stringByReplacingOccurrencesOfString:temp withString:type];
}else{
newUagent = [NSString stringWithFormat:@"%@ NetType/%@", userAgent, type];
}
NSDictionary *dictionnary = [[NSDictionary alloc] initWithObjectsAndKeys:newUagent, @"UserAgent", nil];
NSLog(@"new useragent:%@",newUagent);
[[NSUserDefaults standardUserDefaults] registerDefaults:dictionnary];
}
newUagent 为Mozilla/5.0 (iPhone; CPU iPhone OS 9_3 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Mobile/13E230 WMall/3.0 NetType/WIFI
浅谈iOS中的userAgent的更多相关文章
- 浅谈iOS中MVVM的架构设计与团队协作
说到架构设计和团队协作,这个对App的开发还是比较重要的.即使作为一个专业的搬砖者,前提是你这砖搬完放在哪?不只是Code有框架,其他的东西都是有框架的,比如桥梁等等神马的~在这儿就不往外扯了.一个好 ...
- IOS中 浅谈iOS中MVVM的架构设计与团队协作
今天写这篇文章是想达到抛砖引玉的作用,想与大家交流一下思想,相互学习,博文中有不足之处还望大家批评指正.本篇文章的内容沿袭以往博客的风格,也是以干货为主,偶尔扯扯咸蛋(哈哈~不好好工作又开始发表博客啦 ...
- 浅谈iOS中MVVM的架构设计与团队协作【转载】
今天写这篇文章是想达到抛砖引玉的作用,想与大家交流一下思想,相互学习,博文中有不足之处还望大家批评指正.本篇文章的内容沿袭以往博客的风格,也是以干货为主,偶尔扯扯咸蛋(哈哈~不好好工作又开始发表博客啦 ...
- 浅谈iOS中的单例模式
iOS中的单例模式 就我本身理解而言,我认为的单例:单例在整个工程中,就相当于一个全局变量,就是不论在哪里需要用到这个类的实例变量,都可以通过单例方法来取得,而且一旦你创建了一个单例类,不论你 ...
- 浅谈iOS中的视图优化
引言: 让我们来思考几个问题,你开发过的产品,它还有可以优化的地方吗?能增加它的帧率吗?能减少多余的CPU计算吗?是不是存在多余的GPU渲染?业务这点工作量对于越来越强大的设备面前显得微不足道,但作为 ...
- iOS——浅谈iOS中三种生成随机数方法
ios 有如下三种随机数方法:
- 浅谈 iOS 中的 Activity Indicator
Activity Indicator 是iOS开发中必不可少的一个视图.本文就简单地总结一下这个Activity Indicator 的使用方法. 默认 Activity Indicator 以下的函 ...
- 浅谈iOS中MVVM的架构设计
MVVM就是在MVC的基础上分离出业务处理的逻辑到viewModel层. M: Model层是API请求的原始数据,充当DTO(数据传输对象),当然,用字典也是可以的,编程么,要灵活一些.Model ...
- 浅谈iOS视频开发
浅谈iOS视频开发 这段时间对视频开发进行了一些了解,在这里和大家分享一下我自己觉得学习步骤和资料,希望对那些对视频感兴趣的朋友有些帮助. 一.iOS系统自带播放器 要了解iOS视频开发,首先我们从 ...
随机推荐
- hdu 4069 福州赛区网络赛I DLC ***
再遇到一个DLC就刷个专题 #include <stdio.h> #include <string.h> #include <iostream> #include ...
- C#中的Infinity有个小坑
(此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) 昨天家里有事,上网也不方便,就没有推送文章.今天很累,也不长篇大论了.简单介绍一下最近遇到的 ...
- 使用AStyle进行代码格式化
转自:http://www.cnblogs.com/JerryTian/archive/2012/09/20/AStyle.html 在日常的编码当中,大家经常要遵照一些设计规范,如命名规则.代码格式 ...
- Android数据缓存(转)
Android数据缓存 1.http://blog.csdn.net/lnb333666/article/details/8460159 2.https://github.com/Trinea/a ...
- xcode6 下 ios simulator 有 Home 键么?
4s之前 ,现在,只能用command+shift+h来代替
- iOS 钥匙串 指纹识别 get和Post请求的区别
01-钥匙串 1. 通过系统提供的钥匙串功能可以在本地保存密码,系统使用AES的方式对密码加密 a. 查看Safari中保存的密码 2. 使用第三方框架SSKeychain把密码保存到钥匙串和获取钥匙 ...
- 遍历windows驱动
驱动都存在 \\Driver 或者 \\FileSystem 目录对象里 我们只需要遍历这两个目录就可以遍历windows所有驱动 知识点 \\Driver \\FileSystem (dt _OB ...
- 智能车学习(十二)——智能车原理
一.直立行走任务分解 1.任务分解 (1) 控制车模平衡:通过控制两个电机正反向运动保持车模直立平衡状态 (2) 控制车模速度:通过调节车模的倾角来实现车模速度控制,实际上最后还是演变成通过控制电机的 ...
- BootCDN和npm
稳定.快速.免费的开源项目 CDN 服务 BootCDN: jQuery3 <script type="text/javascript" src="http://c ...
- 一张图入门python