【苹果群发推iMessage苹果推】位置推在(delegate) 收到connectionDidFinishLoading

发布于:2022-11-28 ⋅ 阅读:(351) ⋅ 点赞:(0)

推荐内容IMESSGAE相关

作者推荐内容 iMessage苹果推软件 *** 点击即可查看作者要求内容信息
作者推荐内容 1.家庭推内容 *** 点击即可查看作者要求内容信息
作者推荐内容 2.相册推 *** 点击即可查看作者要求内容信息
作者推荐内容 3.日历推 *** 点击即可查看作者要求内容信息
作者推荐内容 4.虚拟机安装简单 *** 点击即可查看作者要求内容信息
作者推荐内容 5.iMessage *** 点击即可查看作者要求内容信息

//webview每次加载以前都会挪用这个法子,操纵该代办署理方法截取JS的href来调用原生的方法 - (BOOL)webView:(UIWebView*)webView shouldStartLoadWithRequest:(NSURLRequest*)request navigationType:(UIWebViewNavigationType)navigationType 但是此次的交互请求是举行双向通信,即JS调用原生App的方法以后,原生App要讲相干参数信息返回给H5页面,H5页面担当到参数信息后做其余处置。 例:H5页面的公布信息按钮,在点击按钮后要在原生端果断用户是不是登录,若没有登录则弹出原生登录页面,登录乐成后将用户信息返回给H5页面,继承发布流程。 WebViewJavascriptBridge利用阐明(IOS) 因为如今不少产物都是有安卓版跟ios版,就意味着统一样工具要出两套,由两组人去完成,不但增长了开辟本钱,也大大加重了保护成本。聪慧的coder想出了跨平台的思绪,用html写页面,别离用webview(ios),(安卓)来加载,对某些html没法调用的硬件,经由过程双方的交互来实现方法的互调和传值。这个进程便是跨平台。

在这里插入图片描述

下面来讲一下WebViewJavascriptBridge在ios端怎样使用。 起首确保一份曾经配好功效的html文件。(html还在进修阶段,临时就不矫饰了。。。) 1.初始化一个webview(viewdidload) UIWebView* webView = [[UIWebView alloc] initWithFrame:self.view.bounds]; [self.view addSubview:webView]; 1 2 2.将此webview与WebViewJavascriptBridge联系关系(viewdidload) if (_bridge) { return; } [WebViewJavascriptBridge enableLogging]; _bridge = [WebViewJavascriptBridge bridgeForWebView:webView webViewDelegate:self handler:^(id data, WVJBResponseCallback responseCallback) { NSLog(@“ObjC received message from JS: %@”, data); responseCallback(@“Response for message from ObjC”); }]; 1 2 3 4 5 6 7 8 9 ps:此时你的webview就与js搭上桥了。下面就是方法的互调和参数的互传。 (1) js调oc方法(能够通过data给oc方法传值,使用responseCallback将值再返回给js) [_bridge registerHandler:@“testObjcCallback” handler:^

(id data, WVJBResponseCallback responseCallback) { NSLog(@“testObjcCallback called: %@”, data); responseCallback(@“Response from testObjcCallback”); }]; 1 2 3 4 这里细致testObjcCallback这个方法的标示。html何处的定名要跟ios这边雷同,才气调到这个方法。固然这个名字可以两边磋商着自定义。简略明白便可。 (2)oc调js方法(通过data可以传值,通过response可以接受js那边的返回值) id data = @{ @“greetingFromObjC”: @“Hi there, JS!” }; [_bridge callHandler:@“testJavascriptHandler” data:data responseCallback:^(id response) { NSLog(@“testJavascriptHandler responded: %@”, response); }]; 注意这里的testJavascriptHandler也是个方法标示。 (3)oc给js传值(通过response接受返回值) 1 2 3 4 5 6 7 8 [_bridge send:@”A string sent from ObjC to JS” responseCallback:^(id response) { NSLog(@”sendMessage got response: %@”, response); }]; (4)oc给js传值(无返回值) 1 2 [_bridge send:@”A string sent from ObjC after Webview has loaded.”]; ##2 UIWebView页面信息的离线缓存 保举一个比力好的第三方库RNCachingURLProtocol ,只必要在AppDelegate中参加下面方法即可。 [NSURLProtocolregisterClass:[RNCachingURLProtocolclass]];

地点:https://github.com/rnapier/RNCachingURLProtocol ##3 NSURLConnection小解 NSURLConnection供给对收集异步加载哀求的支撑,而且将获得的数据返回给代理。提供了简单的接口去建立和取缔毗连,同时使用delegate方法去支持连接过程的反应和节制 。在现实开发中直接用的未几,可是有的第三方库倒是用它来封装的。 举例一: 1、先创建一个NSURL 2、在通过NSURL创建NSURLRequest,可以指定缓存规矩和超时时辰 3、创建NSURLConnection实例,指定NSURLRequest和一个delegate工具 若是创建失利,则会返回nil,如果创建成功则创建一个NSMutalbeData的实例用来存储数据 代码: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 NSURL *url = [NSURL URLWithString:@”http://192.168.2.128:9090/ssonew/login/UserLogin.action?name=mql&psd=123456“]; NSURLRequest *request = [[NSURLRequest alloc]initWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:30]; self.theConncetion = [[NSURLConnection alloc]initWithRequest:request delegate:self startImmediately:YES]; if (_theConncetion) { self.receiveData = [[NSMutableData alloc]init]; } 1 2 3 NSURLConnection有3个初始化函数,只要第一个初始化函数可以做到创建连接但是并 不马上起头下载,而是通过start:开始,调用该初始化函数时,startImmediately传NO 1 2 3 (id)initWithRequest:(NSURLRequest *)request delegate:(id)delegate startImmediately:(BOOL)startImmediately NS_AVAILABLE(10_5, 2_0); (id)initWithRequest:(NSURLRequest )request delegate:(id)delegate; (NSURLConnection)connectionWithRequest:(NSURLRequest *)request delegate:(id)delegate; 当收到initWithRequest: delegate:或收到connectionWithRequest: delegate:

动静时,下载会当即开始,在代理(delegate) 收到connectionDidFinishLoading:大概connection:didFailWithError:消息之前 可以通过给连接发送一个cancel:消息来间断下载 connection: willSendRequest: redirectResponse:这个方法在请求将要被发送进来之前会调用 返回值是一个NSURLRequest,就是阿谁真正将要被发送的请求 第二个参数request就是被重定向处理事后的请求 第三个参数response是触发重定向请求的相应包.默许是支持跳转的。 1 2 3 4 5 6 7 8 9 10 11 (NSURLRequest )connection:(NSURLConnection )connection willSendRequest:(NSURLRequest )request redirectResponse:(NSURLResponse )response { NSURLRequest *newRequest = request; if (response) { NSLog(@”redirect!!!”);
在这里插入图片描述

//如,请求google的网站时会有跳转产生 newRequest = nil; //回绝跳转 } return newRequest; } 当服务器提供了充足客户程序创建NSURLResponse对象的信息时,代理对象会收到 一个connection:didReceiveResponse:消息,在消息内可以查抄NSURLResponse 对象和肯定数据的预期远程,mime范例,文件名以及其他服务器提供的元信息 要注意,一个简单的连接也大概会收到多个connection:didReceiveResponse:消息 当服务器连接重置或者一些罕有的缘由(好比多组mime文档),代理都会收到该消息 这时理当重置进度批示,抛弃之前接管的数据 1 2 3 4 5 6 7 8 9 (void)connection:(NSURLConnection )connection didReceiveResponse:(NSURLResponse )response { //注意这里将NSURLResponse对象转换成NSHTTPURLResponse对象才能使用 NSHTTPURLResponse httpResponse = (NSHTTPURLResponse)response; if ([response respondsToSelector:@selector(allHeaderFields)]) { NSDictionary *dictionary = [httpResponse allHeaderFields]; NSLog(@”%@”, dictionary); } [self.receiveData setLength:0]; } 当下载开始的时候,每当稀有据接收,代理会按期收到connection:didReceiveData:消息 代理应当在实现中储存新接收的数据,下面的例子既是如斯 1 2 3 4 -(void) connection:(NSURLConnection*)connection didReceiveData: (NSData *) data { [receiveData appendData:data]; } -(void) connection:(NSURLConnection*)connection didReceiveData: (NSData *) data { [receiveData appendData:data]; }

在上面的方法实现中,可以加入一个进度指示器,提醒用户下载进度 当下载的过程中有毛病发生的时候,代理会收到一个connection:didFailWithError消息 消息参数内里的NSError对象提供了详细的错误细节,它也能提供在用户信息字典里面失败的 url请求(使用NSErrorFailingURLStringKey) 今世理接收到连接的connection:didFailWithError消息后,对付该连接不会再收到任何消息 举例 (void)connection:(NSURLConnection )connection didFailWithError:(NSError )error { } 末了,如果连接请求成功的下载,代理会接收connectionDidFinishLoading:消息,代理不会收到其他的消息 举例: 1 2 3 4 5 (void)connectionDidFinishLoading:(NSURLConnection *)connection { NSLog(@”统共请求的数据长度 = %d”, [self.data length]); } 注:从ios5.0开始,苹果为开发者引入block观点,以是使用NSURLConnection

发送一个请求可以以下: 1 2 3 NSURL *url = [NSURL URLWithString:@”http://www.google.com“]; NSURLRequest *request = [[NSURLRequest alloc]initWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:30]; NSOperationQueue *queue=[[NSOperationQueue alloc]init]; [ NSURLConnection sendAsynchronousRequest:request queue:queue completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) { if (error == nil){ NSLog(@“download success”); NSStringEncoding enc = CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_18030_2000); NSString *str = [[NSString alloc]initWithData:data encoding:enc]; NSLog(@“%@”, str); }else if(error!=nil){ NSLog(@“error”); } }]; 以上演示的请求都是GET请求,如果没使用NSMutableURLRequest的实例方法setHTTPMethod进行配置,请求都是GET请求。 如要走POST请求,仅需: 1、将上面的NSURLRequest替换成NSMutableURLRequest 2、[request setHTTPMethod:@“POST”]; 3、[request setHTTPBody:postData];//postData一样平常是JSON格局的字符串转换过去的。 4、使用NSURLConnection启动请求。 地址:https://github.com/marcuswestin/WebViewJavascriptBridge 通过使用该库可以轻松实现JS与原生交互。

//初始化WebViewJavascriptBridge方法 _bridge= [WebViewJavascriptBridge bridgeForWebView:self.BookWebView webViewDelegate:self handler:^(id data,WVJBResponseCallback responseCallback) { }]; //原生与JS商定接口名为“testObjcCallback”,data是JS通报过来的信息,responseCallback来将信息传递给JS [_bridge registerHandler:@“testObjcCallback” handler:^(id data,WVJBResponseCallback responseCallback) { responseCallback(“postInfomationToJS”) }];

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到