Apps & Multi-Platform Tracking
Apps allow you to track users across different platforms (web, iOS, Android) with separate SDK keys while managing everything in one place.
What are Apps?
Apps represent different platforms or properties where you track users:
- Web App: Your website or web application
- iOS App: Your iOS mobile application
- Android App: Your Android mobile application
Each app gets a unique SDK key for tracking, while all data flows into your Joryio organization.
Why Use Multiple Apps?
Track Across Platforms
See which users engage with your web app vs mobile apps:
User Journey:
1. Visits website (Web App)
2. Signs up on web
3. Downloads iOS app
4. Makes purchase on iOS
Segment by Platform
Target users based on platform usage:
Target: Users who have used iOS app but NOT Android app
Campaign: "Try our Android app"
Analyze Platform Performance
Compare metrics across platforms:
Web App:
- 10,000 active users
- 50,000 events/day
- Most used feature: Export
iOS App:
- 5,000 active users
- 25,000 events/day
- Most used feature: Camera
Creating an App
Step 1: Navigate to Apps
- Go to Settings → Apps
- Click Create App
Step 2: Configure App
- Name: Descriptive name (e.g., "My Website", "iOS App")
- Platform: Choose web, iOS, or Android
Step 3: Get Your SDK Key
After creation, you'll receive a unique SDK key:
jry_sdk_web_abc123... (Web)
jry_sdk_ios_def456... (iOS)
jry_sdk_android_ghi789... (Android)
SDK keys include the platform in the key itself for easy identification.
Using SDK Keys
- Web (JS)
- iOS (Swift)
- Android (Kotlin)
import JoryioSDK from '@joryio/web-sdk';
const joryio = new JoryioSDK({
sdkKey: 'jry_sdk_web_abc123...' // Your web app SDK key
});
import Joryio
Joryio.shared.initialize(
sdkKey: "jry_sdk_ios_def456...", // Your iOS app SDK key
apiHost: "api-eu1.joryio.com"
)
import io.joryio.sdk.Joryio
Joryio.initialize(
context = this,
sdkKey = "jry_sdk_android_ghi789...", // Your Android app SDK key
apiHost = "https://api-eu1.joryio.com"
)
Automatic App Metadata
All events tracked through an SDK automatically include app metadata:
{
"eventName": "Page Viewed",
"properties": {
"page": "/pricing",
// Automatically added:
"$app_id": "app_123",
"$app_name": "My Website",
"$platform": "web",
"$session_id": "session_456"
}
}
This enables powerful segmentation by app/platform.
App Analytics
View analytics for each app:
- Go to Settings → Apps
- Click View Analytics for an app
Metrics Available
Overall Stats:
- Total events tracked
- Active users (last 30 days)
- Last event timestamp
Events Over Time:
- Daily event volume
- Trend analysis
Top Events:
- Most frequently tracked events
- Event counts and percentages
Segment by App Usage
Create segments with the App / site usage filter (operators: used app / did not use app). Because an app already implies its platform, you target platforms by picking the matching app(s):
Example 1: Mobile-Only Users
Used app "iOS App"
AND
Did NOT use app "My Website"
Example 2: Cross-Platform Users
Used app "My Website"
AND
Used app "iOS App"
Example 3: App-Specific Behavior
Used app "iOS App"
AND
Performed "Order Completed" within last 30 days
Use for: Encourage mobile app adoption, platform-specific messaging
Managing Apps
View All Apps
Settings → Apps shows all your apps with:
- App name and platform
- SDK key (with copy button)
- Creation date
- Quick actions
Edit App
- Click app name or edit icon
- Update the name
- Click Save
The platform type cannot be changed after creation. Create a new app if needed.
Regenerate SDK Key
If an SDK key is compromised:
- Click Regenerate Key for the app
- Confirm the action
- Update your application with the new key
Regenerating an SDK key immediately invalidates the old key. Update your app before regenerating!
Delete App
- Click Delete for the app
- Confirm deletion
Deleting an app:
- Invalidates the SDK key (tracking stops)
- Events already ingested remain in your analytics store
- Cannot be undone
Best Practices
1. One App Per Platform
Create separate apps for each platform:
Good
- "My Website" (web)
- "iOS App" (iOS)
- "Android App" (Android)
Bad
- "All Platforms" (web) - mixing platforms
2. Descriptive Names
Use clear, recognizable names:
Good: "Production Web App", "iOS - App Store" Bad: "App 1", "Test"
3. Secure SDK Keys
- Never commit SDK keys to public repositories
- Use environment variables
- Regenerate if exposed
// Good: Use environment variables
const joryio = new JoryioSDK({
sdkKey: process.env.JORYIO_SDK_KEY
});
// Bad: Hardcoded key
const joryio = new JoryioSDK({
sdkKey: 'jry_sdk_web_abc123...'
});
Common Use Cases
1. Platform-Specific Campaigns
Send targeted messages based on platform:
Segment: iOS users who haven't updated in 30 days
Campaign: "New features in latest iOS app update"
2. Cross-Platform Analytics
Compare user engagement across platforms:
Query: How many users are active on both web and mobile?
Segment: Has used platform "web" AND has used platform "ios"
3. Platform Migration
Encourage users to try other platforms:
Segment: Active web users who haven't downloaded mobile app
Campaign: "Take us on the go - download our mobile app"
4. Platform-Specific Features
Track feature usage by platform:
Event: Feature Used
Properties: { feature: "camera", platform: "ios" }
Analysis: Camera feature only available on mobile
Multi-App User Journey
Track users across their entire journey:
Timeline for user_123:
Day 1 (Web App):
- Signup Completed
- Profile Created
- Viewed Pricing
Day 3 (iOS App):
- App Installed
- Login
- First Purchase
Day 7 (Web App):
- Login
- Settings Updated
Day 14 (Android App):
- App Installed
- Login
- Feature Used
All tracked automatically with app metadata!
Security & Access Control
SDK Key Permissions
SDK keys (client-side) can only:
- Track events
- Identify users
- Send user attributes
- Cannot access other organization data
- Cannot send campaigns
- Cannot delete users
API Key Permissions
API keys (server-side) are managed under Settings → API Keys and carry the permissions you grant them, which can include:
- All SDK operations
- Campaign management
- User queries
- Analytics access
API keys should only be used server-side. Use SDK keys for client-side tracking.
Troubleshooting
Events Not Showing Up
Check SDK key is correct:
// Enable debug mode
const joryio = new JoryioSDK({
sdkKey: 'jry_sdk_web_...',
enableDebug: true // See logs in console
});
Verify app is active:
- Go to Settings → Apps
- Check app status
- Confirm SDK key matches
Analytics Not Updating
Analytics update in real-time but may have a few seconds delay:
- Check "Last Event" timestamp
- Verify events are being tracked
- Try refreshing the page
Cross-Platform User Matching
Users are matched by:
- User ID (if identified)
- Anonymous ID (before identification)
Ensure you identify users consistently across platforms:
// Web
joryio.identify('user_123');
joryio.setAttributes({
email: 'user@example.com',
name: 'John Doe'
});
// iOS (same user ID)
Joryio.shared.identify("user_123")
Joryio.shared.setAttributes([
"email": "user@example.com",
"name": "John Doe"
])