iOS
Topsort’s Swift library enables our clients to easily send auction requests and track events within Android applications.
How it Works
Install the library using package.swift
let package = Package( ... dependencies: [ .package(url: "https://github.com/Topsort/topsort.swift.git", from: "1.0.0"), ] ...)
Configure and initialize the package.
import SwiftUIimport Topsort
@mainstruct MyApp: App { init() { Topsort.shared.configure(apiKey: "your-api-key", url: "https://api.topsort.com") } var body: some Scene { WindowGroup { ContentView() } }}
Requesting Auctions
This is a sample code on how to create an auction request using our library. View all auction models and their definitions in the Swift package link.
import SwiftUIimport 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)
Reporting Events
This is a sample code on how to report events using our library. View all event models and their definitions in the Swift package link.
Impressions and Clicks
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()) } }}
Purchases
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() }}
Displaying Banners
With our library, you can easily create and display banners using the TopsortBanner
view and its bannerAuctionBuilder
. This allows for a flexible configuration and provides callbacks for different stages of the banner’s lifecycle. 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 buttonClickedAction
callback, you can add logic to execute when the banner is clicked, such as redirecting to a product page.
import TopsortBannersimport SwiftUI // Import SwiftUI
struct ContentView: View { var body: some View { TopsortBanner(bannerAuctionBuilder: .init(slotId: "slotId", deviceType: "device")) .contentMode(.fill) // Example content mode .onNoWinners({ // callback when no winners are returned }) .onError({ error in // callback when an error occurs }) .onImageLoad({ // callback when image is loaded }) .buttonClickedAction({ response in // callback when button is clicked // Add logic here, e.g., navigate using the response }) .frame(maxHeight: 50) // Example frame modifier .clipped() // Example clipped modifier }}