Escribo este post por si puede servir de ayuda a alguien que se encuentre con el mismo problema que yo he tenido con una aplicación de Power Apps (sharing is caring!)
SITUACIÓN DE PARTIDA
En primer lugar, os cuento cuál es la situación de la que partimos para este artículo:
Tengo una aplicación Canvas de Power Apps cuyo origen de datos reside en varias listas de una colección de sitios de SharePoint Online. Tanto la aplicación como la colección de sitios residen en un tenant, pero lo usuarios que la utilizan pertenecen a otro tenant. Para que esto funcione, los usuarios tienen establecida la relación B2B con doble factor de autenticación (MFA) y la colección de sitios tiene habilitada la política de compartición con usuarios externos del tipo «Existing guests only» (que también está habilitada a nivel del tenant) .

PROBLEMA
La aplicación Canvas funciona perfectamente si se utiliza a través de un navegador web. Sin embargo, cuando los usuarios la utilizaban en sus teléfonos con la aplicación de Power Apps, la aplicación funcionaba bien durante un tiempo, pero, al cabo de 20-30 minutos dejaba de funcionar. La aplicación no mostraba ningún error, pero dejaba de mostrar datos. Era como si se perdiese la conexión con las listas de SharePoint.
De hecho, utilizando el Power Apps Monitor encontré que, cuando la aplicación dejaba de mostrar datos, se registraba el siguiente mensaje de error:
Failed to get onbehalfof access token: connectionId=sharepointonline, message=MSGraph discovery endpoint https://graph.microsoft.com/v1.0/sites/root/sharepointIds/siteUrl returned status code 401 (Unauthorized)
Como podéis imaginar, esto es bastante frustrante para los usuarios porque, además de no mostrar datos en las pantallas de los elementos, cuando intentaban crear algo nuevo, se encontraban que los desplegables aparecían en blanco.
Para que veáis que no éramos los únicos con el problema, encontré este hilo en stackexchange con el mismo problema: https://sharepoint.stackexchange.com/questions/303186/canvas-powerapp-failed-to-get-onbehalfof-access-token-connectionid-sharepointo
Dado que era un problema de conexión, como workaround les planteamos a los usuarios que, cuando esto ocurriese, se abriesen en el móvil una nueva sesión de su navegador y accediesen al sitio de SharePoint donde están las listas. De esta forma, volvían a disponer de un token válido y la app volvía a funcionar. Para facilitarles la vida, les pusimos un acceso directo al sitio de SharePoint en su móvil de forma que, cuando tenían el problema, pulsaban en el acceso directo y la aplicación volvía a mostrar datos.
Esto servía como solución temporal, pero seguía siendo un poco engorroso, así que abrimos un ticket de soporte a Microsoft para intentar solucionarlo definitivamente.
SOLUCIÓN
Tras abrir el ticket a Microsoft, el equipo de soporte se puso en contacto conmigo para avanzar en el caso. Como es habitual, solicitaron información e todo tipo para poder abordar el problema.
Una vez analizado el caso, nos solicitaron habilitar el acceso externo en la colección de sitios de nivel superior. No en el tenant, sino en la colección de sitios que se genera por defecto. Es decir, si nuestra colección de sitios es del tipo «https://mydomain.sharepoint.com/sites/mySite», nos pedían habilitar el acceso externo en la colección de sitios «https://mydomain.sharepoint.com».

Sinceramente, no tenía ninguna confianza en que esto funcionase porque son colecciones de sitios diferentes. Pero estaba equivocado y, sorprendentemente, una vez habilitado el acceso externo en la colección de sitios del nivel superior, la aplicación comenzó a funcionar perfectamente en el móvil de los usuarios sin perder la conexión.
Aún estamos en pruebas, pero llevamos varios días con ello y la app se comporta perfectamente. Quería compartiros esta solución por si os sirve de ayuda en el caso de que algún día os encontréis con este problema.
Aprovecho para agradecer desde aquí la ayuda del equipo de soporte de Microsoft y de Muthu Vijayan en particular.
¡Muchas gracias por leerme!