QUICK_REFERENCE.md
7.89 KB
SwiftWarplyFramework Quick Reference
🚀 Essential Guide for Developers
Version: 2.1.0 | iOS: 17.0+ | Swift: 5.0+
📦 Installation
# Podfile
pod 'SwiftWarplyFramework', :git => 'https://git@git.warp.ly/open-source/warply_sdk_framework.git', :tag => ‘2.1.0’
⚡ Setup (AppDelegate)
import SwiftWarplyFramework
// Configure & Initialize
WarplySDK.shared.configure(webId: "your-web-id", merchantId: "your-merchant-id", environment: .production)
WarplySDK.shared.initialize { success in
print("SDK Ready: \(success)")
}
🔐 Authentication
// Login
WarplySDK.shared.verifyTicket(guid: "user-guid", ticket: "user-ticket") { response in
if response?.getStatus == 1 { /* Success */ }
}
// Async/Await
let response = try await WarplySDK.shared.verifyTicket(guid: "guid", ticket: "ticket")
// Logout
WarplySDK.shared.logout { response in /* Handle logout */ }
🎯 Campaigns
// Get Campaigns
WarplySDK.shared.getCampaigns(language: "en") { campaigns in
// Handle campaigns array
}
// Async/Await
let campaigns = try await WarplySDK.shared.getCampaigns(language: "en")
// Personalized Campaigns
let personalizedCampaigns = try await WarplySDK.shared.getCampaignsPersonalized(language: "en")
// Supermarket Campaign
WarplySDK.shared.getSupermarketCampaign(language: "en") { campaign in
// Handle supermarket campaign
}
🎫 Coupons
// Get Coupons
WarplySDK.shared.getCoupons(language: "en", completion: { coupons in
// Handle coupons
}, failureCallback: { errorCode in
// Handle error
})
// Async/Await
let coupons = try await WarplySDK.shared.getCoupons(language: "en")
// Coupon Sets
let couponSets = try await WarplySDK.shared.getCouponSets()
// Availability
WarplySDK.shared.getAvailableCoupons { availability in
// Handle availability data
}
🏪 Market Pass
// Market Pass Details
WarplySDK.shared.getMarketPassDetails(completion: { marketPass in
print("Balance: \(marketPass?.balance ?? 0)")
}, failureCallback: { errorCode in
// Handle error
})
// Async/Await
let marketPass = try await WarplySDK.shared.getMarketPassDetails()
// Supermarket History
let history = try await WarplySDK.shared.getRedeemedSMHistory(language: "en")
📡 Events
Modern EventDispatcher (Recommended)
class ViewController: UIViewController {
private var eventSubscriptions: [EventSubscription] = []
override func viewDidLoad() {
super.viewDidLoad()
// Subscribe to events
let subscription = WarplySDK.shared.subscribe(CampaignsRetrievedEvent.self) { event in
DispatchQueue.main.async {
// Update UI
}
}
eventSubscriptions.append(subscription)
}
deinit {
eventSubscriptions.removeAll() // Auto cleanup
}
}
Legacy SwiftEventBus
// Subscribe
SwiftEventBus.onMainThread(self, name: "campaigns_retrieved") { result in
// Handle event
}
// Cleanup
deinit {
SwiftEventBus.unregister(self)
}
⚠️ Error Handling
// Async/Await Error Handling
Task {
do {
let campaigns = try await WarplySDK.shared.getCampaigns(language: "en")
// Success
} catch let error as WarplyError {
switch error {
case .networkError: // Handle network error
case .authenticationFailed: // Handle auth error
case .invalidResponse: // Handle invalid response
case .dataParsingError: // Handle parsing error
case .unknownError(let code): // Handle unknown error
}
}
}
📱 Push Notifications
// AppDelegate
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
let tokenString = deviceToken.map { String(format: "%02.2hhx", $0) }.joined()
WarplySDK.shared.updateDeviceToken(tokenString)
}
func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable: Any]) {
if WarplySDK.shared.checkForLoyaltySDKNotification(userInfo) {
// Warply notification handled
}
}
⚙️ Configuration Properties
// Language
WarplySDK.shared.applicationLocale = "en" // or "el"
// Dark Mode
WarplySDK.shared.isDarkModeEnabled = true
// Analytics
WarplySDK.shared.trackersEnabled = true
// Network Status
let status = WarplySDK.shared.getNetworkStatus() // 1=connected, 0=disconnected, -1=unknown
🎯 State Management
// Campaigns
let campaigns = WarplySDK.shared.getCampaignList()
let allCampaigns = WarplySDK.shared.getAllCampaignList()
let carouselCampaigns = WarplySDK.shared.getCarouselList()
// Coupons
let activeCoupons = WarplySDK.shared.getCouponList()
let usedCoupons = WarplySDK.shared.getOldCouponList()
// Market Pass
let marketPass = WarplySDK.shared.getMarketPassDetails()
// Merchants
let merchants = WarplySDK.shared.getMerchantList()
🔧 Utilities
// Campaign URLs
let url = WarplySDK.shared.constructCampaignUrl(campaign)
let params = WarplySDK.shared.constructCampaignParams(campaign)
// UI Helpers
WarplySDK.shared.openSupermarketsMap(self) // Open map
WarplySDK.shared.openSuperMarketsFlow(self) // Open flow
WarplySDK.shared.showDialog(self, "Title", "Message") // Show alert
🚨 Common Patterns
Loading Data with Cache
func loadCampaigns() {
// Show cached data first
let cached = WarplySDK.shared.getCampaignList()
if !cached.isEmpty {
updateUI(with: cached)
}
// Fetch fresh data
Task {
do {
let fresh = try await WarplySDK.shared.getCampaigns(language: "en")
updateUI(with: fresh)
} catch {
// Keep cached data on error
}
}
}
Batch API Calls
Task {
async let campaigns = WarplySDK.shared.getCampaigns(language: "en")
async let coupons = WarplySDK.shared.getCoupons(language: "en")
async let marketPass = WarplySDK.shared.getMarketPassDetails()
do {
let (campaignData, couponData, marketData) = try await (campaigns, coupons, marketPass)
// Update UI with all data
} catch {
// Handle errors
}
}
Network Check Before API
func safeAPICall() {
guard WarplySDK.shared.getNetworkStatus() == 1 else {
showOfflineMessage()
return
}
// Proceed with API call
Task {
let campaigns = try await WarplySDK.shared.getCampaigns(language: "en")
// Handle success
}
}
📋 Available Events
Event | Type | Description |
---|---|---|
campaigns_retrieved |
CampaignsRetrievedEvent |
Campaigns loaded |
coupons_fetched |
CouponsRetrievedEvent |
Coupons loaded |
market_pass_details_fetched |
MarketPassDetailsEvent |
Market pass loaded |
ccms_retrieved |
CCMSRetrievedEvent |
CCMS campaigns loaded |
seasonals_retrieved |
SeasonalsRetrievedEvent |
Seasonal campaigns loaded |
dynatrace |
DynatraceEvent |
Analytics events |
🔍 Debug Info
print("SDK Version: 2.1.0")
print("App UUID: \(WarplySDK.shared.appUuid)")
print("Merchant ID: \(WarplySDK.shared.merchantId)")
print("Language: \(WarplySDK.shared.applicationLocale)")
print("Network: \(WarplySDK.shared.getNetworkStatus())")
print("Dark Mode: \(WarplySDK.shared.isDarkModeEnabled)")
💡 Best Practices
✅ Initialize in AppDelegate
✅ Use async/await for new code
✅ Handle errors properly
✅ Check network status
✅ Use weak self in closures
✅ Clean up event subscriptions
✅ Cache data when possible
❌ Don't ignore errors
❌ Don't initialize in ViewControllers
❌ Don't create retain cycles
❌ Don't forget to unregister events
For detailed documentation, see CLIENT_DOCUMENTATION.md