版本記錄
版本號(hào) | 時(shí)間 |
---|---|
V1.0 | 2020.03.31 星期二 |
前言
隨著iOS 13.0的更新,新的SDK也加入了蘋果的大家庭,其中一個(gè)就是LinkPresentation。下面我們?cè)谶@個(gè)專題一起來(lái)學(xué)習(xí)下這個(gè)框架。
Overview
首先看一下框架環(huán)境
可見,LinkPresentation
是iOS 13新增的OC和Swift都支持的新的Framework
。
Link Presentation
使您能夠以一致的方式表示內(nèi)容豐富的url
。從URL檢索元數(shù)據(jù),在應(yīng)用程序中顯示豐富的鏈接內(nèi)容,并在iOS中提供共享表單體驗(yàn)的鏈接元數(shù)據(jù)。
更多信息,可以參考WWDC 2019 session 262: Embedding and Sharing Visually Rich Links。
Topics
1. Link Metadata
-
LPMetadataProvider
- 為URL檢索元數(shù)據(jù)的對(duì)象。
Declaration
@interface LPMetadataProvider : NSObject
使用LPMetadataProvider
獲取URL的元數(shù)據(jù),包括它的標(biāo)題、圖標(biāo)和圖像或視頻鏈接。LPLinkMetadata
實(shí)例上的所有屬性都是可選的。
注意:要使
macOS
客戶端能夠獲取遠(yuǎn)程url
的元數(shù)據(jù),請(qǐng)?zhí)砑?code>com.apple.security.net .client權(quán)限。
Fetch Link Metadata from a URL
對(duì)于每個(gè)元數(shù)據(jù)請(qǐng)求,創(chuàng)建LPMetadataProvider
的一個(gè)實(shí)例,并調(diào)用startFetchingMetadataForURL:completionHandler:
。
在完成處理程序completion
中,檢查錯(cuò)誤。如果您的用戶沒(méi)有網(wǎng)絡(luò)連接,則獲取操作可能會(huì)失敗。如果服務(wù)器沒(méi)有響應(yīng)或者響應(yīng)速度太慢,則獲取可能超時(shí)。或者,應(yīng)用程序可能會(huì)取消請(qǐng)求,或者出現(xiàn)未知的錯(cuò)誤。
否則,您可以隨意使用元數(shù)據(jù),例如,填充表視圖單元格的標(biāo)題。
let metadataProvider = LPMetadataProvider()
let url = URL(string: "https://www.apple.com/ipad")!
metadataProvider.startFetchingMetadata(for: url) { metadata, error in
if error != nil {
// The fetch failed; handle the error.
return
}
// Make use of fetched metadata.
}
有關(guān)處理鏈接表示錯(cuò)誤的更多信息,請(qǐng)參見LPError
。
-
LPLinkMetadata
- 包含關(guān)于URL的元數(shù)據(jù)的對(duì)象。
Declaration
@interface LPLinkMetadata : NSObject
使用LPLinkMetadata
來(lái)存儲(chǔ)關(guān)于URL的元數(shù)據(jù),包括它的標(biāo)題、圖標(biāo)、圖像和視頻。
使用LPMetadataProvider
獲取元數(shù)據(jù)。對(duì)于遠(yuǎn)程url
,將元數(shù)據(jù)緩存在本地,以避免每次顯示時(shí)從internet
獲取數(shù)據(jù)的數(shù)據(jù)和性能成本。LPLinkMetadata
是可序列化的NSSecureCoding
。
對(duì)于本地文件url
,如果可能,QuickLookThumbnailing將檢索文件的代表性縮略圖。
Provide Custom Metadata
假設(shè)你的應(yīng)用程序已經(jīng)有一個(gè)鏈接數(shù)據(jù)庫(kù),其中的標(biāo)題和圖像不是由LPMetadataProvider
獲取的。您不必從internet獲取新的元數(shù)據(jù)來(lái)加速共享表或顯示豐富的鏈接。相反,您可以自己填寫LPLinkMetadata
字段。
創(chuàng)建一個(gè)LPLinkMetadata
對(duì)象,并至少填寫originalURL
和URL
字段,以及您擁有的任何其他信息。
func activityViewControllerLinkMetadata(_: UIActivityViewController) -> LPLinkMetadata? {
let metadata = LPLinkMetadata()
metadata.originalURL = URL(string: "https://www.example.com/apple-pie")
metadata.url = metadata.originalURL
metadata.title = "The Greatest Apple Pie In The World"
metadata.imageProvider = NSItemProvider.init(contentsOf:
Bundle.main.url(forResource: "apple-pie", withExtension: "jpg"))
return metadata
}
Accelerate the Share Sheet Preview
對(duì)于共享url的現(xiàn)有應(yīng)用程序,共享表單會(huì)自動(dòng)顯示鏈接的預(yù)覽。預(yù)覽首先顯示了一個(gè)占位符鏈接圖標(biāo)旁邊的基本URL,同時(shí)獲取的鏈接的元數(shù)據(jù)通過(guò)網(wǎng)絡(luò)。一旦鏈接的圖標(biāo)和標(biāo)題可用,預(yù)覽就會(huì)更新。
如果您已經(jīng)有一個(gè)用于URL
的LPLinkMetadata
對(duì)象,那么將其傳遞到共享工作表以立即顯示預(yù)覽,而無(wú)需通過(guò)網(wǎng)絡(luò)獲取數(shù)據(jù)。在activityViewControllerLinkMetadata:
的實(shí)現(xiàn)中,返回元數(shù)據(jù)對(duì)象。
func activityViewControllerLinkMetadata(_: UIActivityViewController) -> LPLinkMetadata? {
return self.metadata
}
如果用戶選擇共享消息,則相同的元數(shù)據(jù)將直接通過(guò),從而提供流暢和無(wú)縫的體驗(yàn),而無(wú)需進(jìn)行不必要的加載。
2. Rich Links
-
LPLinkView
- 鏈接的豐富的可視化表示。
3. Reference
后記
本篇主要講述了LinkPresentation框架基本概覽,感興趣的給個(gè)贊或者關(guān)注~~~