Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/topsort/topsort.swift
https://github.com/topsort/topsort.swift
Last synced: about 2 months ago
JSON representation
- Host: GitHub
- URL: https://github.com/topsort/topsort.swift
- Owner: Topsort
- License: mit
- Created: 2023-05-10T16:46:55.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2024-08-26T15:06:17.000Z (4 months ago)
- Last Synced: 2024-08-27T16:34:01.587Z (4 months ago)
- Language: Swift
- Size: 39.1 KB
- Stars: 0
- Watchers: 11
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# topsort.swift
## Install
### Using package.swift
```swift
let package = Package(
...
dependencies: [
.package(url: "https://github.com/Topsort/topsort.swift.git", from: "1.0.0"),
]
...
)
```## Usage
### Setup
```swift
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](https://github.com/Topsort/topsort.swift/blob/main/Sources/Topsort/Models/Auctions.swift).
```swift
import SwiftUI
import Topsortlet 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](https://github.com/Topsort/topsort.swift/blob/main/Sources/Topsort/Models/Events.swift).
#### Impression & click
```swift
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: Productprivate 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
```swift
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
```swift
import TopsortBannersstruct 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.