Skip to content

Topsort/topsort.swift

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

26 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

topsort.swift

Install

Using package.swift

let package = Package(
    ...
    dependencies: [
        .package(url: "https://github.com/Topsort/topsort.swift.git", from: "1.0.0"),
    ]
    ...
)

Usage

Setup

import SwiftUI
import Topsort

@main
struct MyApp: App {
    init() {
        Topsort.shared.configure(apiKey: "your-api-key", url: "https://api.topsort.com")
    }
    var body: some Scene {
        WindowGroup {
            ContentView()
        }
    }
}

Auctions

View all auction models and their definitions in the Swift package link.

import SwiftUI
import Topsort

let products = AuctionProducts(ids: ["p_dsad", "p_dvra", "p_oplf", "p_gjfo"])

let category = AuctionCategory(id: "c_fdfa")

let auctions = [
    Auction(type: "banners", slots: 1, slotId: "home-banner", device: "mobile", category: category),
    Auction(type: "listings", slots: 2, device: "mobile", products: products)
]
let result: AuctionResponse = await Topsort.shared.executeAuctions(auctions: auctions)

Events

View all event models and their definitions in the Swift package link.

Impression & click

struct Product {
    let id: String
    let image_url: URL
    let name: String
    let resolvedBidId: String?
    let price: Double
}

struct ProductView: View {
    @State
    public var product: Product

    private func event() -> Event {
        var event: Event;
        if (self.product.resolvedBidId != nil) {
            event = Event(resolvedBidId: self.product.resolvedBidId!, occurredAt: Date.now)
        } else {
            event = Event(entity: Entity(type: EntityType.product, id: self.product.id), occurredAt: Date.now)
        }
        return event
    }

    var body: some View {
        VStack {
            AsyncImage(url: self.product.image_url)
            Text(self.product.name)
        }
        .onAppear {
            Topsort.shared.track(impression: self.event())
        }
        .onTapGesture {
            Topsort.shared.track(click: self.event())
        }
    }
}

Purchase

struct ContentView: View {
    var myProduct = Product(id: "123", image_url: URL(string: "https://loremflickr.com/640/480?lock=1234")!, name: "My Product", resolvedBidId: "123", price: 12.00)
    var body: some View {
        VStack {
            ProductView(product: myProduct)
            Button("Purchase me!") {
                let item = PurchaseItem(productId: myProduct.id, unitPrice: myProduct.price)
                let event = PurchaseEvent(items: [item], occurredAt: Date.now)
                Topsort.shared.track(purchase: event)
            }
        }
        .padding()
    }
}

Banners

import TopsortBanners

struct ContentView: View {
    var body: some View {
        TopsortBanner(
            apiKey: "API_KEY",
            url: "https://api.topsort.com/v2",
            width: width,
            height: height,
            slotId: "slotId",
            deviceType: "device"
        ) { response in
            // function to execute when banner is clicked
        }
    }
}

This code will display a banner, send an impression event when the banner is shown, and send a click event when the banner is clicked. Inside the callback, you can add logic to execute when the banner is clicked, such as redirecting to the product page.

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages