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 the auction request for banners. 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.
response is an AuctionResponse object described in the AuctionResponse model.
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 } }}