Giter Club home page Giter Club logo

io-app's Introduction


IO - The public services app

Download on the App Store Get it on Google Play

The mobile app of the Digital Citizenship project

FAQ

What is the Digital Citizenship project?

Digital Citizenship aims at bringing citizens to the center of the Italian public administrations services.

The project comprises two main components:

  • a platform made of elements that enable the development of citizen-centric digital services;
  • an interface for citizens to manage their data and their digital citizen profiles.

What is the Digital Citizenship mobile app?

The Digital Citizenship mobile app is a native mobile application for iOS and Android with a dual purpose:

  • to be an interface for citizens to manage their data and their digital citizen profile;
  • to act as reference implementation of the integrations with the Digital Citizenship platform.

Who develops the app?

The development of the app is carried out by several contributors:

Can I use the app?

Sure! However you will need a SPID account or have a CIE to login to the app.

How can I help you?

Reporting bugs, bug fixes, translations and generally any improvement is welcome! Send us a Pull Request!

What permissions are used by the IO app?

Because different platforms have different types of Permissions below we have two sections about permissions requested by the IO app for both environments (iOS and Android). Some permissions may be defined but not used. Their presence is due to dependencies with third-party modules or because they are required by the target store.

Android
Permission (android.permission.*) Usage / Meaning
INTERNET Allows the app to open network sockets (e.g. simple internet connectivity)
ACCESS_NETWORK_STATE Allows the app to access information about networks (e.g. details about connection quality/state)
CAMERA Allows the app to access device camera to scan QR codes
NFC Allows the app to perform I/O operations over NFC
RECEIVE_BOOT_COMPLETED Allows the app to receive the Intent.ACTION_BOOT_COMPLETED that is broadcast after the system finishes booting. Used for push notification.
VIBRATE Allows the app to access the vibration motor. This allow the application to emit vibration.
WAKE_LOCK Allows the app to use PowerManager WakeLocks to keep processor from sleeping or screen from dimming. Used for push notification.
READ_APP_BADGE Allows the app to show notification badges on its icon.
READ_CALENDAR Allows the app to read the user's calendar data.
WRITE_CALENDAR Allows the app to write the user's calendar data. Used to automatically set reminders.
READ_EXTERNAL_STORAGE Allows the app to read from external storage. Used to pick images from gallery with payment QRCode.
WRITE_EXTERNAL_STORAGE Allows the app to write to external storage. Used to store images, certificates, etc.
USE_FINGERPRINT Allows the app to use fingerprint hardware for biometric identification required from API level 23 until API level 28
USE_BIOMETRIC Allows the app to use device's available biometric identification system (Face unlock, Iris unlock, Fingerprint) required from API Level 28.
SCHEDULE_EXACT_ALARM Allows the app to send local notifications.
DOWNLOAD_WITHOUT_NOTIFICATION Allows the app to download files in background without promping a notification.
POST_NOTIFICATIONS Allows the app to post notifications. Used for push notification.

Below there are the permissions required by the main android hardware manufacturers. Mainly used to manage notification badge icons.

Permission (manufacturer) Usage / Meaning
com.google.android.c2dm.permission.RECEIVE Allows the app to receive a broadcast from a GCM server that contains a GCM message. Used for push notification.
com.google.android.finsky.permission.BIND_GET_INSTALL_REFERRER_SERVICE Allows the app to recognize where the app was installed from. Used for Firebase.
com.anddoes.launcher.permission.UPDATE_COUNT Allows the app to use notification badges.
com.htc.launcher.permission.READ_SETTINGS Allows the app to use notification badges.
com.htc.launcher.permission.UPDATE_SHORTCUT Allows the app to use notification badges.
com.huawei.android.launcher.permission.CHANGE_BADGE Allows the app to use notification badges.
com.huawei.android.launcher.permission.READ_SETTINGS Allows the app to use notification badges.
com.huawei.android.launcher.permission.WRITE_SETTINGS Allows the app to use notification badges.
com.majeur.launcher.permission.UPDATE_BADGE Allows the app to use notification badges.
com.oppo.launcher.permission.READ_SETTINGS Allows the app to use notification badges.
com.oppo.launcher.permission.WRITE_SETTINGS Allows the app to use notification badgee.
com.sec.android.provider.badge.permission.READ Allows the app to use notification badges.
com.sec.android.provider.badge.permission.WRITE Allows the app to use notification badges.
com.sonyericsson.home.permission.BROADCAST_BADGE Allows the app to use notification badges.
com.sonymobile.home.permission.PROVIDER_INSERT_BADGE Allows the app to use notification badges.
me.everything.badger.permission.BADGE_COUNT_READ Allows the app to use notification badges.
me.everything.badger.permission.BADGE_COUNT_WRITE Allows the app to use notification badges.
com.android.vending.CHECK_LICENSE Allows the app to access Google Play Licensing.
com.samsung.android.providers.context.permission.WRITE_USE_APP_FEATURE_SURVEY Allows the app to use the Samsung Developer SDK. Used for Samsung biometric identification.
com.fingerprints.service.ACCESS_FINGERPRINT_MANAGER Allows the app to access the fingerprint hardware for biometric identification.
iOS
Permission Usage / Meaning
NSAppleMusicUsageDescription Allows the app to access the user’s media library.
NSBluetoothAlwaysUsageDescription Allows the app to use the device’s Bluetooth interface.
NSBluetoothPeripheralUsageDescription Allows the app to access Bluetooth peripherals and has a deployment target earlier than iOS 13.
NSContactsUsageDescription Allows the app to access contacts to let you add them in calendar events.
NSLocationAlwaysUsageDescription Allows the app to access the user’s location at all times and deploys to targets earlier than iOS 11.
NSLocationUsageDescription Allows the app to access the user’s location information.
NSLocationWhenInUseUsageDescription Allows the app to access the user’s location information while the app is in use.
NSMicrophoneUsageDescription Allows the app to use the microphone in case you want to leave a voice note. Used in the assistance flow.
NSMotionUsageDescription Allows the app to access the device’s motion data.
NSCalendarsUsageDescription Allows the app to access the calendar to add event reminders.
NSCameraUsageDescription Allows the app to use the camera to scan QR codes.
NSFaceIDUsageDescription Allows the app to use Face ID for biometric identification.
NSPhotoLibraryAddUsageDescription Allows the app to access the user’s photo library.
NSPhotoLibraryUsageDescription Allows the app to access the photo library to scan QR codes.
NSSpeechRecognitionUsageDescription Allows the app to send user data to Apple’s speech recognition servers. Used in the assistance flow.
Remote Notification Allows the app to receive remote push notification.
NFC (Near Field Communication Tag Reading) Allows the app to use the NFC.

Getting started

The following sections provide instructions to build and run the app for development purposes.

Prerequisites

NodeJS and Ruby

To run the project you need to install the correct version of NodeJS and Ruby. We recommend the use of a virtual environment of your choice. For ease of use, this guide adopts nodenv for NodeJS, rbenv for Ruby.

The node version used in this project is stored in .node-version, while the version of Ruby is stored in .ruby-version.

React Native

Follow the official tutorial for installing the React Native CLI for your operating system.

If you have a macOS system, you can follow both the tutorial for iOS and for Android. If you have a Linux or Windows system, you need only to install the development environment for Android.

Build the app

In order to build the app, we use yarn for managing javascript dependencies. As stated previously, we also use nodenv and rbenv for managing the environment:

# Clone the repository
$ git clone https://github.com/pagopa/io-app

# CD into the repository
$ cd io-app

# Install NodeJS with nodenv, the returned version should match the one in the .node-version file
$ nodenv install && nodenv version

# Install Ruby with rbenv, the returned version should match the one in the .ruby-version file
$ rbenv install && rbenv version

# Install yarn and rehash to install shims
$ npm install -g yarn && nodenv rehash

# Install bundle
$ gem install bundle

# Install the required Gems from the Gemfile
# Run this only during the first setup and when Gems dependencies change
$ bundle install

# Install dependencies 
# Run this only during the first setup and when JS dependencies change
$ yarn install

# Install podfiles when targeting iOS (ignore this step for Android)
# Run this only during the first setup and when Pods dependencies change
$ cd iOS && bundle exec pod install && cd ..

# Generate the definitions from the OpenAPI specs and from the YAML translations
# Run this only during the first setup and when specs/translations change
$ yarn generate

Environment variables

Production

You can target the production server by copying the included .env.production file to .env:

$ cp .env.production .env

Note

The sample configuration sets the app to interface with our test environment, on which we work continuously; therefore, it may occur that some features are not always available or fully working. Check the comments in the file for more informations about environment variables.

io-dev-api-server

You can also target the io-dev-api-server for development purposes by coyping the included .env.local file to .env:

$ cp .env.local .env

Run the app

Android Emulator

An Android Emulator must be created and launched manually. Then, from your command line, run these commands:

# Perform the port forwarding
$ adb reverse tcp:8081 tcp:8081;adb reverse tcp:3000 tcp:3000;adb reverse tcp:9090 tcp:9090

# Run Android build
$ yarn run-android

iOS Simulator

# Run iOS build
$ yarn run-ios

Physical devices

The React Native documentation provides a useful guide for running projects on physical devices.

Important

For building the app on an iOS physical device, a few additional steps are necessary:

  • Navigate to Build Phases in Xcode and expand Bundle React Native code and images. Update the NODE_BINARY variable with the path to your Node.js environment. You can find the correct path by running which node in a terminal from the app's root directory;
  • If you're not part of the PagoPA S.p.A. organization then you must change the Bundle Identifier to something unique. This adjustment can be made in the Signing (Debug) section of Xcode;
  • In order to test the CIE authentication flow, run yarn cie-ios:prod before building the app. The process can be reverted by running yarn cie-ios:dev.

Troubleshooting

This section lists possible solutions to problems you might encounter while building the app.

iOS build
  • error: redefinition of module 'YogaKit' build Failed
    

    Restart your machine to fix the issue.


  • error No simulator available with name "iPhone 13".
    

    This happens because new versions of Xcode do not automatically create a simulator for the iPhone 13. To fix the issue you can either create a new simulator and name it iPhone 13 or run the command yarn run-ios --simulator='a valid simulator name'.


  • Application launch for 'it.pagopa.app.io' did not return a valid pid nor a launch error. Domain: NSPOSIXErrorDomain Code: 3 Failure Reason: No such process User Info: { DVTErrorCreationDateKey = "2022-01-25 12:02:41 +0000"; IDERunOperationFailingWorker = IDELaunchiPhoneSimulatorLauncher; }
    

    This happens on Apple Silicon CPUs because some Pods do not implement the XCFramework yet. Install Rosetta by running softwareupdate --install-rosetta to fix the issue.


Architecture

Main technologies used

SPID Authentication

The application relies on a backend for the authentication through SPID (the Public System for Digital Identity) and for interacting with the other components and APIs that are part of the digital citizenship project.

The backend implements a SAML2 Service Provider that deals with user authentication with the SPID Identity Providers (IdP).

The authentication between the application and the backend takes place via a session token, generated by the backend at the time of the authentication with the SPID IdP.

Once the backend communicates the session token to the application, it is used for all subsequent calls that the application makes to the API exposed by the backend.

The authentication flow is as follows:

  1. The user selects the IdP;
  2. The app opens a webview on the SAML SP authentication endpoint implemented in the backend, which specifies: the entity ID of the IdP selected by the user and, as returns URL, the URL of the endpoint that generates a new session token.
  3. The SAML SP logic takes over the authentication process by redirecting the user to the chosen IdP.
  4. After the authentication, a redirect is made from the IdP to the backend endpoint that deals with the generation of a new session token.
  5. The endpoint that generates a new token receives the SPID attributes via the HTTP header; then, it generates a new random session token and returns to the webview an HTTP redirect to an URL well-known containing the session token.
  6. The app, which monitors the webview, intercepts this URL before the HTTP request is made, extracts the session token and ends the authentication flow by closing the webview.
  7. Next, the session token is used by the app to make calls to the backend API.

Deep linking

The application is able to manage deep links. Deep linking allows opening the app or a specific screen once a user clicks on specific URL. The URL scheme for io-app is: ioit://.

Supported URLs

main

ioit://main/messages
ioit://main/services
ioit://main/profile

wallet

ioit://wallet
ioit://wallet/payments-history
ioit://wallet/card-onboarding-attempts

services

ioit://services/service-detail?serviceId=:id

profile

ioit://profile
ioit://profile/preferences
ioit://profile/privacy
ioit://profile/privacy-main

fci

ioit://fci/main?signatureRequestId=:id
ioit://fci/signature-requests
ioit://cgn-details/categories-merchant/:category

Design System

The interface for the entire application was built using NativeBase, a component library first developed for React Native. Although it was quite useful in the early stages, the significant API changes between 2.x and 3.x versions made upgrading the library very expensive. For this reason, we have been gradually rolling out a new library of custom components that utilizes React Native's latest APIs since Q1 2023.

The new library is available through the external io-app-design-system package.

In the meantime, there are two complementary and simultaneous activities going on in the application:

  • The partial (or complete) rewriting of legacy screens to deprecate NativeBase and remove it from the codebase.
  • The gradual introduction of the new design system through the development of new screens or the adaptation of existing ones.

You can keep track of the latest developments by filtering all the PRs according to the type of activity:

NativeBase's dismissal label Design System's label

io-app's People

Contributors

adelloste avatar alex193a avatar andreafavaro-bitrocketdev avatar cloudify avatar cristofani avatar davidevaldo avatar debiff avatar denisfrezzato avatar dependabot[bot] avatar dgopsq avatar dmnplb avatar edigio avatar emiliopavia avatar fabriziofff avatar fgiobergia avatar forrest57 avatar francescopersico avatar hantex9 avatar hevelius avatar lazyafternoons avatar lmorelli986 avatar mastro993 avatar matgentili avatar pietro909 avatar sabontech avatar shadowsheep1 avatar thisisjp avatar undermaken avatar valentinacala avatar vangaorth avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

io-app's Issues

Bundle Error while deploying to iOS Simulator

I've follwed the contribution guide but I'm receiving this bundle error after compiling the project and running "react-native run-ios"

error: bundling failed: Error: Unable to resolve module `../../definitions/backend/Platform` from `/Users/playrom/Sites/italia-app/ts/sagas/notifications.ts`: The module `../../definitions/backend/Platform` could not be found from `/Users/playrom/Sites/italia-app/ts/sagas/notifications.ts`. Indeed, none of these files exist:

  * `/Users/playrom/Sites/italia-app/definitions/backend/Platform(.native||.ios.js|.native.js|.js|.ios.json|.native.json|.json|.ios.ts|.native.ts|.ts|.ios.tsx|.native.tsx|.tsx)`
  * `/Users/playrom/Sites/italia-app/definitions/backend/Platform/index(.native||.ios.js|.native.js|.js|.ios.json|.native.json|.json|.ios.ts|.native.ts|.ts|.ios.tsx|.native.tsx|.tsx)`
    at ModuleResolver.resolveDependency (/Users/playrom/Sites/italia-app/node_modules/metro/src/node-haste/DependencyGraph/ModuleResolution.js:158:865)
    at ResolutionRequest.resolveDependency (/Users/playrom/Sites/italia-app/node_modules/metro/src/node-haste/DependencyGraph/ResolutionRequest.js:92:16)
    at DependencyGraph.resolveDependency (/Users/playrom/Sites/italia-app/node_modules/metro/src/node-haste/DependencyGraph.js:271:4465)
    at dependencies.map.relativePath (/Users/playrom/Sites/italia-app/node_modules/metro/src/DeltaBundler/traverseDependencies.js:379:19)
    at Array.map (<anonymous>)
    at resolveDependencies (/Users/playrom/Sites/italia-app/node_modules/metro/src/DeltaBundler/traverseDependencies.js:378:16)
    at /Users/playrom/Sites/italia-app/node_modules/metro/src/DeltaBundler/traverseDependencies.js:203:33
    at Generator.next (<anonymous>)
    at step (/Users/playrom/Sites/italia-app/node_modules/metro/src/DeltaBundler/traverseDependencies.js:296:307)
    at /Users/playrom/Sites/italia-app/node_modules/metro/src/DeltaBundler/traverseDependencies.js:296:467
 BUNDLE  [ios, dev] ./index.js ░░░░░░░░░░░░░░░░ 0.0% (0/1), failed.

In order to resolve this error you must run "npm run generate:api-definitions" before, maybe you should add that line on the README.md ?

Controllo jailbreak: limitarsi a far apparire un avviso anziché bloccare l'app

Descrivi il problema
Mi riaggancio a quanto detto qui, ma per i dispositivi iOS.
L'applicazione non permette di essere utilizzata in dispositivi jailbroken, anche se il jailbreak non è attualmente attivo.
Paradossalmente esistono tweak che impediscono alle app questo tipo di riconoscimento, ma se la modalità jailbroken non è attiva questi tweak non possono funzionare, e l'utente che prima poteva utilizzare l'app senza problemi si ritrova senza questa possibilità finchè non torna jailbroken.

Suggerisci una soluzione
Il mio suggerimento è quindi quello di avvisare l'utente dei possibili rischi in cui si incorre, ma di lasciargli comunque la possibilità di usare l'app, per esempio come sta facendo Zoom.

Screenshot di IO
IO

Screenshot di Zoom
zoom

The notice data form is partially hidden

Description
When the keyboard is shown, the form is partially hidden and I'm unable to scroll further to show it entirely.

Screenshots
screenshot_20180920-215627

App version
1.0.5785

Smartphone

  • Device: Honor 9
  • OS: [Android 7.0]

Ingrandire titolo "Inserisci pin" nella schermata blu del pin

Descrivi il problema
Corpo del titolo troppo piccolo

To Reproduce
Steps to reproduce the behavior:

  1. Entra nell'app per la seconda volta
  2. Ti compare schermata blu inserimento pin
  3. Il corpo del titolo "Inserisci il codice PIN è piccolo
  4. L'utente è attirato più dal messaggio "Cambia codice" che dalla CTA principale

Expected behavior
Ingrandire corpo del titolo

Abolire il root check oppure preferirgli SafetyNet

Descrivi il problema

Ritengo che per questo tipo di applicazione il root checking sia assolutamente inutile, eccessivo e peraltro aggirabile con due click

To Reproduce

Avviare Io su un device con Magisk. La app non si avvia perchè rileva i permessi di superutente.

Da Magisk, attivare la modalità Magisk Hide per la app Io. Riavviare Io. La app non si accorge di Magisk

Additional context

Il rilevamento del semplice rooting è una prassi obsoleta. Sebbene le linee guida OWASP indichino chiaramente che un device con privilegi di root è nella media un dispositivo "meno sicuro" rispetto ad uno originale, ho due osservazioni da fare sulla app Io.

  1. Il metodo di rilevamento implementato ritengo sia troppo poco elaborato/robusto

Si cerca di "combattere il rooting" rilevando l'eseguibile su senza piuttosto fare un test standard di Android che è il SafetyNet.

SafetyNet, peraltro bucato da Magisk, è il tool "standard" di Google per confermare che il dispositivo è integro ed esegue un firmware originale aggiornato. SafetyNet viene eseguito online, quindi si aggiorna di continuo e non richiede che lo sviluppatore aggiorni la propria app. Molto spesso SafetyNet riesce però a bucare a sua volta MagiskHide, e l'operazione è trasparente rispetto alla app che esegue la verifica. Ad esempio Google Pay è quasi sempre in vantaggio su Magisk.

Uno dei vantaggi di SafetyNet è che può permettere il blocco, a discrezione di Google, firmware troppo obsoleti con vulnerabilità di sistema operativo evidenti e documentate.

  1. Io non è una app tale da dover davvero bloccare il rooting o i custom firmware

Ritengo di essere una persona molto esperta in sicurezza informatica. Spesso vedo che sulla sicurezza si verificano i due estremi opposti. O gli sviluppatori non hanno la cultura della sicurezza e fanno cose profondamente errate (es. password nei repository, pochi controlli sugli utenti autenticati), oppure in nome della "Sicurezza" si iniziano a introdurre eccessive limitazioni (tornerò sull'autenticazione biometrica).

Credo personalmente che l'antiroot su una app come Io sia parte del secondo caso. Posso capire che chi ha sviluppato abbia seguito le linee guida OWASP o altre best practice, e condivido l'uso critico delle best practice,, ma la "Sicurezza" ad ogni costo ha due costi: costo materiale di sviluppo e manutenzione, e costo di frustrazione degli utenti (che se determinati potrebbero passare alle versioni web).

Il test SafetyNet, da sviluppatore e utente rootato, credo sia utile solo per certi tipi di applicazioni, come quelle che eseguono pagamenti NFC o certi giochi online basati sulla localizzazione GPS. Facile: trattandosi della possibilità di movimentare denaro in forma non autorizzata, ed essendo le banche responsabili delle transazioni non autorizzate, dire che ci sta fare prevenzione. E la maggior parte delle banche usa SafetyNet piuttosto che controllare gli eseguibili di sistema. Da riportare i casi emblematici come Intesa Sanpaolo che ad esempio non impedisce la consultazione e la movimentazione del conto ai cellulari "non originali" ma blocca solo il pagamento digitale NFC, che era ciò che io intendo nel mio post.

Per questa app, ho fatto due ragionamenti

Bloccare del tutto la app è inutile

Gli unici dati "finanziari" sono i metodi di pagamento PagoPA, che dovrebbero essere custoditi su server remoto comunque (credo). Se l'utente vuole solo ricevere gli avvisi di scadenza rata asilo e pagarli in altre forme, perchè bloccargli anche quello? Abbiamo paura, anche in epoca di Exodus, che app root malevoli rubino i dati personali "generici" dell'utente? La discussione diventa un ginepraio. Andrebbe fatta una riflessione...

Avrebbe senso bloccare solo i pagamenti PagoPA?

Magari la app contiene sul secure storage dei token che potrebbero essere esfiltrati per attivare pagamenti? Se così fosse, blocchiamo solo il pagamento PagoPA, non tutto il resto.

In generale, finiamo che in nome della "Sicurezza" degeneriamo in realtà l'esperimento delle cinque scimmie che ho piacere a linkarvi ritenendolo una utile lettura.

I servizi via web non sanno riconoscere un device rooted

E questo è il punto che a me preme di più, forse. Ci siamo mai fatti questa domanda? Se io accedo ad un servizio, anche ad "altissima sicurezza" da browser posso avere qualunque tipo di diavoleria sul mio device/browser (dagli add-on spia-pubblicitari ai keylogger), ma non vedo da parte della community eccessiva attenzione. Se un utente root vede che non può fruire della funzione da app, e non vuole rinunciare al root (es. blocco pubblicità, per quanto discutibile ecc.) va sul web dal device rootato e via!

In sostanza

La proposta è

  1. Sostituire il root check che ad oggi viene fatto col controllo degli eseguibili su con SafetyNet, API più appropriata e approfondita per questo tipo di controlli
  2. Valutare se non bloccare del tutto la app all'avvio in caso di test SafetyNet non passato, ma usare un approccio più soft basato su notifiche o blocco solo di alcune funzionalità più "critiche"

Edit: ho deciso di cambiare il titolo di questo ticket per una questione di linguaggio. Dare dell'"inutile" al root check mi sembra distruttivo e fuori luogo

Cambia PIN - Disconnetti dal tuo account SPID

Descrivi il problema
Entrambe le operazioni rendono di fatto inutilizzabile l'applicazione e obbligano l'utente a riloggarsi con SPID. Per questo motivo sarebbe utile una modale di avviso
Stai per dissociare la tua utenza dalla app. Per usare di nuovo l'app dovrai inserire le tue credenziali SPID
Annulla - Procedi

To Reproduce
Steps to reproduce the behavior:

  1. Go to 'Preferenze'
  2. Click on 'Cambia PIN'
    oppure
  3. Click on 'Disconnetti il tuo account SPID'

Expected behavior
A clear and concise description of what you expected to happen.

Screenshots
If applicable, add screenshots to help explain your problem.

Versione dell'app
Copia i due numeri che appaiono in alto a destra nello schermo dell'app.

Smartphone (please complete the following information):

  • Device: [e.g. iPhone6]
  • OS: [e.g. iOS8.1]

Additional context
Add any other context about the problem here.

Decouple Templates

As an engineer, I will get access to the templates in a file that is outside of the main JS so that I can keep the code more maintainable

Icona di notifica Android: dovrebbe essere bianca su sfondo trasparente

Descrivi il problema
L'icona di notifica Android è erroneamente colorata di blu.

Expected behavior
Da linee guida deve essere bianca su sfondo trasparente.

Screenshots
Screenshot_2020-04-22-12-54-13-205_com miui home

Versione dell'app
1.1.34717

Smartphone (please complete the following information):

  • Device: Xiaomi Mi Note 10
  • OS: Android 9 MIUI Global 11.0.16

Crash dell'applicazione se l'immagine non contiene un QR code

Descrivi il problema
Nella sezione wallet se viene scelta dalla galleria un immagine che non contiene un QR code l'applicazione va in crash

To Reproduce
Steps to reproduce the behavior:

  1. Go to the wallet
  2. Click on "Pay notice"
  3. Click on "Pick image from gallery"
  4. Select an image without QR codes
  5. Crash

Expected behavior
The app should return an error message

Screenshots
Screenshot_20200227-232629_IO

Versione dell'app
App Version 1.1.30417

Smartphone (please complete the following information):

  • Device: [Galaxy S7 edge]
  • OS: [android 8.0.0]

Aspetto bottoni nella schermata QR

Descrivi il problema
Nella schermata si apre la fotocamera per catturare un QR di pagamento i bottoni "Annulla" e "Inserisci i dati manualmente" hanno un aspetto subottimale.

Screenshots
screenshot_20180821-171032_io

Versione dell'app
1.0.4867.0.0.47

Smartphone (please complete the following information):

  • Device: Samsung Galaxy S8 SM-G950F
  • OS: Android 8.0.0

Informativa privacy - c'è un link a un documento agid che non si trova

Descrivi il problema
Su io si fa riferimento a un documento presente sul sito Agid ma questo documento non lo si trova cercando sul sito agid o su google.
In ogni caso è più opportuno un link diretto al documento
"dati personali oggetto di trattamento da parte di AgID sono quelli indicati
al paragrafo 3.1 “Dati personali oggetto del Trattamento” del documento “Linee
Guida per il punto di accesso telematico ai servizi della pubblica amministrazione”
accessibile dal sito www.agid.gov.it. "

To Reproduce
Steps to reproduce the behavior:

  1. Go to 'Informativa privacy'

Mostrare agli utenti screenshot di un avviso cartaceo

Descrivi il problema
Gli utenti non hanno lo screenshot dell'avviso cartaceo dove individuare i dati che gli chiediamo di inserire @matteodesanti

To Reproduce
Steps to reproduce the behavior:

  1. Go to 'portafoglio'
  2. Click on 'paga avviso'
    3.Click to 'Inserisci i dati manualmente'
  3. Clicchi su "Dove si trovano?" e il link non è attivo

Expected behavior
Cliccando vorrei vedere uno screenshot di un avviso cartaceo

Screenshots
If applicable, add screenshots to help explain your problem.

Versione dell'app
Copia i due numeri che appaiono in alto a destra nello schermo dell'app.

Smartphone (please complete the following information):

  • Device: [e.g. iPhone6]
  • OS: [e.g. iOS8.1]

Additional context
Add any other context about the problem here.

Una volta aperta la fotocamera, se si cambia sezione e si torna indietro la UI diventa nera

To Reproduce

  • Vai a "portafoglio"
  • Clicca "paga un avviso" (si aprirà la fotocamera per inquadrare il QR code)
  • Seleziona un altro dei menu in basso (es: "messaggi")
  • Torna a "portafoglio"
  • Vedo una schermata nera al posto di ciò che inquadra la fotocamera

Expected behavior
Dopo essere tornato nella sezione "portafoglio" voglio vedere di nuovo la schermata corretta

Screenshot
20180920_164132_rmscr

Versione dell'app
1.0.5880 - 0.0.56

Smartphone (please complete the following information):

  • Device: Samsung Galaxy S6 -SM-G920
  • OS: Android 7.0

Test su device android di fascia bassa

Device LG Leon, Android 5.0.1, dettagli

Nello schermo Messaggi, Scadenze va accapo @fpersico

img_2427

Latest transactions e' in inglese anche se il resto dell'app e' in italiano @fgiobergia

img_2429

preview carta di credito e' tagliata, dovrebbe adattarsi allo schermo @fgiobergia

img_2428

i bullet del numero di carta vanno accapo @fgiobergia

img_2431

secondo step dell'inserimento del PIN, il pulsante "modifica il codice" occupa lo spazio sopra l'input del PIN @fpersico

img_2426

inserimento dei dati di carta, i tab appaiono sopra la tastiera occupando tutto lo schermo e impedendo l'inserimento @fgiobergia

img_2430

lettura QR code, meta' dell'immagine e' coperta @fgiobergia

img_2432

img_2433

Back Android e webview login ipd

Su android, se premo back del sistema operativo, esco dall'app.
Avviene sia nello screen di scelta idp che nello screen successivo (webview).
Il comportamento atteso è che vi sia lo stesso comportamento del back nella topbar.

Notifica di benvenuto

Descrivi il problema
Quando l'applicazione viene aperta la prima volta, subito dopo l'installazione, nella sezione Messaggi non c'è niente. Per risolvere il problema si dovrebbe ricevere immediatamente una notifica auto-generata dal sistema la quale ti da il benvenuto e ti spiega le prime cose utili.

Forse bisognerebbe mandare anche 3-4 notifiche demo che servano da esempio, tipo una che proviene da "Il tuo Comune", una da "La tua Regione", etc. - il fatto che sono solo esempi deve essere chiaramente visibile e il testo dovrebbe dire "un giorno, quando l'integrazione sarà attivata, qui troverai etc etc".

Contatti

Descrivi il problema
Sembra mancare una pagina contatti dove inserire
Licenza, firma del progetto e contatti
Design e tecnologia a cura di Team per la Trasformazione Digitale - Presidenza del Consiglio
Per informazioni sul progetto visita il sito di io

The service's status is cropped

Description
The service's status The service is enabled is cropped on the right.

Screenshots
screenshot_20180920-215650

App version
1.0.5785

Smartphone

  • Device: Honor 9
  • OS: [Android 7.0]

Sezione portafoglio corpo del sommario

Descrivi il problema
Il corpo del sommario della sezione portafoglio è più piccolo di quello usato abitualmente nell'app

To Reproduce
Steps to reproduce the behavior:

  1. Go to 'sezione portafoglio'
  2. Guarda il testo sotto al titolo "Portafoglio"

Expected behavior
Ingrandire corpo del testo

@matteodesanti

react-native run-ios stopped working after the installation of XCode 11

Environment

React Native Environment Info:
    System:
      OS: macOS 10.14.6
      CPU: (8) x64 Intel(R) Core(TM) i7-4850HQ CPU @ 2.30GHz
      Memory: 1.03 GB / 16.00 GB
      Shell: 3.2.57 - /bin/bash
    Binaries:
      Node: 10.13.0 - ~/.nodenv/versions/10.13.0/bin/node
      Yarn: 1.19.1 - ~/.nodenv/versions/10.13.0/bin/yarn
      npm: 6.4.1 - ~/.nodenv/versions/10.13.0/bin/npm
    SDKs:
      iOS SDK:
        Platforms: iOS 13.2, DriverKit 19.0, macOS 10.15, tvOS 13.2, watchOS 6.1
    IDEs:
      Xcode: 11.2/11B52 - /usr/bin/xcodebuild
    npmPackages:
      react: 16.8.3 => 16.8.3
      react-native: 0.59.9 => 0.59.9
    npmGlobalPackages:
      react-native-cli: 2.0.1

Description

When running the iOS project, I got the following error message:

CoreData: annotation: Failed to load optimized model at path '/Applications/Xcode.app/Contents/Applications/Instruments.app/Contents/Frameworks/InstrumentsPackaging.framework/Versions/A/Resources/XRPackageModel.momd/XRPackageModel 9.0.omo'
error Could not find iPhone X simulator.

This happens despite of I have a long list of available devices:

  'com.apple.CoreSimulator.SimRuntime.tvOS-13-2':
   [ { state: 'Shutdown',
       isAvailable: true,
       name: 'Apple TV',
       udid: 'BAD12887-435C-45D5-B13E-6586685BFC88' },
     { state: 'Shutdown',
       isAvailable: true,
       name: 'Apple TV 4K',
       udid: '529AA5C0-9F45-46EF-BB8A-3314FB43D275' },
     { state: 'Shutdown',
       isAvailable: true,
       name: 'Apple TV 4K (at 1080p)',
       udid: 'DB586BCA-3D1F-4A8F-9815-8B52BA3D7096' } ],
  'com.apple.CoreSimulator.SimRuntime.watchOS-6-1':
   [ { state: 'Shutdown',
       isAvailable: true,
       name: 'Apple Watch Series 4 - 40mm',
       udid: 'DFD19EC2-B77F-4C95-BA04-45592AE57193' },
     { state: 'Shutdown',
       isAvailable: true,
       name: 'Apple Watch Series 4 - 44mm',
       udid: '7F65DDBE-5FC2-4CE0-AAAE-D4ACB0241A14' },
     { state: 'Shutdown',
       isAvailable: true,
       name: 'Apple Watch Series 5 - 40mm',
       udid: '5FBABD54-D483-4425-96AF-DE15D9D642C5' },
     { state: 'Shutdown',
       isAvailable: true,
       name: 'Apple Watch Series 5 - 44mm',
       udid: '3C13557E-371A-496C-84C3-8A6AEDD40348' } ],
  'com.apple.CoreSimulator.SimRuntime.iOS-13-2':
   [ { state: 'Shutdown',
       isAvailable: true,
       name: 'iPhone 8',
       udid: '01CE79A5-432F-4F32-852B-305ABBD95AE8' },
     { state: 'Shutdown',
       isAvailable: true,
       name: 'iPhone 8 Plus',
       udid: 'C017250E-9AD3-48D8-A495-A733FE45F279' },
     { state: 'Booted',
       isAvailable: true,
       name: 'iPhone X',
       udid: '9CF4A51E-D467-463A-B81A-C21C6CD71DC7' },
     { state: 'Shutdown',
       isAvailable: true,
       name: 'iPhone 11',
       udid: '75DFC4B8-39D6-48D0-891D-97CEA48195DC' },
     { state: 'Shutdown',
       isAvailable: true,
       name: 'iPhone 11 Pro',
       udid: 'DD347ECD-DF2C-4551-8665-18E23EF7D2CC' },
     { state: 'Shutdown',
       isAvailable: true,
       name: 'iPhone 11 Pro Max',
       udid: '4CB1554D-D4EB-4ED6-BED8-9C146BB878AB' },
     { state: 'Shutdown',
       isAvailable: true,
       name: 'iPad Pro (9.7-inch)',
       udid: '122AA21B-A116-4196-87C2-8447346A4865' },
     { state: 'Shutdown',
       isAvailable: true,
       name: 'iPad (7th generation)',
       udid: '535E0626-3F23-4198-B3AD-07B116ED2031' },
     { state: 'Shutdown',
       isAvailable: true,
       name: 'iPad Pro (11-inch)',
       udid: 'BF489FDF-8A37-474C-8327-5282032315D2' },
     { state: 'Shutdown',
       isAvailable: true,
       name: 'iPad Pro (12.9-inch) (3rd generation)',
       udid: 'E4FDA665-4AC4-42FC-94BE-DFF87553D077' },
     { state: 'Shutdown',
       isAvailable: true,
       name: 'iPad Air (3rd generation)',
       udid: 'B5A9D9DF-2810-49E0-BDD5-6B8ED9D47846' } ],

Reproducible Demo

Make sure the you use the versions of Xcode and react-native listed at the top of the description section. Then simply run, on your project folder:

react-native run-ios

Possible fix

Using @react-native-community/cli/ version 3.00 seems to lose the problem.
Here's the commit from their GitHub repo: (react-native-community/cli@2f24a8c)

Credenziali SPID di test per accesso alla App (modo sviluppatore)

Una volta lanciata la app sul device per test (modo sviluppatore), dovrei potermi loggare con le credenziali SPID corrispondenti al codice fiscale "dummy" rilasciato per utilizzo del backend.
Inoltre, servirebbe poter utilizzare importo superiore a 0cents. E' possibile?
Grazie

Registrazione online: email non compatibili con la dark mode

Descrivi il problema

Premetto che non è un problema strettamente relativo alla app, ma ai servizi di backend che inviano le email di benvenuto.

Riscaricando Io in versione pubblica (avevo ancora la closed beta...) ho rifatto l'iscrizione.

Ho notato, poichè utilizzo Outlook in modalità dark (tema scuro) che le email non sono visualizzate correttamente

Su Gmail per Android il problema NON si verifica, la mail è leggibile ma al massimo i colori sono meno eleganti. Non è un problema. Segnalo quindi solo per Outlook desktop.

Priorità bassissima.

To Reproduce

Utilizzare un client email con tema scuro

Screenshots

Outlook Office 365 per desktop Windows 10 (NON la webmail)

Dark mode

Senza scaricare le immagini esterne

Dark mode

Scaricando immagini esterne

Light mode

Light mode scaricando le immagini esterne

Additional context
Utilizzo Outlook Office 365 su Win 10.

Dialog permessi con messaggio tagliato

Descrivi il problema
La dialog con la richiesta di abilitazione dei permessi del calendario contiene un messaggio di testo con l'ellipsize, quindi illeggibile.

To Reproduce
Con i permessi del calendario disabilitati, aprire Profilo -> Preferenze -> Calendario preferito

Expected behavior
C'è spazio per espandere il testo su più righe.

Screenshots
Screenshot_20200425

Versione dell'app
1.1.36624

Smartphone (please complete the following information):
HUAWEI P10 lite

Sezione preferenze: icone accese

Descrivi il problema
Nella sezione preferenze, le icone di tutte le voci di menu a parte la prima (elenco dei servizi) possono essere interpretate come CTA mentre non sono cliccabili

Se lo saranno in futuro si potrebbe prevedere una modale come in altri punti dell'app
Se non è previsto che siano cliccabili valutare ui alternativa (spegnere icone o rimuoverle)

@matteodesanti

La parte bassa dell'ultima voce nelle liste di opzioni non è completamente visibile

Descrivi il problema
Sul mio dispositivo, nella schermata "Preferenze" non è possibile scorrere le opzioni fino in fondo, l'ultima voce (al momento "Lingua") rimane tagliata. Mi accadeva lo stesso quando l'ultima voce della sezione "Profilo" era "Logout", ora c'è la stringa per gli sviluppatori e non è chiaro se è tagliata quando si scorre fino in fondo.

Screenshots
io

Versione dell'app
1.0.5748 - 0.0.56

Smartphone:

  • Device: Samsung Galaxy S6 -SM-G920
  • OS: Android 7.0

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.