Connecting an Nvidia Shield
This guide will assume you already have Home Assistant running in your home, with your Shield connected (and setup with a static LAN IP).
Install https://www.home-assistant.io/integrations/androidtv to your Home Assistant instance.
Create a webhook
Go to Home Assistant -> Settings -> Automations and Scenes, and create a new automation.
Click "Add Trigger" and choose "Other Triggers" -> "Webhook"
Configure the automation
Click "Add Action" -> "Device" -> [Your Shield] -> "Turn on"
Click "Add Action" again and choose "Building Blocks" -> "Wait for time to pass (delay)"
Click "Add Action" again and choose "Other Actions" -> "Android Debug Bridge" -> "ADB command"
Click "Choose device" and select your Shield
Paste the following into the Command field:
am start --ez "android.intent.extra.START_PLAYBACK" '{{ trigger.json.startPlaying }}' -a android.intent.action.VIEW '{{ trigger.json.url }}'
Note that the UI will change to YAML, don't worry about this. For context, Canopy+ sends a JSON payload with the webhook with two fields: "startPlaying" (a true/false boolean) and "url" (an Android TV Plex deeplink of this format: plex://server://[PLEX_SERVER_ID]/com.plexapp.plugins.library/library/metadata/[PLEX_RATING_KEY])

Save your new automation and name it whatever you like.
Now, grab the webhook ID and construct the URL: http[s]://[home-assistant-ip]:[port]/api/webhook/[WEBHOOK_ID]
Use an iOS device to paste this URL into the "Webhook" field in the Canopy+ app under "External Player Settings"
Additional setup for Seamless Branching
Plex for Android TV cannot play back 4K disc remuxes that use both seamless branching and Dolby TrueHD audio. If you attempt to play a file like this in Plex, the audio will continually drift out of sync. Both Kodi and VLC will play these files without issue.
If you have Kodi setup with PM4K, PlexKodiConnect, or similar, you can set up a deeplink that will open Kodi (can't deeplink further than that unfortunately).
Set up a second automation with a new webhook trigger just like before. Keep everything the same except use this in the Command field:
am start -a android.intent.action.VIEW -n org.xbmc.kodi/.Splash
Save and use an iOS device to paste this URL into the "Seamless Branching Webhook" field in the Canopy+ app under "External Player Settings"
In order to trigger this second webhook, you must manually label your seamless branching media with the Plex label "Seamless Branching"