Retrieving Kepler Device ID

:backhand_index_pointing_right: Bug Description

1. Summary Provide a brief description of the bug in the SDK and its impact on app functionality.

Bug Severity Select one that applies:

  • [x] Impacts operation of app

  • [ ] Blocks current development

  • [ ] Improvement suggestion

  • [ ] Issue with documentation

  • [ ] Other

2. Steps to Reproduce

  1. Launch the application on a Vega device or simulator.

  2. Call the SDK method used to retrieve the device ID (e.g., [Insert Exact SDK Method Name, e.g., VegaDeviceInfo.getDeviceId()]) from `@amazon-devices/react-native-device-info`.

  3. Output or log the returned string.

3. Observed Behavior Explain what actually happened, noting any discrepancies or malfunctions.

The SDK function responsible for retrieving the unique device ID is incorrectly returning the device’s model (e.g., the hardware model identifier) instead of a unique alphanumeric identifier for the specific hardware unit.

4. Expected Behavior Describe what you expected the SDK to do under normal operation.

The function should return a proper, unique Device ID string that uniquely identifies the individual user’s hardware device, strictly differentiating it from other devices of the exact same model.

4.a Possible Root Cause & Temporary Workaround Fill out anything you have tried. If you don’t know, N/A is acceptable

Possible Root Cause: The underlying native module mapping for the SDK’s Device ID getter is likely pointing to the system property for the hardware model rather than the secure device identifier. Temporary Workaround: Currently generating a random UUID string on first app launch and storing it locally via AsyncStorage/SecureStore to mimic a persistent device ID.

Package Version: `@amazon-devices/react-native-device-info: 2.0.1758683737`

App State: Foreground

5. Example Code Snippet / Screenshots / Screengrabs Include any relevant code or component setup in React Native that can help reproduce the bug.

JavaScript

import { useEffect } from 'react';
import { View, Text } from 'react-native';
// Replace with actual Vega SDK import
import DeviceInfo from '@amazon-devices/react-native-device-info'; 

export const ExampleComponent = () => {
  useEffect(() => {
    const fetchId = async () => {
      const deviceId = await DeviceInfo.getDeviceId();
      // LOG OUTPUT: Returns model number (e.g., "AFTT") instead of unique ID
      console.log("Retrieved Device ID:", deviceId); 
    };
    
    fetchId();
  }, []);

  return (
    <View>
      <Text>Testing Device ID SDK Method</Text>
    </View>
  );
};

Hello @Plash_Jindal

Welcome to Amazon Developer Community!

Thank you for the detailed report. This is expected behavior for getDeviceId() on Vega OS - it is not a bug.

Explanation:
On Vega OS, DeviceInfo.getDeviceId() returns the device model identifier (e.g., “AFTCA002”), which is consistent with how the upstream react-native-device-info
(GitHub - react-native-device-info/react-native-device-info: Device Information for React Native iOS and Android · GitHub) library defines this method. Per the upstream documentation, getDeviceId() returns the device hardware ID/model - not a unique per-device identifier. This is the same behavior as on Android .

To get a unique device identifier on Vega OS, use one of these alternatives:

  1. Device Serial Number (DSN) - The unique 16-character alphanumeric identifier for each physical device. This can be found at Settings → My Fire TV → About → Serial Number. However, there is currently no public SDK API to retrieve the DSN programmatically from within a Vega app.
  2. Advertising ID - If your use case allows it, use @amazon-devices/kepler-adid-retriever to get a unique per-device advertising identifier:
import { fetchAdvertisingId } from '@amazon-devices/kepler-adid-retriever';
                                                                                
     const adId = await fetchAdvertisingId();                                   
     console.log("Advertising ID:", adId);                                      
                                                                                
     Add to manifest.toml:                                                      
                                                                                
     [[wants.service]]                                                          
     id = "com.amazon.advertising.adid.service"

Note: This ID can be reset by the user and is intended for advertising purposes.

  1. Your current workaround (UUID + AsyncStorage) is a valid approach for app-scoped unique identification. This is a common pattern when a hardware-level unique ID is not available via SDK.

Reference documentation:

Warm Regards,
Ivy