SkillAgentSearch skills...

SMLinkPreview

Generate data and views for URL/web link previews for iOS -- based on pluggable link preview API services

Install / Use

/learn @crspybits/SMLinkPreview
About this skill

Quality Score

0/100

Supported Platforms

Universal

README

URL Link Preview

Version License Platform

Features

The goals of this library are:

  1. To (a) separate the fetching or acquisition of link preview data from (b) the view or UI aspects of the link preview.
  2. To enable the app using the link preview data fetching to not have to disable Application Transport Security (ATS).
  3. To flexibly allow for different web-based API services that fetch link preview data.

The LinkPreview view adapts to different available data:

<p float="left"> <img src="https://github.com/crspybits/SMLinkPreview/blob/master/Docs/Images/LargeImage-OneLineTitle.png" width="200" title="Large Image One Line Title" /> <img src="https://github.com/crspybits/SMLinkPreview/blob/master/Docs/Images/LargeImage-TwoLineTitle.png" width="200" title="Large Image Two Line Title" /> <img src="https://github.com/crspybits/SMLinkPreview/blob/master/Docs/Images/Icon.png" width="200" title="Icon and URL" /> <img src="https://github.com/crspybits/SMLinkPreview/blob/master/Docs/Images/OnlyURL.png" width="200" title="Only URL" /> <img src="https://github.com/crspybits/SMLinkPreview/blob/master/Docs/Images/Icon-TwoLineTitle.png" width="200"title="Icon Two Line Title" /> </p>

Example

To run the example project, clone the repo, and run pod install from the Example directory first.

How to use

  1. Set up plugin's that will do the fetching. You (only) have to have at least one of these:
    PreviewManager.session.reset()

    guard let requestKeyName = MicrosoftURLPreview.requestKeyName,
        let microsoftKey = APIKey.getFromPlist(plistKeyName: "MicrosoftURLPreview", requestKeyName: requestKeyName, plistName: "APIKeys") else {
        throw URLPreviewGeneratorError.failedToGetPlistValue
    }
    
    guard let msPreview = MicrosoftURLPreview(apiKey: microsoftKey) else {
        throw URLPreviewGeneratorError.failedToInitializePlugin
    }
    
    guard let adaPreview = AdaSupportPreview(apiKey: nil) else {
        throw URLPreviewGeneratorError.failedToInitializePlugin
    }
    
    guard let mPreview = MicrolinkPreview(apiKey: nil) else {
        throw URLPreviewGeneratorError.failedToInitializePlugin
    }

    PreviewManager.session.add(source: msPreview)
    PreviewManager.session.add(source: adaPreview)
    PreviewManager.session.add(source: mPreview)
  1. Optionally add some filtering:
    // I'm going to require that the linkData have at least some content
    PreviewManager.session.linkDataFilter = { linkData in
        return linkData.description != nil ||
            linkData.icon != nil ||
            linkData.image != nil
    }
  1. Given that you have a URL that you want to generate a preview for:
    PreviewManager.session.getLinkData(url: url) { linkData in
        logger.debug("linkData: \(String(describing: linkData))")
        completion(linkData)
    }
  1. Use this resulting linkData to render a preview:
    let preview = LinkPreview.create(with: linkData) { loadedImage in
        // This is optional. Only needed if, for example, you need the UIImage for purposes other than showing it on the screen.
        model.loadedImage = loadedImage
    }
    
    // Add the `preview` to your view hierarchy. 

Installation

Cocoapods

SMLinkPreview is available through CocoaPods. To install it, simply add the following line to your Podfile:

pod 'SMLinkPreview'

or

pod 'SMLinkPreview', :git => 'https://github.com/crspybits/SMLinkPreview.git'

Swift Package Manager

It is also available through the Swift Package Manager. To install, add the following line to your Package.swift file as a dependency:

.package(url: "https://github.com/crspybits/SMLinkPreview.git", from: "0.2.0")

Author

crspybits, chris@SpasticMuffin.biz

License

SMLinkPreview is available under the MIT license. See the LICENSE file for more info.

View on GitHub
GitHub Stars9
CategoryDevelopment
Updated2y ago
Forks3

Languages

Swift

Security Score

75/100

Audited on Sep 10, 2023

No findings