Deep linking en Power Apps Code Apps: funciona usando los queryParams del host
Las Code Apps de Power Apps embeben la aplicación React en un iframe: el router cambia de ruta pero la URL no se mueve. Los queryParams del host permiten reconstruir el deep linking.

Una Code App de Power Apps ejecuta tu aplicación React dentro de un iframe servido desde apps.powerapps.com/play/e/<envId>/app/<appId>. Por eso React Router actualiza la ruta interna del iframe, pero la URL que aparece en la barra de direcciones no se mueve un milímetro. Copiar ese enlace nunca lleva a la pantalla que estabas viendo: siempre abre el inicio de la aplicación. El deep linking parecía imposible, y no lo es. La vía está en los parámetros de query de la URL anfitriona, que Power Apps sí reenvía a la aplicación embebida.
El problema no es el router, es el iframe
En una aplicación React al uso, Browser Routing o Hash Routing funcionan sin sorpresas: la URL cambia mientras el usuario navega. Aquí no. Lo que ves en el navegador es la URL de la página anfitriona de Power Apps, no la de tu aplicación, que va cargada dentro de un contenedor. El router hace su trabajo por dentro; lo que no cambia es la barra de direcciones. De ahí que un enlace copiado devuelva siempre a la home: la ruta cambia, la URL visible no.
Los queryParams como contrato
Desde dentro de la app, los parámetros se leen con (await getContext()).app.queryParams. Power Apps reenvía a la aplicación embebida cualquier parámetro que cuelgue de la URL anfitriona, y eso abre la puerta a usarlos como contrato entre el host y el router.
El patrón que se describe es sencillo: fijar una convención de rutas determinista, con /<tabla> para listados y /<tabla>/<id> para el detalle de un registro, y leer al arrancar los parámetros etn (nombre de la tabla) e id. Con ellos se navega a la ruta correspondiente. Si no llega ninguno, se cae a /dashboard.
Los casos quedan así:
?etn=accountslleva a/accounts?etn=accounts&id=cb87da63-2cb6-4ce5-b04f-0db22cd905a4lleva a/accounts/cb87da63-2cb6-4ce5-b04f-0db22cd905a4- sin parámetros, a
/dashboard
La traducción vive en el componente Home, que hace de punto de entrada: lee el contexto, interpreta los parámetros y redirige. Con la convención fija, generar enlaces compartibles en tiempo de ejecución es trivial, y esos enlaces se pueden colgar de botones de "abrir en pestaña nueva" o "copiar enlace". La idea original la documentó Diana Birkelbach, y sirve igual para enlazar desde una aplicación model-driven.
Conviene tener claro qué es esto y qué no. No hay API oficial de deep linking detrás: se aprovecha un comportamiento del host, y el enlace resultante sigue siendo largo y atado al envId y al appId de cada entorno. Tampoco hay garantía de que ese reenvío de parámetros se mantenga si Microsoft cambia el runtime. Para quien despliegue Code Apps con React, eso sí, es la diferencia entre una aplicación que se puede enlazar y una que no.

