Docs
grovs.io Start for free

Quickstart

Integrate Grovs end to end in about 30 minutes.

Create a project, install and initialize the SDK, handle a deep link, and test it with a real link from the dashboard.

Using a coding agent? Build with AI has a prompt per platform that does steps 2 to 4 for you. New to Grovs? Read the Introduction.

Guided setup in the dashboard

Your first project opens a four-step guided setup that follows this page. It saves progress: reopen it from Finish setup under the project switcher.

StepWhat you doHow it's checked
Link domainPick a Grovs subdomain, which is ready right away, or use your own domain (paid plans).Saved when you continue.
Connect your appFor each platform (iOS, Android, Web), register the app, add the SDK and initialize it, then run the app.Live: see below.
LinksChoose where links go on each platform when the app isn't installed, and the share preview.Done once a fallback is set.
Try itCreate your first link, scan its QR code with your phone, and open it.Done once the link exists. It also shows Opened on your phone, live, once the link opens your app.

If someone else writes the code, Send to your developer invites them with a link to the connect step.

Is my SDK connected?

On Run your app, the last part of Connect your app, the dashboard shows Waiting for your app to open. It refreshes every few seconds until the SDK reports in, then shows Connected and how long ago.

PlatformConnected when
iOS, AndroidA device running the SDK was seen in the last 30 days. The app must start with the SDK configured; opening a link in a browser doesn't count.
WebThe Web SDK authenticated from one of your registered domains.

The check covers production and test, so a debug build with useTestEnvironment: true counts. Once done, the step stays done.

If it keeps waiting:

  1. Check the API key is the project's key, and the environment flag matches the build.
  2. Turn on debug logging (Grovs.setDebug(level: .info) on iOS) and look for an authentication error.
  3. On the web, check the page's origin is registered exactly, including the port on localhost. See Registering domains.
  4. See SDK configuration issues.

The Try it check uses the newest open of that link: an app open, install, reinstall or reactivation through it on a device running the SDK.

1
Create a project in the Grovs dashboard

Sign up at app.grovs.io and create a project. The guided setup starts on its own for your first project.

Copy your key from API Key in the dashboard sidebar. Each environment (test, production) has its own key: copy the one you build against.

Then set your redirect rules, domain and social preview. Redirect rules need a fallback URL before they save.

2
Install the SDK

Swift Package Manager

  1. In Xcode, go to File → Add Package Dependencies…
  2. Enter the repository URL: https://github.com/grovs-io/grovs-iOS.git
  3. Choose Up to Next Major Version starting at 3.1.0
  4. Click Next, then Finish

CocoaPods

Add to your Podfile, then run pod install:

Ruby
pod 'Grovs', '~> 3.1'
3
Initialize the SDK

Initialize the SDK in your AppDelegate:

AppDelegate.swift
Swift
import Grovs
 
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    Grovs.configure(APIKey: "your-api-key", useTestEnvironment: false, delegate: self) { success in
        if success {
            print("Grovs SDK is ready")
        }
    }
 
    return true
}

Without a SceneDelegate, forward these calls:

AppDelegate.swift
Swift
func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
    return Grovs.handleAppDelegate(continue: userActivity, restorationHandler: restorationHandler)
}
 
func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey: Any] = [:]) -> Bool {
    return Grovs.handleAppDelegate(open: url, options: options)
}

SceneDelegate apps forward different calls. See the iOS Quick Start for that variant, debug logging and user identity.

Match useTestEnvironment (testEnvironment on the web) to the key: test key → true, production key → false. A link from the other environment won't resolve its payload.

4
Handle a deep link

Register a handler. The SDK passes it the link and its payload whenever a Grovs link opens your app.

Conform to GrovsDelegate:

Swift
class YourViewController: UIViewController, GrovsDelegate {
 
    override func viewDidLoad() {
        super.viewDidLoad()
        Grovs.delegate = self
    }
 
    func grovsReceivedPayloadFromDeeplink(link: String?, payload: [String: Any]?, tracking: [String: Any]?) {
        // Route the user based on payload data
        if let screen = payload?["screen"] as? String {
            navigateTo(screen)
        }
    }
}

More options (past payloads, link details) in iOS Deep Linking.

5
Create your first link and test
  1. Select the environment (Production or Test) in the dashboard.
  2. Go to Links → Dynamic Links and click Add Link. In the guided setup, the Try it step makes this link and shows its QR code.
  3. Enter a custom path (for example /summer-sale) and a Link Name for internal use.
  4. Add key-value pairs under Data, for example screen: product or coupon: 25OFF.
  5. Click Create.

Link types, social previews, redirect overrides and tracking parameters are in How to Create a Link.

Open the link on a device:

DeviceResult
App installedThe app opens and your handler receives the link and payload.
App not installedThe store or fallback URL, per your redirect rules. After install, the payload still reaches your handler (deferred deep linking).
DesktopBy default, a Grovs page with a QR code and download links.

Where to next

Last updated 2026-10-27
Was this page helpful?