公司新开的一个项目。。内容基本上是加载H5页面显示。。当时觉得挺简单的。。后来发现自己掉坑里了。。一些心理历程就不说了。。说这个项目主要用到的知识点吧。。也是自己踩得坑。

首先说说。。这个项目上的内容是公司微信公众号的内容。所以加载的H5的页面也是公众号的页面。。只是为了有个APP的壳吧。。

然后呢。在一些页面是需要登录信息的,如果没有登录则会跳到申请微信登录授权的界面。这个界面是公众号申请的。这就是坑的所在。。因为APP打开这些页面会提示“请在微信客户端打开链接”。

由于是H5页面跳转的。但是小弟我不懂前端的知识。不明白为什么会跳转。合作的同事让我自己去找原因。。我真的觉得郁闷到家了。不过学到这方面的知识吧。虽然问题的解决方案不是我自己找的。。汗。还是他告诉我信息才知道。。他告诉我。前端那边判断用户有没有成立需不需要跳转是有打开web页面的时候。携带的cookie信息来判断的。。我们这里需要的是一个sessionid与cookie的信息和另一个时间的cookie联合判断。具体判断规则我就不明白了。。就说说iOS这边做的处理吧。

既然需要设置cookie。。那么我就找设置cookie的代码咯:

 #pragma mark 设置cookie-------cookie名称、cookie值、cookie域名
+(void)setCookieWithName:(NSString *)name value:(NSString *)value domain:(NSString *)domain{
NSMutableDictionary *cookieProperties = [NSMutableDictionary dictionary]; // 创建cookie属性字典
[cookieProperties setObject:name forKey:NSHTTPCookieName]; // 手动设置cookie的属性....值的名称
[cookieProperties setObject:value forKey:NSHTTPCookieValue];//cookie的值
[cookieProperties setValue:[NSDate dateWithTimeIntervalSinceNow:***] forKey:NSHTTPCookieExpires];//cookie过期时间
[cookieProperties setObject:domain forKey:NSHTTPCookieDomain];//cookie域名
[cookieProperties setObject:@"/" forKey:NSHTTPCookiePath];//路径分隔符
// [cookieProperties setObject:@"cnrainbird.com" forKey:NSHTTPCookieOriginURL];//cookie的url..这里不需要
// [cookieProperties setObject:@"0" forKey:NSHTTPCookieVersion];//cookie的版本。。这里也不需要
NSHTTPCookie *cookie = [NSHTTPCookie cookieWithProperties:cookieProperties];//设置cookie
[[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookie:cookie];
}

。。啧啧啧。。居然有插入代码这个功能。之前不会用。。我的锅。。

因为登录注册是原生的,所以这边需要在所有的接口的请求头加入sessionid的信息。。用来作为在web页面的账号凭据。

所以在接口都加了请求头。。按理说。应该没问题了。。但是还是显示“请在微信客户端打开链接”。我就奇怪了。。确实不懂这些道道。。虚心的问同事。前端是怎么判断的。。结果他说我不会告诉你的。自己找原因。不会H5是不行。。我这暴脾气。当场就。。。乖乖回去找资料了。。

后来发现是不是域名错了呢。又去问问他域名的规则。。他看了下说。。域名是不能带“http://”的。。好吧。。这座坑过了。。结果还是不行。

没办法,只能继续埋头苦干。。。同事估计觉得我弄得有点久了。过来缅怀一下。发现可能是User-Agent 不一样的缘故。。接口请求的User-Agent 和webview的User-Agent 要一致。。好嘛。。胜利的曙光貌似在眼前闪耀。

在接口请求头信息加上User-Agent 的信息。再设置webview的User-Agent 。接口请求头设置相关信息就不贴了。应该挺好搜的。下面是webview设置User-Agent 的代码:

 //webView设置UA
+(void)setUserAgent:(UIWebView *)webView{ NSString *userAgent=@"User-Agent message"; [[NSUserDefaults standardUserDefaults] registerDefaults:@{@"UserAgent" : userAgent, @"User-Agent" : userAgent}]; }

开始我是每次打开都给设置了一次User-Agent。。不过这个和cookie一样。都不需要重复设置。。只要在适当的时候设置一次就行了。

然后满心欢喜的测试了一下。。还是不行。。啧啧啧。。当时真的是想砸电脑了。。

重复检查。同事说的。User-Agent、cookie、authTime信息是不是有,是不是和接口请求一致的。。没问题啊。。怎么都没问题啊。。

最后同事又来看了一次。。说2个cookie的域名是不一样的。。差点抽刀子了。。不早说。。不过看到成功的界面。。让我放他一条生路。。此致结束。。下面是一些辅助查看的代码:

 //清除全部cookie信息
NSArray *cookies = [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookiesForURL:url];
for (int i = ; i < [cookies count]; i++) {
NSHTTPCookie *cookie = (NSHTTPCookie *)[cookies objectAtIndex:i];
[[NSHTTPCookieStorage sharedHTTPCookieStorage] deleteCookie:cookie];
}
 //删除特定名称的cookie
NSArray * cookArray = [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookiesForURL:[NSURL URLWithString:@"cookie的url"]];
for (NSHTTPCookie*cookie in cookArray) {
//需要删除的cookie名称
if ([cookie.name isEqualToString:@"cookiename"]) {
[[NSHTTPCookieStorage sharedHTTPCookieStorage] deleteCookie:cookie];
}
}
 //加载webview的时候调用的代理方法
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType{
//查看所有的cookie信息。。
NSHTTPCookieStorage *cookieJar = [NSHTTPCookieStorage sharedHTTPCookieStorage];
for (NSHTTPCookie *cookie in [cookieJar cookies]) {
NSLog(@"cookie信息-----------%@", cookie);
}
//打印出请求头。可以看到User-Agent信息
NSLog(@"请求头信息-----%@",request.allHTTPHeaderFields);
return YES;
}

好了。。结束一个坑。其实不算坑吧,只是不懂前端的知识,如果同事好沟通的话。问题很简单。

iOS “请在微信客户端打开链接” UIWebview加载H5页面携带session、cookie、User-Agent信息 设置cookie、清除cookie、设置User-Agent的更多相关文章

  1. 请在微信客户端打开链接 html

    1 前言 有时候,需要链接只能在微信上打开,如果不是,则提示请在微信客户端打开链接的字眼的网页,网页代码如下:(这个是网页应用授权时,非微信上打开,就会出现,然后把它单独拿出来了) 2 代码 < ...

  2. Jmeter打开url时提示“请在微信客户端打开链接问题”

    前提: 1.HTTP信息头管理器已添加了“User-Agent” 2.工作台添加HTTP代理服务器(注意端口和客户端填写的代理端口要一致) 但是运行的时候总是提示“请在微信客户端打开链接” 查阅各种资 ...

  3. jmeter报错之“请在微信客户端打开链接”

    这是一个还没解决的问题,这里纯粹记录自己思考的过程,后续给自己参考. 先说明情景:对微信公众号的一个接口进行调用跑通,后续可能需要压测(是的,仅仅是调通一个接口而已o(╥﹏╥)o) 1.按照我理解的正 ...

  4. 新浪微博客户端(13)-使用UIWebView加载OAuth授权界面

    使用UIWebView加载OAuth授权界面 DJOAuthViewController.m #import "DJOAuthViewController.h" @interfac ...

  5. IOS开发之路二十一(UIWebView加载本地html)

    挺简单不多说的直接代码: // // ViewController.h // JSAndJson // // Created by WildCat on 13-9-8. // Copyright (c ...

  6. UIWebview加载H5界面侧滑返回上一级

    一.UIWebview的发现 问题发现:当UIWebview王深层次点击的时候,返回时需要webView执行goBack方法一级一级返回,这样看到的webView只是在该界面执行刷新,并看不到类似iO ...

  7. 在微信里面打开链接,显示501 Not Implemented,但是同样的链接在其他浏览器是可以打开的。

    在微信里面打开链接,显示501 Not Implemented,但是同样的链接在其他浏览器是可以打开的. 显示: 还原:该链接在2017年之前微信还是可以访问的. 访问的地址格式是:http://xx ...

  8. 【iOS进阶】UIWebview加载搜狐视频,自动跳回客户端 问题解决

    UIWebview加载搜狐视频,自动跳回搜狐客户端 问题解决 当我们用UIWebview(iOS端)加载网页视频的时候,会发现,当真机上有搜狐客户端的时候,会自动跳转到搜狐客户端进行播放,这样的体验对 ...

  9. 【iOS系列】-UIWebView加载网页禁止左右滑动

    [iOS系列]-UIWebView加载网页禁止左右滑动 问题: 做项目时候,用UIWebView加载网页的时候,要求是和微信网页中打开的网页的效果一样,也即是只能上下滑动,不能左右滑动,也不能缩放. ...

随机推荐

  1. UDP广域网,局域网通信-原理分析,穿透技术

    一.UDP局域网通信. 这个比较简单,关于局域网中的2台或者更多的计算机之间的UDP通信,网络上一大把,直接复制粘贴就可以使用,原理也非常简单.所以,本文不做详细介绍. 二.UDP广域通信(包括路由器 ...

  2. Flume日志收集

    进入 http://blog.csdn.net/zhouleilei/article/details/8568147

  3. 如何使cron任务出错时发邮件

    如果设置了 MAILTO,cron就会将任务的标准输出和标准错误输出重定向到邮箱(即发送邮件).但如果只想接到错误报警邮件 -- 即任务正常执行时不发送,只在出错时发送 -- 应该怎么实现呢? 方法很 ...

  4. Android问题-DelphiXE5开发Andriod连接Webservice乱码问题

    问题现象:在使用DelphiXE5开发Andriod连接Webservice乱码. 问题原因:数据类型不同. 问题处理:为了不让广大朋友再烦恼,我就把解决办法写出来吧,把数据库中我们要查询的字段类型改 ...

  5. HDU2947Bicycle Puzzle(组合原理)

    题目大意: 你和朋友两人玩游戏,将一个图片均等切割成W* H块,打乱每一小块的位置.拼图游戏开始.每次,可以交换任意两块,记下交换的次数,图片还原游戏结束.得分为执行交换的次数.得分越小越好. 现在, ...

  6. iOS的几种定时器

    //gcd的定时器timer必须先保存为一个属性或者成员变量 @property (nonatomic , assign) dispatch_source_t timer; //第一种 每一秒执行一次 ...

  7. SQL SERVER 数据库表同步复制 笔记

    SQL SERVER 数据库表同步复制 笔记 同步复制可运行在不同版本的SQL Server服务之间 环境模拟需要两台数据库192.168.1.1(发布),192.168.1.10(订阅) 1.在发布 ...

  8. C++ Bit Fields

    http://msdn.microsoft.com/en-us/library/ewwyfdbe%28v=vs.71%29.aspx Note An unnamed bit field of widt ...

  9. C# 实现对网站数据的采集和抓取

    首先大家需要清楚一点的是:任何网站的页面,无论是php.jsp.aspx这些动态页面还是用后台程序生成的静态页面都是可以在浏览器中查看其HTML源文件的. 所以当你要开发数据采集程序的时候,你必须先对 ...

  10. UVA 12904 Load Balancing 暴力

    Load Balancing Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hust.edu.cn/vjudge/contest/vi ...