Mobile Locker JavaScript SDK - Developer Guide
The Mobile Locker JavaScript SDK provides developers with comprehensive tools for integrating tracking, analytics, and Mobile Locker platform features into web applications and presentations.
Installation
Install the SDK via npm:
npm install @mobilelocker/mobilelocker-tracking
Basic Usage
ES Modules (Recommended)
import mobilelocker from '@mobilelocker/mobilelocker-tracking'; // Basic event tracking mobilelocker.logEvent('user_action', 'button_click', '/current-page', { buttonId: 'cta-button', section: 'hero' });
CommonJS
const mobilelocker = require('@mobilelocker/mobilelocker-tracking'); // Environment detection if (mobilelocker.isMobileLocker()) { console.log('Running in Mobile Locker environment'); }
Browser (UMD)
<script src="node_modules/@mobilelocker/mobilelocker-tracking/dist/index.js"></script> <script> // Note: In browser, the global is still MobileLocker for compatibility MobileLocker.logEvent('page', 'view', window.location.pathname); </script>
TypeScript Support
The SDK includes full TypeScript support with IntelliSense and auto-completion:
import mobilelocker from '@mobilelocker/mobilelocker-tracking'; // TypeScript will provide full type checking and auto-completion mobilelocker.setDebugMode(true); const logs: any[] = mobilelocker.getDebugLogs();
Core Features
1. Environment Detection
Detect the runtime environment to conditionally execute code:
// Check if running in any Mobile Locker environment if (mobilelocker.isMobileLocker()) { // Code specific to Mobile Locker } // Check if running in the native iOS/desktop app if (mobilelocker.isMobileLockerApp()) { // App-specific functionality } // Check if running in the browser version if (mobilelocker.isMobileLockerCDN()) { // Browser-specific functionality }
2. Event Tracking & Analytics
Track user interactions and custom events:
// Basic event tracking mobilelocker.logEvent('category', 'action', '/page-path', { customData: 'value' }); // Session modes for reporting mobilelocker.liveMode('/current-page'); // Count events in reports mobilelocker.practiceMode('/current-page'); // Exclude from reports
3. Form Handling & Data Capture
Submit form data to the Mobile Locker system:
// Submit form data const formData = { name: 'John Doe', email: 'john@example.com', company: 'Acme Corp' }; mobilelocker.submitForm('contact-form', formData) .then(() => console.log('Form submitted successfully')) .catch(error => console.error('Form submission failed:', error)); // Alternative method name mobilelocker.captureData('lead-form', formData);
4. User Storage (Persistent Data)
Save and retrieve user data across sessions:
// Save user data const userData = { preferences: { theme: 'dark' }, progress: 75 }; mobilelocker.saveUserStorage('user-preferences', userData) .then(() => console.log('Data saved')) .catch(error => console.error('Save failed:', error)); // Fetch user data for current user mobilelocker.fetchUserStorageForCurrentUser() .then(data => console.log('User storage:', data)); // Fetch user data for specific presentation mobilelocker.fetchUserStorageForPresentation(123) .then(data => console.log('Presentation storage:', data)); // Delete user data mobilelocker.deleteUserStorage('user-preferences') .then(() => console.log('Data deleted'));
5. Email & Communication
Send emails and share presentations:
// Send email mobilelocker.sendEmail( 'recipient@example.com', // To 'Subject Line', // Subject '<h1>HTML Email Body</h1>', // Body (HTML) 'attachments/file.pdf', // Attachment (optional) 'templates/email.html', // Template (optional) { customData: 'value' } // Additional data (optional) ); // Share presentation const recipients = [ { email: 'user1@example.com', name: 'User One' }, { email: 'user2@example.com', name: 'User Two' } ]; mobilelocker.sharePresentation( recipients, mobilelocker.notificationLevels.NOTIFY_EVERY, // Notification level true // Send reminders );
6. CRM Integration
Access CRM data (requires appropriate permissions):
// Get CRM accounts mobilelocker.getAccounts() .then(accounts => console.log('Accounts:', accounts)); // Get contacts mobilelocker.getContacts() .then(contacts => console.log('Contacts:', contacts)); // Get user contacts with pagination mobilelocker.getChunkedUserContacts(0, 100) .then(contacts => console.log('User contacts:', contacts)); // Get CRM users (requires iOS app 3.18.8+) mobilelocker.getCRMUsers() .then(users => console.log('CRM users:', users));
7. Presentation Management
Control presentation behavior:
// Get current presentation info mobilelocker.getPresentation() .then(presentation => console.log('Current presentation:', presentation)); // Get all accessible presentations mobilelocker.getPresentations() .then(presentations => console.log('Available presentations:', presentations)); // Open presentation by ID or name mobilelocker.openPresentationByID(123); mobilelocker.openPresentationByName('Demo Presentation'); // Show presentation picker mobilelocker.openPresentationPicker(); // Reload current presentation mobilelocker.reloadPresentation();
Debug Mode (Essential for Development)
The SDK includes a comprehensive debug mode system, especially useful when testing in the iOS app where console access is limited:
Enable Debug Mode
// Enable debug mode mobilelocker.setDebugMode(true); // Check if debug mode is active console.log('Debug mode:', mobilelocker.isDebugMode());
Retrieve Debug Logs Programmatically
Perfect for iOS app debugging where console.log isn't accessible:
// Get all debug logs const allLogs = mobilelocker.getDebugLogs(); console.log('Total debug entries:', allLogs.length); // Filter logs by category const requestLogs = mobilelocker.getDebugLogsFiltered({ category: 'request' }); // Filter logs by level const errorLogs = mobilelocker.getDebugLogsFiltered({ level: 'error' }); // Filter logs by time const recentLogs = mobilelocker.getDebugLogsFiltered({ since: new Date(Date.now() - 60000) // Last minute }); // Clear debug logs mobilelocker.clearDebugLogs();
Debug Categories
request
- HTTP request detailsresponse
- HTTP response detailsevent
- Event tracking and analyticserror
- Error context and debugginggeneral
- General SDK operations
Error Handling
The SDK provides structured error handling with detailed error information:
try { await mobilelocker.submitForm('contact-form', formData); } catch (error) { if (error instanceof mobilelocker.MobileLockerError) { console.error('SDK Error:', error.code, error.message); console.error('Response:', error.response); console.error('Original error:', error.originalError); // Get JSON representation console.error('Error details:', error.toJSON()); } }
Notification Levels
Use these constants for presentation sharing:
mobilelocker.notificationLevels.NOTIFY_NONE // 0 - Never notify mobilelocker.notificationLevels.NOTIFY_FIRST // 1 - First click only mobilelocker.notificationLevels.NOTIFY_EVERY // 2 - Every click mobilelocker.notificationLevels.NOTIFY_WEEKLY // 3 - Weekly summary mobilelocker.notificationLevels.NOTIFY_MONTHLY // 4 - Monthly summary
Browser Compatibility
- Modern Browsers: Chrome 60+, Firefox 55+, Safari 12+, Edge 79+
- Node.js: Version 16.0.0 or higher
- Mobile Locker iOS App: All versions
- Mobile Locker Desktop App: All versions
Common Use Cases
1. Track Page Views
// Track page navigation mobilelocker.logEvent('navigation', 'page_view', window.location.pathname);
2. Form Submission with Validation
function submitContactForm(formData) { // Validate data first if (!formData.email || !formData.name) { throw new Error('Required fields missing'); } return mobilelocker.submitForm('contact-form', formData); }
3. Conditional Feature Loading
if (mobilelocker.isMobileLockerApp()) { // Load native app features loadNativeFeatures(); } else if (mobilelocker.isMobileLockerCDN()) { // Load browser-specific features loadBrowserFeatures(); } else { // Load fallback features loadFallbackFeatures(); }
4. Debug Mode Setup for Testing
// Enable debug mode for development if (process.env.NODE_ENV === 'development') { mobilelocker.setDebugMode(true); // Log environment info console.log('SDK Environment:', { isMobileLocker: mobilelocker.isMobileLocker(), isMobileLockerApp: mobilelocker.isMobileLockerApp(), isMobileLockerCDN: mobilelocker.isMobileLockerCDN() }); }
5. Error Monitoring
// Set up global error handler for SDK errors window.addEventListener('unhandledrejection', (event) => { if (event.reason instanceof mobilelocker.MobileLockerError) { // Send to your error monitoring service console.error('Mobile Locker SDK Error:', event.reason.toJSON()); // Get debug logs for context const debugLogs = mobilelocker.getDebugLogs(); console.log('Debug context:', debugLogs.slice(-5)); // Last 5 entries } });
Troubleshooting
Debug Mode Not Working
- Ensure debug mode is enabled:
mobilelocker.setDebugMode(true)
- Check debug logs:
mobilelocker.getDebugLogs().length
- Verify environment detection is working
Form Submission Issues
- Enable debug mode and check request logs
- Verify you're in a Mobile Locker environment
- Check for validation errors in the response
CRM Data Access Issues
- Verify you're running in the Mobile Locker app
- Check user permissions for CRM access
- Ensure minimum iOS app version requirements are met
Network/API Issues
- Check debug logs for request/response details
- Verify JWT token is present and valid
- Check Mobile Locker environment detection
Support
For technical support and questions about the Mobile Locker SDK:
Email: support@mobilelocker.com
Documentation: https://help.mobilelocker.com/article/371-mobile-locker-javascript-sdk-developer-guide
When contacting support, please include:
- SDK version (
npm list @mobilelocker/mobilelocker-tracking
) - Environment (iOS app, browser, Node.js)
- Debug logs if applicable (
mobilelocker.getDebugLogs()
) - Code samples demonstrating the issue