Questa domanda è stata trovato su SO. La risposta non risponde in modo soddisfacente alla domanda e siccome è una sicurezza e una che merita una buona spiegazione tecnica, la sto ripubblicando qui. Per favore fatemi sapere se questo non è appropriato.
Seguendo le istruzioni per gli sviluppatori di Google sull'implementazione di Firebase nella mia app , noto che i filamenti di Android si lamenta.
L'idea è che dobbiamo implementare due servizi che ereditano dai servizi di Firebase:
public class MyFirebaseInstanceIDService extends FirebaseInstanceIdService { ... }
public class MyFirebaseMessagingService extends FirebaseMessagingService { ... }
e quindi registrare tali servizi nel manifest. Ma non è proprio perfetto. In particolare, queste due voci del servizio AndroidManifest.xml consigliate non contengono autorizzazioni speciali:
<service android:name=".MyFirebaseMessagingService">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT"/>
</intent-filter>
</service>
<service android:name=".MyFirebaseInstanceIDService">
<intent-filter>
<action android:name="com.google.firebase.INSTANCE_ID_EVENT"/>
</intent-filter>
</service>
e così il linter dice:
Exported services (services which either set exported=true or contain an intent-filter and do not specify exported=false) should define a permission that an entity must have in order to launch the service or bind to it. Without this, any application can use this service.
Devo semplicemente aggiungere questo attributo a ogni tag di servizio e utilizzarlo
tools:ignore="ExportedService"
o c'è un approccio migliore in questa situazione? Voglio dire, è sicuro esporre questi particolari servizi derivati di Firebase come questo?