Skip to main content

Available Permissions

PermissionUnlocksRequired For
MICROPHONEVoice input, audio processingTranscription, audio chunks
LOCATIONGPS coordinatesLocation tracking
BACKGROUND_LOCATIONLocation when app inactiveBackground tracking
CAMERAPhotos, video streamingPhoto capture, RTMP streaming
CALENDARCalendar eventsEvent notifications
READ_NOTIFICATIONSPhone notificationsNotification filtering
POST_NOTIFICATIONSSend notificationsPush notifications

How Permissions Work

  1. Declare in Developer Console - Set required permissions for your app
  2. User approval - Users see and approve permissions when installing
  3. Automatic enforcement - Cloud blocks access to features without permission
  4. No code needed - Just declare permissions, SDK handles the rest

Setting Permissions

In the Developer Console:
  1. Open your app
  2. Go to “Permissions” section
  3. Click “Add Permission”
  4. Select permission type
  5. Add description (shown to users)
  6. Save
Example:
{
  "type": "MICROPHONE",
  "description": "To listen to your voice commands"
}

Permission Descriptions

Write clear descriptions explaining why you need each permission:
✅ Good:
"To transcribe your voice commands and control the app hands-free"

❌ Avoid:
"Microphone access"

What Each Permission Unlocks

MICROPHONE

// These require MICROPHONE permission:
session.events.onTranscription((data) => {});
session.events.onAudioChunk((data) => {});
session.events.onVAD((data) => {});

LOCATION

// These require LOCATION permission:
session.location.subscribeToStream({ accuracy: 'high' }, (data) => {});
const location = await session.location.getLatestLocation();

CAMERA

// These require CAMERA permission:
const photo = await session.camera.requestPhoto();
await session.camera.startStream({ rtmpUrl: 'rtmp://...' });

READ_NOTIFICATIONS

// These require READ_NOTIFICATIONS permission:
session.events.onPhoneNotification((data) => {});
session.events.onNotificationDismissed((data) => {});

CALENDAR

// Requires CALENDAR permission:
session.events.on(StreamType.CALENDAR_EVENT, (data) => {});

Runtime Behavior

Permission granted:
  • Events work normally
  • Data streams to your app
  • No errors
Permission not declared:
  • SDK shows warning in console
  • Events don’t fire
  • No data received
Permission denied by user:
  • Same as not declared
  • User must approve in settings to enable

Best Practices

Only request what you need:
// ✅ Good - minimal permissions
{
  "permissions": [
    { "type": "MICROPHONE", "description": "For voice commands" }
  ]
}

// ❌ Avoid - requesting everything
{
  "permissions": [
    { "type": "MICROPHONE", ... },
    { "type": "CAMERA", ... },
    { "type": "LOCATION", ... }
    // User less likely to install
  ]
}
Be transparent:
  • Explain why you need each permission
  • Use permissions for stated purpose only
  • Don’t request permissions you don’t use
No code needed:
  • Don’t check permissions in code
  • Declare in Developer Console
  • Cloud handles enforcement automatically

Troubleshooting

Events not firing:
  1. Check permission is declared in Developer Console
  2. Verify user approved permission
  3. Look for SDK warnings in console logs
SDK warnings:
⚠️ MICROPHONE permission not declared for com.example.myapp
Solution: Add permission in Developer Console

Next Steps