Web2Wave is a lightweight Swift package that provides a simple interface for managing user subscriptions and properties through a REST API.
- Fetch subscription status for users
- Check for active subscriptions
- Manage user properties
- Set third-parties profiles
- Thread-safe singleton design
- Async/await API support
- Built-in error handling
Add the following to your Package.swift file:
dependencies: [
.package(url: "https://github.com/web2wave/web2wave_swift.git", from: "1.0.0")
]Before using Web2Wave, you need to configure the base URL and API key:
Web2Wave.shared.apiKey = "your-api-key"// Fetch subscriptions
let status = await Web2Wave.shared.fetchSubscriptions(web2waveUserId: "user123")
// Check if user has an active subscription
let isActive = await Web2Wave.shared.hasActiveSubscription(web2waveUserId: "user123")// Fetch user properties
if let properties = await Web2Wave.shared.fetchUserProperties(web2waveUserId: "user123") {
print("User properties: \(properties)")
}
// Update a user property
let result = await Web2Wave.shared.updateUserProperty(
web2waveUserId: "user123",
property: "preferredTheme",
value: "dark"
)
switch result {
case .success:
print("Property updated successfully")
case .failure(let error):
print("Failed to update property: \(error)")
}// Save Adapty profileID
let result = await Web2Wave.shared.setAdaptyProfileID(
web2waveUserId: "user123",
adaptyProfileID: "{adaptyProfileID}"
)
switch result {
case .success:
print("ProfileID saved")
case .failure(let error):
print("Failed to save profileID: \(error)")
}
// Save Revenue Cat profileID
let _ = await Web2Wave.shared.setRevenuecatProfileID(
web2waveUserId: "user123",
revenueCatProfileID: "{revenueCatProfileID}"
)
// Save Qonversion profileID
let _ = await Web2Wave.shared.setQonversionProfileID(
web2waveUserId: "user123",
qonversionProfileID: "{qonversionProfileID}"
)//Extend Web2WaveWebListener class to receive events
extension ViewController: Web2WaveWebListener {
func onEvent(event: String, data: [String : Any]?) {
print("Event received: \(event), data: \(data ?? [:])")
}
func onClose(data: [String : Any]?) {
print("WebView closed with data: \(data ?? [:])")
Web2Wave.shared.closeWebView(currentVC: self)
}
func onQuizFinished(data: [String : Any]?) {
print("Quiz finished! Result: \(data ?? [:])")
Web2Wave.shared.closeWebView(currentVC: self)
}
}
//Open web page with your url
Web2Wave.shared.showWebView(
currentVC: self,
urlString: url,
topOffset: topOffset,
bottomOffset: bottomOffset,
delegate: self,
backgroundColor: backgroundColor
)
//Close web page
Web2Wave.shared.closeWebView(currentVC: self)The backgroundColor parameter in showWebView function is optional. If not provided, the default background color will be white.
The singleton instance of the Web2Wave client.
Fetches the subscription status for a given user ID.
Checks if the user has an active subscription (including trial status).
Retrieves all properties associated with a user.
updateUserProperty(web2waveUserId: String, property: String, value: String) async -> Result<Void, Error>
Updates a specific property for a user.
Set Revenuecat profileID
Set Adapty profileID
Set Qonversion ProfileID
- iOS 13.0+ / macOS 10.15+
- Swift 5.5+
- Xcode 13.0+
MIT
Igor Kamenev