How I built a single iOS app that controls all four Hisense smart-TV platforms A developer built a single iOS app that controls all four Hisense smart-TV platforms—VIDAA, Roku TV, Google TV, and Fire TV—after losing the remote for a Google TV-flavored Hisense set. The app automatically detects the TV's operating system by browsing for local-network service types, pairing via each platform's native protocol without requiring user input. It supports MQTT over TLS for VIDAA, ECP over HTTP for Roku, gRPC with TLS for Google TV, and ADB-over-Wi-Fi for Fire TV, all operating solely over the local area network with no cloud dependency. Hisense ships TVs with four different operating systems — VIDAA, Roku TV, Google TV, and Fire TV. The official "Remote for Hisense TV" you find in their app store only works with VIDAA. When I lost my own remote, I had a Google TV-flavored Hisense, so I built a single-app solution that pairs with whichever platform the user has. Here's how each of the four local-network protocols works, and how the app picks the right one without asking the user. | Platform | Local protocol | Pairing | |---|---|---| | VIDAA | MQTT over TLS | Direct local connection | | Roku TV | ECP over HTTP | Open by default on port 8060 | | Google TV | gRPC, TLS | 4-digit PIN | | Fire TV | ADB-over-Wi-Fi | One-time TV-side prompt | All four are LAN-only — no cloud involvement once paired. VIDAA TVs accept TLS connections on port 36669 and speak MQTT underneath. The control message format publishes button presses as small JSON payloads — {"key": "KEY VOLUMEUP"} etc. — to predictable topics scoped by the TV's MAC address. Other developers in the Home Assistant community have written about this in detail; my Swift implementation is on top of that prior work. Almost too easy. Roku publishes the External Control Protocol publicly. Every Roku and Hisense Roku TV listens on port 8060: curl -X POST http://192.168.1.100:8060/keypress/Home curl -X POST http://192.168.1.100:8060/keypress/VolumeUp curl http://192.168.1.100:8060/query/active-app curl http://192.168.1.100:8060/query/device-info curl -X POST http://192.168.1.100:8060/launch/12 No pairing. No PIN. If your phone and the TV are on the same LAN, you can drive it from a curl one-liner. This is why I shipped an in-browser Roku remote https://hiremote.app/hisense-roku-tv-remote remote — for Hisense Roku TV owners, you don't actually need an app at all. The page implements ECP from JavaScript and runs in any modern browser. Cannibalises my own install funnel for that segment, but it's the right call for the user. Google TV uses gRPC over TLS with cert pinning. Pairing exchanges a 4-digit PIN through paired proto messages — the Android TV Remote v2 protocol. The .proto definitions are discussed in various developer communities; from there it's standard gRPC client work. Fire TV runs Android and supports network-mode ADB on port 5555. After the user enables developer-friendly settings on the TV, the app authorizes once via a permission prompt on the TV screen. The app browses for service types: The first responder wins. The user never picks "what kind of Hisense TV is this" unless detection fails. The implementation ships as Remote for Hisense TV on the App Store https://apps.apple.com/us/app/remote-for-hisense-tv/id6740401390 , free with a Pro tier $9.99/year that adds the Apple Watch app, Lock Screen widget, and removes ads. The marketing site with deeper troubleshooting articles is at hiremote.app https://hiremote.app . Happy to answer iOS protocol questions in the comments.