Multiplaftorm developmentMulti platform development

Multi-Platform Development for TV Apps

🌐

This chapter explores how to handle platform-specific differences when developing TV apps for Android TV, Fire TV, tvOS, and web browsers using React Native. We’ll cover configuration, remote control handling, and UI adjustments for each platform.

Platform Overview

Android TV and Fire TV

  • Android TV-based APIs
  • D-pad remote controls
  • Platform-specific certification requirements
  • Similar UI guidelines

Implementation Guide

Project Configuration

⚙️

Configure app.json for TV platforms:

{
  "expo": {
    "plugins": [
      "@bam.tech/react-native-keyevent-expo-config-plugin",
      [
        "@react-native-tvos/config-tv",
        {
          "androidTVBanner": "./assets/tv_icons/icon-400x240.png",
          "appleTVImages": {
            "icon": "./assets/tv_icons/icon-1280x768.png",
            "iconSmall": "./assets/tv_icons/icon-400x240.png",
            // ... other icon configurations
          }
        }
      ]
    ]
  }
}

Remote Control Implementation

🎮
// RemoteControlManager.android.ts
import KeyEvent from 'react-native-keyevent';
 
const KEY_CODE_MAPPING: Record<number, SupportedKeys> = {
  21: SupportedKeys.Left,
  22: SupportedKeys.Right,
  19: SupportedKeys.Up,
  20: SupportedKeys.Down,
  66: SupportedKeys.Enter,
};
 
class RemoteControlManager implements RemoteControlManagerInterface {
  constructor() {
    KeyEvent.onKeyDownListener(this.handleKeyDown);
  }
  // ... implementation
}

Platform-Specific UI Adjustments

🎨
const styles = StyleSheet.create({
  container: {
    paddingTop: Platform.OS === 'ios' ? scaledPixels(60) : scaledPixels(20),
  },
  button: {
    width: Platform.OS === 'web' ? scaledPixels(200) : scaledPixels(180),
  },
});

Always use scaledPixels for consistent sizing across platforms.

Best Practices

  1. Code Sharing

    • Minimize platform-specific code
    • Use conditional imports wisely
    • Share business logic across platforms
  2. Navigation

    • Implement consistent navigation patterns
    • Handle focus management uniformly
  3. Design

    • Use responsive design principles
    • Implement platform-specific styling when needed
  4. Testing

    • Test, Test, Test on all target platforms
    • Test the remote control behavior
    • Check performance!