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.
iOS
Pass the baseURL parameter when calling configure:
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:
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:
<!-- 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:
<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:
<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:
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:
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.
Associated Domains and deep links
When self-hosting, your deep links use your own domain instead of the default Grovs domains. Update your app's associated domains configuration:
| Platform | Configuration |
|---|---|
| iOS | Add applinks:go.yourdomain.com in Xcode under Signing & Capabilities → Associated Domains |
| Android | Update 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:
Grovs.setDebug(level: .info)Check the console output to verify the SDK is communicating with sdk.yourdomain.com rather than the default Grovs cloud.