网页中其实包含了很多信息,能否轻易获取这些信息内容呢?
最近翻看开发文档,看到一个iOS13开始新推出的关于web的功能,LinkPresentation.framework,然后加入工程,调用了下,发现还挺有用的。
Apple的官方说明视频,可以查看这里
https://developer.apple.com/videos/play/wwdc2019/262/
来简单使用下LinkPresentation
1、把库引入工程
2、然后可以查看下库内文件内容,其实内容比较少,可以很方便的理解。
主要就是4块内容
LPError.h
LPLinkMetadata.h
LPLinkView.h
LPMetadataProvider.h
其中能够被我们以后能够常用到的就是LPMetadataProvider对象。
3、创建了一个LPLinkView,然后看下效果。链接我用的是知乎的首页,看看能够看到什么效果。
- (void)createLPView:(LPLinkMetadata *)metadata{
_lp_view = [[LPLinkView alloc]initWithMetadata:metadata];
[self.view addSubview:_lp_view];
[_lp_view mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.equalTo(@100);
make.width.equalTo(@200);
make.height.equalTo(@400);
make.centerX.equalTo(self.view);
}];
}
- (void)showLP{
LPMetadataProvider *prov = [LPMetadataProvider new];
[prov startFetchingMetadataForURL:[NSURL URLWithString:@"https://www.zhihu.com"] completionHandler:^(LPLinkMetadata * _Nullable metadata, NSError * _Nullable error) {
dispatch_async(dispatch_get_main_queue(), ^{
[self createLPView:metadata];
});
}];
}
4、模拟器跑出来的效果,按住LPLinkView,有一个浮层的效果,下面是一些更多选项。
5、然后打印下metadata信息,可以获得当前网页的各种信息。
这些信息可以保存,可以处理,可以分析,可以各种喜欢的处理。
几点注意
1、LinkPresentation的实现原理
根据后台打印的log和苹果官方视频的介绍,其实是创建了一个WKWebView的实例,去请求加载网页内容,获取相应的信息。
其实是对WKWebView拓展应用,相对来说资源耗费还是挺大的。2、LPMetadataProvider对象必须是在主线程中调用
它的返回completionHandler是在异步线程中,如果是一些UI操作,需要切换到主线程
LPMetadataProvider的每一个实例只能请求一次,若再次请求,需要创建新的实例。一个实例多次请求会发生错误。3、如果是Mac OS 应用
必须具有com.apple.security.network.client权限,以便能够对远程url使用LPMetadataProvider。4、LPLinkMetadata
LPLinkMetadata数据可以自己创建,自己赋值使用。LPLinkMetadata支持NSSecureCoding,可以直接保存。5、LPLinkView
LPLinkView创建后的frame可以sizeToFit,建议是自己设定。
以上便是LinkPresentation.framework的一个简单的调用,若是应用中需要跳转网页,获取网页的一些信息,在iOS13之后便可以用这个类库,还是很方便的。