Device Detection

Pengenalan Device Detection

Device Detection adalah fitur yang memungkinkan aplikasi mendeteksi dan merespons secara berbeda berdasarkan perangkat yang digunakan oleh pengguna. NexaController menyediakan berbagai method untuk mendeteksi jenis perangkat, browser, dan platform, sehingga Anda dapat menyesuaikan pengalaman pengguna sesuai dengan karakteristik perangkat mereka.

NexaAgent

NexaController menggunakan class NexaAgent untuk mendeteksi dan menganalisis user agent. Anda dapat mengakses instance NexaAgent dengan method getAgent():


// Mendapatkan instance NexaAgent
$agent = $this->getAgent();

// Menggunakan NexaAgent untuk mendapatkan informasi perangkat
$browser = $agent->getBrowser();
$platform = $agent->getPlatform();
$device = $agent->getDevice();
        

Deteksi Jenis Perangkat

NexaController menyediakan beberapa method untuk mendeteksi jenis perangkat:


// Memeriksa apakah perangkat adalah mobile
$isMobile = $this->isMobile();

// Memeriksa apakah perangkat adalah tablet
$isTablet = $this->isTablet();

// Memeriksa apakah perangkat adalah desktop
$isDesktop = $this->isDesktop();

// Memeriksa apakah request berasal dari bot
$isBot = $this->isBot();

// Contoh penggunaan dalam controller
public function index(): void
{
    if ($this->isMobile()) {
        // Render tampilan mobile
        $this->render('mobile/index');
    } elseif ($this->isTablet()) {
        // Render tampilan tablet
        $this->render('tablet/index');
    } else {
        // Render tampilan desktop
        $this->render('desktop/index');
    }
}
        

Auto Detect Device Type

NexaController menyediakan method autoDetectDeviceType() untuk otomatis mendeteksi jenis perangkat dan mengatur device type yang sesuai:


// Auto detect device type
$this->autoDetectDeviceType();

// Contoh penggunaan dalam controller
public function index(): void
{
    // Otomatis mendeteksi jenis perangkat dan mengatur device type
    $this->autoDetectDeviceType();
    
    // Render template (akan menggunakan template sesuai device type)
    $this->render('index');
}
        

Method ini akan otomatis mengatur device type menjadi 'mobile', 'tablet', atau 'desktop' berdasarkan hasil deteksi. Kemudian, saat merender template, NexaController akan mencari template yang sesuai dengan device type tersebut.

Set Device Type

Anda juga dapat mengatur device type secara manual dengan method setDeviceType():


// Mengatur device type secara manual
$this->setDeviceType('mobile');

// Contoh penggunaan dalam controller
public function index(): void
{
    // Mengatur device type berdasarkan parameter
    $deviceType = $this->getParam('device', 'desktop');
    $this->setDeviceType($deviceType);
    
    // Render template (akan menggunakan template sesuai device type)
    $this->render('index');
}
        

Get Device Type

Anda dapat mendapatkan device type saat ini dengan method getDeviceType():


// Mendapatkan device type saat ini
$deviceType = $this->getDeviceType();

// Contoh penggunaan dalam controller
public function index(): void
{
    // Auto detect device type
    $this->autoDetectDeviceType();
    
    // Mendapatkan device type hasil deteksi
    $deviceType = $this->getDeviceType();
    
    // Assign device type ke template
    $this->assignVar('device_type', $deviceType);
    
    // Render template
    $this->render('index');
}
        

Browser dan Platform Info

NexaController menyediakan beberapa method untuk mendapatkan informasi browser dan platform:


// Mendapatkan informasi browser
$browserInfo = $this->getBrowserInfo();

// Mendapatkan informasi browser (detail)
$browser = $this->getBrowser();

// Mendapatkan informasi platform
$platform = $this->getPlatform();

// Mendapatkan informasi perangkat
$device = $this->getDevice();

// Mendapatkan IP client
$ip = $this->getRealIP();

// Mendapatkan informasi IP
$ipInfo = $this->getIPInfo();

// Contoh penggunaan dalam controller
public function deviceInfo(): void
{
    // Mendapatkan informasi perangkat
    $browserInfo = $this->getBrowserInfo();
    $platform = $this->getPlatform();
    $device = $this->getDevice();
    $ip = $this->getRealIP();
    
    // Assign informasi ke template
    $this->assignVars([
        'browser_info' => $browserInfo,
        'platform' => $platform,
        'device' => $device,
        'ip' => $ip
    ]);
    
    // Render template
    $this->render('device_info');
}
        

Device Capabilities

Anda dapat mendapatkan informasi tentang kemampuan perangkat dengan method getDeviceCapabilities():


// Mendapatkan kemampuan perangkat
$capabilities = $this->getDeviceCapabilities();

// Contoh penggunaan dalam controller
public function features(): void
{
    // Mendapatkan kemampuan perangkat
    $capabilities = $this->getDeviceCapabilities();
    
    // Assign kemampuan ke template
    $this->assignVar('capabilities', $capabilities);
    
    // Render template
    $this->render('features');
}
        

Security Info

Anda dapat mendapatkan informasi keamanan dengan method getSecurityInfo():


// Mendapatkan informasi keamanan
$securityInfo = $this->getSecurityInfo();

// Contoh penggunaan dalam controller
public function security(): void
{
    // Mendapatkan informasi keamanan
    $securityInfo = $this->getSecurityInfo();
    
    // Assign informasi ke template
    $this->assignVar('security_info', $securityInfo);
    
    // Render template
    $this->render('security');
}
        

Full Analysis

Untuk mendapatkan analisis lengkap tentang perangkat, browser, platform, dan lainnya, gunakan method getFullAnalysis():


// Mendapatkan analisis lengkap
$analysis = $this->getFullAnalysis();

// Contoh penggunaan dalam controller
public function analysis(): void
{
    // Mendapatkan analisis lengkap
    $analysis = $this->getFullAnalysis();
    
    // Assign analisis ke template
    $this->assignVar('analysis', $analysis);
    
    // Render template
    $this->render('analysis');
}
        

Assign Agent Data

Anda dapat menetapkan data agent ke template dengan method assignAgentData():


// Menetapkan data agent ke template
$this->assignAgentData();

// Menetapkan data agent ke template dengan prefix kustom
$this->assignAgentData('device_');

// Menetapkan data agent ke template dengan analisis lengkap
$this->assignAgentData('agent_', true);

// Contoh penggunaan dalam controller
public function deviceInfo(): void
{
    // Menetapkan data agent ke template
    $this->assignAgentData('device_');
    
    // Render template
    $this->render('device_info');
}
        

Di template, data agent akan tersedia sebagai variabel dengan prefix yang ditentukan:


<div class="device-info">
    <h2>Device Information</h2>
    <p><strong>Browser:</strong> {{device_browser_name}} {{device_browser_version}}</p>
    <p><strong>Platform:</strong> {{device_platform_name}} {{device_platform_version}}</p>
    <p><strong>Device:</strong> {{device_device_type}}</p>
    <p><strong>Mobile:</strong> {{#if device_is_mobile}}Yes{}No{{/if}}</p>
    <p><strong>Tablet:</strong> {{#if device_is_tablet}}Yes{}No{{/if}}</p>
    <p><strong>Desktop:</strong> {{#if device_is_desktop}}Yes{}No{{/if}}</p>
    <p><strong>Bot:</strong> {{#if device_is_bot}}Yes{}No{{/if}}</p>
</div>
        

Agent JSON

Anda dapat mendapatkan data agent dalam format JSON dengan method getAgentJson():


// Mendapatkan data agent dalam format JSON
$agentJson = $this->getAgentJson();

// Mendapatkan data agent dalam format JSON dengan pretty print
$agentJson = $this->getAgentJson(true);

// Contoh penggunaan dalam controller
public function apiDeviceInfo(): void
{
    // Mendapatkan data agent dalam format JSON
    $agentJson = $this->getAgentJson(true);
    
    // Output JSON
    header('Content-Type: application/json');
    echo $agentJson;
    exit;
}
        

Debug Agent

Untuk debugging, Anda dapat menggunakan method debugAgent():


// Debug agent
$this->debugAgent();

// Debug agent dengan headers
$this->debugAgent(true);

// Contoh penggunaan dalam controller
public function debug(): void
{
    if ($this->getParam('debug') === '1') {
        // Debug agent dengan headers
        $this->debugAgent(true);
        exit;
    }
    
    // Render template
    $this->render('debug');
}
        

Custom Agent

Anda dapat membuat instance NexaAgent kustom dengan method createCustomAgent():


// Membuat instance NexaAgent kustom
$customAgent = $this->createCustomAgent('Mozilla/5.0 (iPhone; CPU iPhone OS 14_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0 Mobile/15E148 Safari/604.1');

// Contoh penggunaan dalam controller
public function testAgent(): void
{
    // Membuat instance NexaAgent kustom
    $customAgent = $this->createCustomAgent('Mozilla/5.0 (iPhone; CPU iPhone OS 14_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0 Mobile/15E148 Safari/604.1');
    
    // Mendapatkan informasi dari custom agent
    $browser = $customAgent->getBrowser();
    $platform = $customAgent->getPlatform();
    $device = $customAgent->getDevice();
    
    // Assign informasi ke template
    $this->assignVars([
        'browser' => $browser,
        'platform' => $platform,
        'device' => $device
    ]);
    
    // Render template
    $this->render('test_agent');
}
        

Compare Agents

Anda dapat membandingkan dua user agent dengan method compareAgents():


// Membandingkan dua user agent
$comparison = $this->compareAgents('Mozilla/5.0 (iPhone; CPU iPhone OS 14_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0 Mobile/15E148 Safari/604.1');

// Contoh penggunaan dalam controller
public function compareAgents(): void
{
    // Mendapatkan user agent dari parameter
    $otherUserAgent = $this->getParam('user_agent', '');
    
    if ($otherUserAgent) {
        // Membandingkan dengan user agent saat ini
        $comparison = $this->compareAgents($otherUserAgent);
        
        // Assign hasil perbandingan ke template
        $this->assignVar('comparison', $comparison);
    }
    
    // Render template
    $this->render('compare_agents');
}
        

Browser Compatibility

Anda dapat memeriksa kompatibilitas browser dengan method getBrowserCompatibility():


// Mendapatkan informasi kompatibilitas browser
$compatibility = $this->getBrowserCompatibility();

// Contoh penggunaan dalam controller
public function compatibility(): void
{
    // Mendapatkan informasi kompatibilitas browser
    $compatibility = $this->getBrowserCompatibility();
    
    // Assign informasi ke template
    $this->assignVar('compatibility', $compatibility);
    
    // Render template
    $this->render('compatibility');
}
        

Best Practices

Berikut adalah beberapa praktik terbaik dalam menggunakan device detection:

  • Gunakan autoDetectDeviceType() untuk otomatis mendeteksi jenis perangkat
  • Buat template yang responsif untuk berbagai jenis perangkat
  • Gunakan assignAgentData() untuk menetapkan data agent ke template
  • Gunakan informasi perangkat untuk mengoptimalkan pengalaman pengguna
  • Pertimbangkan untuk menyediakan versi alternatif dari fitur yang tidak didukung oleh semua perangkat
  • Jangan terlalu bergantung pada deteksi perangkat untuk fitur kritis
  • Gunakan progressive enhancement untuk memastikan aplikasi berfungsi di semua perangkat