DEV Community

Cover image for How I built a single iOS app that controls all four Hisense smart-TV platforms
hisuperdev
hisuperdev

Posted on

How I built a single iOS app that controls all four Hisense smart-TV platforms

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.

TL;DR

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.

1. VIDAA — MQTT over TLS

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.

2. Roku TV — ECP is HTTP

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 — 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.

3. Google TV — gRPC dance

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.

4. Fire TV — ADB-style local connection

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.

Platform detection via mDNS

The app browses for service types:

  • _androidtvremote._tcp → Google TV
  • _roku-rsp._tcp → Roku TV
  • _amzn-wplay._tcp → Fire TV
  • Port-scan port 36669 fallback → VIDAA

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, 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.

Happy to answer iOS protocol questions in the comments.

Top comments (0)