Ho creato un’app Android in cui c’è una webview. In questa webview c’è una pagina web con i link agli Identity Provider.
Quando clicco su PosteID, mi compare correttamente la pagina di login di PosteID, ma ho visto che su altre app compare anche il link (che ho scoperto chiamarsi deeplink) che serve per velocizzare il login richiamando subito l’app invece di inserire email e password.
Nella mia webview questo deeplink non compare, o meglio è nascosto.
Ho forzato la comparsa di quel deeplink tramite javascript, ma quando clicco, la mia app si chiude improvvisamente.
Buonasera.
Premetto di non avere esperienze da sviluppatore su questa tematica specifica, però da una semplice verifica tramite gli strumenti di sviluppo del browser su PC ho notato che caricando la pagina di login di PosteID in formato mobile compare il cosiddetto deeplink, cosa che invece non accade scalando successivamente la pagina già caricata a tutto schermo.
Non conosco i dettagli tecnici del suo progetto, ma mi viene da pensare che possa esistere qualche flag da settare nei parametri della webview affinché il caricamento delle pagine venga richiesto nativamente per dispositivi mobile.
Grazie Alessio per la risposta. Anche io penso di dover dire alla webview che deve gestire i deeplink, ma è proprio lì che non trovo documentazione chiara.
Ho consultato questa documentazione Processar Android App Links | Desenvolvedores Android | Android Developers e lì dove indica ‘data android:scheme=“geo”’ forse devo mettere qualcosa relativo all’app PosteID: mi manca sapere cosa.
Mh, non vorrei sbagliarmi ma credo che la documentazione indicata faccia riferimento alle modalità per creare un deeplink all’interno della App; nel caso in questione, invece, il deeplink è all’interno della webview.
Non so se possa tornare utile al caso questo topic che parla di visualizzazione mobile nelle webview: Android WebView Not Loading Mobile Site - Stack Overflow
Se il parametro “User-Agent” non è impostato correttamente (o sovrascritto in maniera non conforme) effettivamente si potrebbero avere problemi di visualizzazione della versione mobile della pagina.
Lo user agent è impostato correttamente, me lo sono fatto stampare dalla pagina che si vede nella mia webview e al suo interno c’è scritto anche Android 11.
Quello che non salta fuori è il box “Hai l’App PosteID?” che riesco a far saltare fuori persino dalla console di Google Chrome, ma non dalla mia app.
Nella mia app ho trovato il modo di forzare l’apparizione di quel box, ma probabilmente se non compare in modo naturale è perché la mia app non è in grado di gestire il deeplink. Oppure è il sito di PosteID che deve far comparire quel box, chissà perché non lo fa.
Credo che per ora rinuncio e chi userà la mia app dovrà rassegnarsi ad inserire email e password anziché avere la comodità di autenticarsi tramite l’app di Poste.
Ho provato in questo momento su Android Studio a far partire una semplice app con una WebView che punta al sito di INPS per simulare un login con SPID: settando lo userAgent su “Android, ecc. ecc.” NON funzionava!
Mi si è invece correttamente aperto il deeplink usando questo userAgent qui:
webView.getSettings().setJavaScriptEnabled(true);
webView.getSettings().setUserAgentString("Mozilla/5.0 (iPhone; U; CPU like Mac OS X; en) AppleWebKit/420+ (KHTML, like Gecko) Version/3.0 Mobile/1A543a Safari/419.3");
Prova a verificare se così funziona anche nella tua app!
Grande! Così funziona! E chi l’avrebbe mai immaginato? E poi chissà per quale ragione comprensibile succede una cosa del genere!
Ora ho la grafica del sito sballata a causa di questo user agent, devo vedere come sistemare, ma intanto ti ringrazio infinitamente, il tuo aiuto è stato determinante
Aggiornamento: devo affinare la soluzione trovata in quanto ora, ovviamente, un Android viene spacciato per un iPhone e questo non va sempre bene, ad esempio la mia app consente anche l’autenticazione con CIE e ora, con lo user agent fasullo (che ho modificato in modo che non mi facesse sballare la grafica) questa non funziona più, ma anzi dice di scaricare CieID dallo store di Apple anziché di Android, e già questo non va, ma la cosa peggiore è che CieID è già installata.
Misteri dell’informatica e di Poste, due entità per cui mi rifiuto di cercare una spiegazione sensata!
Del resto, appurato che il problema è dato dallo UserAgent che evidentemente è quello che fa capire a Poste che stiamo accedendo da un dispositivo mobile, sarebbe da provare a giocare un po’ con quel parametro per vedere se ce n’è qualcuno di Android che funziona.
Se ne trovo qualcuno, lo posto qui!
EDIT: "Mozilla/5.0 (Linux; U; Android 2.2) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1" funziona (ed è Android)!
Aggiungo qualche informazione di massima, giusto per chiudere il cerchio.
Analizzando il codice sorgente della pagina di autenticazione di PosteID, è presente questo script chiave per la comparsa del deeplink:
<script type="text/javascript">
var deepLink = true;
var mobile = $('html').hasClass('pi-mobile');
if(!mobile){
buildQrCode("120000", "/jod-login-schema/secureholder/generateqrcode");
updateTime();
}
if(mobile){
if(deepLink){
$('#deeplinkid').removeClass('hidden');
var apackage = "posteitaliane.posteapp.appposteid";
var intent = true;
buildDeepLink("120000", "/jod-login-schema/secureholder/generateqrcode", "https://appregistry-posteid.mobile.poste.it/jod-login-schema/btcs/pid/access/v1/?tranId=", intent, apackage);
}
}
</script>
Quindi, sostanzialmente, se nelle classi del tag <html> è presente la pi-mobile allora appare il deeplink.
La classe, immagino, venga aggiunta dal browser in fase di elaborazione del codice, combinandola alle informazioni date dallo UserAgent; quindi, si tratta di trovare uno UserAgent che si spacci correttamente per mobile e quindi faccia aggiungere la classe, oppure si può provare a forzare l’aggiunta della classe pi-mobile nel tag di apertura <html> (unica cosa: deve essere fatto prima che parta lo script di verifica…).
Ti ringrazio ancora per il tuo aiuto. Ho provato quello user agent di Android, a me fa comparire il box per aprire l’app, ma poi premendo il link, la mia app schiatta, o meglio, si chiude brutalmente (che è lo stesso effetto che ottenevo quando facevo comparire forzatamente il box tramite javascript).
Quindi per ora ho trovato questa soluzione per risolvere un po’ tutti i problemi:
se l’URL a cui mi sto dirigendo contiene posteid.poste.it, modifico lo user agent spacciando Android per iPhone (davvero assurdo e fuori da ogni logica)
ripristino lo user agent originale solo quando torno alla mia pagina in cui gestisco i risultati provenienti dall’autenticazione.
Così facendo, lo user agent rimane modificato solo fintanto che mi trovo sul sito di Poste, quando torno sul mio lo ripristino e così funziona anche CIE.
Mi chiedo se sono davvero l’unico che si è imbattuto in questa vicenda anormale perché in giro non c’è traccia di un problema simile
Sì, onestamente è una cosa davvero curiosa, ma credo sia il risultato di una serie di accrocchi tecnologici più o meno convenzionali tra UserAgent e Poste.
Onestamente non so quante App ci siano in giro che utilizzano SPID per l’autenticazione (poche!) e di quelle poche che ho visto effettivamente ne conosco almeno una che non visualizza il deeplink. Sarebbe da chiedere agli sviluppatori di IO come abbiano fatto!
Del resto, se avrai voglia di bazzicare un po’, qui c’è un elenco infinito di UserAgent per Android da provare!
Ciao, a distanza di due anni rispolvero questo thread.
Anche io come voi ho notato che cambiando lo user agent della webview (ad esempio con Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.6668.81 Mobile Safari/537.36) il banner compare, mentre con lo user Agent di default (Mozilla/5.0 (Linux; Android 14; sdk_gphone64_arm64 Build/UE1A.230829.036.A1; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/113.0.5672.136 Mobile Safari/537.36) rimane nascosto.
La cosa curiosa è che andando a ispezionare con Chrome DevTools il tag html presenta le classi pi-xs pi-mobile pi-android che quindi di fatto non sembrano influenzare lo script presente nella pagina (dove è presenta anche una variabile aWebView, in entrambi i casi impostata a false).
Un’altra cosa che non sembra tornare è che App Io carica PosteID all’interno di una webview ed apparentemente non sembrano impostare uno user-agent custom, tuttavia all’interno della applicazione il deep link compare correttamente. Sarebbe interessante sapere come gli svilupattori di PagoPA abbiano fatto.