轻松获取网页的更多基本信息(LinkPresentation.framework) — Embedding and Sharing Visually Rich Links


网页中其实包含了很多信息,能否轻易获取这些信息内容呢?
最近翻看开发文档,看到一个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,有一个浮层的效果,下面是一些更多选项。
Simulator Screen Shot - iPhone 11 Pro - 2020-04-21 at 17.37.34.png

Simulator Screen Shot - iPhone 11 Pro - 2020-04-21 at 17.37.50.png
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之后便可以用这个类库,还是很方便的。

你可能感兴趣的:(轻松获取网页的更多基本信息(LinkPresentation.framework) — Embedding and Sharing Visually Rich Links)