網(wǎng)頁中其實(shí)包含了很多信息浴捆,能否輕易獲取這些信息內(nèi)容呢蒜田?
最近翻看開發(fā)文檔,看到一個(gè)iOS13開始新推出的關(guān)于web的功能汤功,LinkPresentation.framework物邑,然后加入工程溜哮,調(diào)用了下滔金,發(fā)現(xiàn)還挺有用的。
Apple的官方說明視頻茂嗓,可以查看這里
https://developer.apple.com/videos/play/wwdc2019/262/
來簡單使用下LinkPresentation
1餐茵、把庫引入工程
2、然后可以查看下庫內(nèi)文件內(nèi)容述吸,其實(shí)內(nèi)容比較少忿族,可以很方便的理解。
主要就是4塊內(nèi)容
LPError.h
LPLinkMetadata.h
LPLinkView.h
LPMetadataProvider.h
其中能夠被我們以后能夠常用到的就是LPMetadataProvider對象蝌矛。
3道批、創(chuàng)建了一個(gè)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,有一個(gè)浮層的效果献雅,下面是一些更多選項(xiàng)碉考。
5、然后打印下metadata信息挺身,可以獲得當(dāng)前網(wǎng)頁的各種信息侯谁。
這些信息可以保存,可以處理,可以分析墙贱,可以各種喜歡的處理把介。
幾點(diǎn)注意
1撕蔼、LinkPresentation的實(shí)現(xiàn)原理
根據(jù)后臺打印的log和蘋果官方視頻的介紹,其實(shí)是創(chuàng)建了一個(gè)WKWebView的實(shí)例,去請求加載網(wǎng)頁內(nèi)容机杜,獲取相應(yīng)的信息。
其實(shí)是對WKWebView拓展應(yīng)用羡疗,相對來說資源耗費(fèi)還是挺大的挺物。2、LPMetadataProvider對象必須是在主線程中調(diào)用
它的返回completionHandler是在異步線程中纺棺,如果是一些UI操作榄笙,需要切換到主線程
LPMetadataProvider的每一個(gè)實(shí)例只能請求一次,若再次請求祷蝌,需要?jiǎng)?chuàng)建新的實(shí)例茅撞。一個(gè)實(shí)例多次請求會發(fā)生錯(cuò)誤。3巨朦、如果是Mac OS 應(yīng)用
必須具有com.apple.security.network.client權(quán)限米丘,以便能夠?qū)h(yuǎn)程url使用LPMetadataProvider。4糊啡、LPLinkMetadata
LPLinkMetadata數(shù)據(jù)可以自己創(chuàng)建拄查,自己賦值使用。LPLinkMetadata支持NSSecureCoding棚蓄,可以直接保存堕扶。5、LPLinkView
LPLinkView創(chuàng)建后的frame可以sizeToFit梭依,建議是自己設(shè)定稍算。
以上便是LinkPresentation.framework的一個(gè)簡單的調(diào)用,若是應(yīng)用中需要跳轉(zhuǎn)網(wǎng)頁役拴,獲取網(wǎng)頁的一些信息糊探,在iOS13之后便可以用這個(gè)類庫,還是很方便的扎狱。