はじめに
以前にURLからWebページのタイトルを取得するという記事を書きました。
https://qiita.com/SNQ-2001/items/7af62a202a6fbbf5167b
しかし、より良い方法を見つけたので記事にしておきます。
サンプルアプリ
実装
import SwiftUI
import LinkPresentation
struct ContentView: View {
@State private var url = ""
@State private var metadata: LPLinkMetadata?
var body: some View {
List {
Section {
TextField("URLを入力してください", text: $url)
}
if let title = metadata?.title {
Section {
Text(title)
} header: {
Text("タイトル")
}
}
}
.onChange(of: url) {
Task {
if let url = URL(string: url) {
metadata = try await fetchMetadata(url: url)
}
}
}
}
private func fetchMetadata(url: URL) async throws -> LPLinkMetadata {
let metadataProvider = LPMetadataProvider()
return try await withCheckedThrowingContinuation { (continuation: CheckedContinuation<LPLinkMetadata, Error>) in
metadataProvider.startFetchingMetadata(for: url) { metadata, error in
if let error {
continuation.resume(throwing: error)
} else if let metadata {
continuation.resume(returning: metadata)
} else {
continuation.resume(throwing: LPError(.unknown))
}
}
}
}
}
おわり
LinkPresentationはOGPも表示できるようなのであとで試してみます