Docs

SDK Configuration

Point the Grovs mobile SDKs to your self-hosted backend.

By default, the Grovs SDKs connect to the managed Grovs cloud. To use your self-hosted backend instead, pass your server's domain when initializing the SDK.

Before configuring the SDKs, make sure your backend and dashboard are deployed and running. You'll also need an API key — create one from your self-hosted dashboard after setting up your first project.

iOS

Pass the baseURL parameter when calling configure:

Swift
import Grovs
 
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    Grovs.configure(
        APIKey: "your-api-key",
        useTestEnvironment: false,
        baseURL: "https://yourdomain.com",
        delegate: self
    )
    return true
}

The baseURL should be the root domain of your backend (e.g. https://yourdomain.com). The SDK automatically appends the correct API paths and resolves the SDK subdomain.

The rest of the iOS setup (delegate methods, deep linking, etc.) remains the same as in the iOS Quick Start.

Android

Pass the base URL when calling configure:

Kotlin
class MyApplication : Application() {
    override fun onCreate() {
        super.onCreate()
        Grovs.configure(this, "your-api-key", baseURL = "https://yourdomain.com")
    }
}

The rest of the Android setup (intent filters, lifecycle forwarding, etc.) remains the same as in the Android Quick Start.

Update your intent filters

When self-hosting, replace the default Grovs hosts in your AndroidManifest.xml intent filters with your own domain:

XML
<!-- Universal links (production) — use your go subdomain -->
<intent-filter android:autoVerify="true">
    <action android:name="android.intent.action.VIEW" />
    <category android:name="android.intent.category.DEFAULT" />
    <category android:name="android.intent.category.BROWSABLE" />
    <data android:scheme="https" android:host="go.yourdomain.com" />
</intent-filter>

Flutter

Add the baseURL to your AndroidManifest.xml and Info.plist configuration:

Android

Add a meta-data entry inside the <application> tag:

XML
<application>
    <meta-data android:name="grovs_api_key" android:value="YOUR_API_KEY" />
    <meta-data android:name="grovs_use_test_environment" android:value="false" />
    <meta-data android:name="grovs_base_url" android:value="https://yourdomain.com" />
</application>

iOS

Add the base URL to Info.plist:

XML
<key>GrovsApiKey</key>
<string>YOUR_API_KEY</string>
<key>GrovsUseTestEnvironment</key>
<false/>
<key>GrovsBaseURL</key>
<string>https://yourdomain.com</string>

Update your associated domains to use your own domain:

applinks:go.yourdomain.com

The rest of the Flutter setup remains the same as in the Flutter Quick Start.

React Native

iOS side

In your AppDelegate.swift, pass the base URL:

Swift
import Grovs
 
override func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    Grovs.configure(
        APIKey: "your-api-key",
        useTestEnvironment: false,
        baseURL: "https://yourdomain.com",
        delegate: self
    )
    return true
}

Android side

In your MainApplication class:

Kotlin
override fun onCreate() {
    super.onCreate()
    Grovs.configure(this, "your-api-key", baseURL = "https://yourdomain.com")
}

Update intent filters in AndroidManifest.xml to use your domain as described in the Android section above.

The rest of the React Native setup remains the same as in the React Native Quick Start.

Web

Pass the base URL when creating the SDK instance:

import Grovs from 'grovs';
 
const grovs = new Grovs('your-api-key', (data) => {
    console.log('Link data:', data);
}, { baseURL: 'https://yourdomain.com' });
 
grovs.start();

The rest of the Web setup remains the same as in the Web Quick Start.

When self-hosting, your deep links use your own domain instead of the default Grovs domains. Update your app's associated domains configuration:

PlatformConfiguration
iOSAdd applinks:go.yourdomain.com in Xcode under Signing & Capabilities → Associated Domains
AndroidUpdate intent filter android:host to go.yourdomain.com in AndroidManifest.xml

For universal links / app links to work, the backend must be reachable at your domain and serve the /.well-known/apple-app-site-association and /.well-known/assetlinks.json files. The Grovs backend generates these automatically — just make sure the go. subdomain is properly configured in DNS.

Verifying the connection

After configuring the SDK, enable debug logging to confirm it connects to your backend:

Swift
Grovs.setDebug(level: .info)

Check the console output to verify the SDK is communicating with sdk.yourdomain.com rather than the default Grovs cloud.