{{ __('platform.permissions_location_title') }}

{{ __('platform.permissions_location_description') }}

{{ __('platform.permissions_location_helper') }}

{{ __('platform.permissions_javascript_example') }}

// Get current location using AppBridge
AppBridge.getLocation()
    .then(result => {
        console.log(\`Location: \${result.latitude}, \${result.longitude}\`);
        console.log(\`Accuracy: \${result.accuracy}m\`);
    })
    .catch(err => {
        console.error('Location error:', err.message);
    });

ℹ️ Uses AppBridge.getLocation() which returns a Promise with latitude, longitude, accuracy, altitude, speed, and bearing.

{{ __('platform.permissions_camera_title') }}

{{ __('platform.permissions_camera_description') }}

{{ __('platform.permissions_camera_helper') }}

{{ __('platform.permissions_javascript_example') }}

// Take a photo using AppBridge
AppBridge.takePhoto()
    .then(result => {
        const img = document.createElement('img');
        img.src = 'data:image/jpeg;base64,' + result.data;
        document.body.appendChild(img);
    })
    .catch(err => {
        console.error('Camera error:', err.message);
    });

ℹ️ Uses AppBridge.takePhoto() which returns a Promise with base64-encoded image data.

{{ __('platform.permissions_storage_title') }}

{{ __('platform.permissions_storage_description') }}

{{ __('platform.permissions_storage_helper') }}

{{ __('platform.permissions_javascript_example') }}

// Pick image from gallery using AppBridge
AppBridge.pickImage()
    .then(result => {
        const img = document.createElement('img');
        img.src = 'data:image/jpeg;base64,' + result.data;
        document.body.appendChild(img);
    })
    .catch(err => {
        console.error('Gallery error:', err.message);
    });

ℹ️ Uses AppBridge.pickImage() which opens the gallery picker and returns base64-encoded image data.

{{ __('platform.permissions_microphone_title') }}

{{ __('platform.permissions_microphone_description') }}

{{ __('platform.permissions_microphone_helper') }}

{{ __('platform.permissions_javascript_example') }}

// Record audio using WebRTC
navigator.mediaDevices.getUserMedia({ audio: true })
    .then(stream => {
        const recorder = new MediaRecorder(stream);
        recorder.ondataavailable = (e) => {
            console.log('Audio data:', e.data);
        };
        recorder.start();
        setTimeout(() => recorder.stop(), 5000); // Stop after 5s
    })
    .catch(err => console.error('Microphone error:', err));

ℹ️ Uses standard getUserMedia() API. Works automatically when permission is enabled.

{{ __('platform.permissions_contacts_title') }}

{{ __('platform.permissions_contacts_description') }}

{{ __('platform.permissions_contacts_helper') }}

{{ __('platform.permissions_javascript_example') }}

// Get all contacts using AppBridge
AppBridge.getContacts()
    .then(result => {
        result.contacts.forEach(contact => {
            console.log(\`\${contact.name}: \${contact.phone}\`);
        });
    })
    .catch(err => {
        console.error('Contacts error:', err.message);
    });

ℹ️ Uses AppBridge.getContacts() which returns a Promise with an array of contact objects.

{{ __('platform.permissions_vibrate_title') }}

{{ __('platform.permissions_vibrate_description') }}

{{ __('platform.permissions_vibrate_helper') }}

{{ __('platform.permissions_javascript_example') }}

// Vibrate device using AppBridge
AppBridge.vibrate(200); // Vibrate for 200ms

// Show a toast notification
AppBridge.toast('Vibration triggered!');

ℹ️ Uses AppBridge.vibrate(ms) for haptic feedback. Duration is in milliseconds.