clients
Topsort.swift: Building iOS apps
Installation
-
Follow the steps on the Apple documentation to add a swift package to your project and use the Topsort SDK link while importing the package.
-
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()}}}
Usage
Auctions
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)
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
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 } }}