Dynamic Link
SDK Version Selection
Choose your SDK version below:
- Apptrove SDK → Recommended for all projects (Latest: v2.0.1)
- Trackier SDK → Will be deprecated in May 2026 (v1.x.xx)
Use the tabs below to view dynamic link code for your chosen SDK.
Dynamic links allow you to direct users to specific in-app content, track campaign performance, and handle platform-specific redirects (e.g., Play Store, iOS, desktop). With the Apptrove iOS SDK, you can create dynamic links programmatically, embedding attribution and deep link parameters to enhance user acquisition and engagement.
Overview
Dynamic links provide a flexible way to route users based on their platform and context:
- Purpose: Generate links for campaigns, deep linking to specific app content.
- Use Case: Create a link like
https://vistmarket.shop/78R2J2that directs users to a product page with parameters (productid=jeans) and tracks campaign data (campaign=my_campaign).
Key Features:
- Deep link to in-app destinations
- Attribution parameters for tracking
- Platform-specific redirects (Android, iOS, desktop)
- Social media previews for sharing
Example Link:
- Generated:
https://vistmarket.shop/78R2J2?param1=value1&campaign=my_campaign - Redirects to:
https://apptrove.com?utm_redirect=sdk_linkor App Store/Play Store if app not installed
Configure Apptrove Panel
- Log in to the Apptrove Panel.
- Go to Dynamic Links > Create Template.
- Set a Template ID (e.g.,
78R2J2). - Configure the template and save. Note the template ID for implementation.
Implementation
- ✓ Apptrove SDK (Recommended)
- Trackier SDK (Deprecating May 2026)
DynamicLink.swift
import UIKit
import ApptroveSDK // or import apptrove_ios_sdk
@objc private func didTapCreateDynamicLink() {
let dynamicLink = DynamicLink.Builder()
.setTemplateId("PQBdiM")
.setLink("https://apptrove.u9ilnk.me?dlv=product")
.setDomainUriPrefix("apptrove.u9ilnk.me")
.setDeepLinkValue("productios")
.setAndroidParameters(
AndroidParameters.Builder()
.setRedirectLink("https://play.google.com/store/apps/details?id=com.your.app")
.build()
)
.setSDKParameters(["param1": "value1", "param2": "value2"])
.setAttributionParameters(
channel: "my_channel",
campaign: "my_campaign",
mediaSource: "at_invite",
p1: "param1_value",
p2: "param2_value"
)
.setIosParameters(
IosParameters.Builder()
.setRedirectLink("https://apps.apple.com/us/app/your-app/id123456789")
.build()
)
.setDesktopParameters(
DesktopParameters.Builder()
.setRedirectLink("https://www.yourdomain.com")
.build()
)
.setSocialMetaTagParameters(
SocialMetaTagParameters.Builder()
.setTitle("New Offer Buy 1 Get 2 Free")
.setDescription("Check out our new deals!")
.setImageLink("https://yourdomain.com/image.jpg")
.build()
)
.build()
if #available(iOS 13.0, *) {
AppTroveSDK.createDynamicLink(dynamicLink: dynamicLink, onSuccess: { [weak self] link in
DispatchQueue.main.async {
self?.dynamicLinkResultLabel.text = "Dynamic Link: \(link)"
}
}, onFailure: { [weak self] error in
DispatchQueue.main.async {
self?.dynamicLinkResultLabel.text = "Failed: \(error)"
}
})
} else {
dynamicLinkResultLabel.text = "iOS 13+ required"
}
}
DynamicLink.swift
import UIKit
import TrackierSDK // or import trackier_ios_sdk
@objc private func didTapCreateDynamicLink() {
let dynamicLink = DynamicLink.Builder()
.setTemplateId("PQBdiM")
.setLink("https://trackier.u9ilnk.me?dlv=product")
.setDomainUriPrefix("trackier.u9ilnk.me")
.setDeepLinkValue("productios")
.setAndroidParameters(
AndroidParameters.Builder()
.setRedirectLink("https://play.google.com/store/apps/details?id=com.your.app")
.build()
)
.setSDKParameters(["param1": "value1", "param2": "value2"])
.setAttributionParameters(
channel: "my_channel",
campaign: "my_campaign",
mediaSource: "at_invite",
p1: "param1_value",
p2: "param2_value"
)
.setIosParameters(
IosParameters.Builder()
.setRedirectLink("https://apps.apple.com/us/app/your-app/id123456789")
.build()
)
.setDesktopParameters(
DesktopParameters.Builder()
.setRedirectLink("https://www.yourdomain.com")
.build()
)
.setSocialMetaTagParameters(
SocialMetaTagParameters.Builder()
.setTitle("New Offer Buy 1 Get 2 Free")
.setDescription("Check out our new deals!")
.setImageLink("https://yourdomain.com/image.jpg")
.build()
)
.build()
if #available(iOS 13.0, *) {
TrackierSDK.createDynamicLink(dynamicLink: dynamicLink, onSuccess: { [weak self] link in
DispatchQueue.main.async {
self?.dynamicLinkResultLabel.text = "Dynamic Link: \(link)"
}
}, onFailure: { [weak self] error in
DispatchQueue.main.async {
self?.dynamicLinkResultLabel.text = "Failed: \(error)"
}
})
} else {
dynamicLinkResultLabel.text = "iOS 13+ required"
}
}
Best Practices
- Template Management: Define templates in the Apptrove Panel before use in the SDK.
- Fallback Redirects: Always provide fallback URLs for platforms where the app might not be installed.
- Security: Do not embed sensitive information directly in dynamic link parameters.
For further assistance, refer to the Apptrove Documentation Portal or contact Apptrove support at support@apptrove.com.