studio registro receive notification notificaciones google gcm firebasemessagingservice firebaseinstanceidservice fcm android firebase android-service firebase-cloud-messaging android-lint

registro - ¿Cómo abordar la queja sobre las pelusas de Android sobre las implementaciones del servicio Firebase Messaging exportadas?



receive firebase push notification android (1)

Usted pregunta: ... ¿es seguro exponer estos servicios derivados de Firebase en particular como este? Es si confía en los comentarios en los archivos de manifiesto para estos servicios.

En Android Studio, abra el archivo AndroidManifest.xml de su aplicación. En la parte inferior de la ventana, seleccione la pestaña de Manifiesto fusionado . Desplácese hasta encontrar la entrada para FirebaseMessagingService . Haga doble clic en la línea que contiene el nombre del servicio. El archivo de manifiesto para el servicio debería abrirse y verá esto:

<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.google.firebase.messaging"> <uses-sdk android:minSdkVersion="14"/> <application> <!-- FirebaseMessagingService performs security checks at runtime, no need for explicit permissions despite exported="true" --> <service android:name="com.google.firebase.messaging.FirebaseMessagingService" android:exported="true"> <intent-filter android:priority="-500"> <action android:name="com.google.firebase.MESSAGING_EVENT"/> </intent-filter> </service> </application> </manifest>

Tenga en cuenta el comentario: FirebaseMessagingService realiza comprobaciones de seguridad en tiempo de ejecución, sin necesidad de permisos explícitos a pesar de exportado = "true"

Puedes hacer lo mismo para FirebaseInstanceIdService y ver el mismo comentario.

Si confía en los comentarios (yo lo hago), puede ignorar de forma segura las advertencias de pelusas o deshabilitar las comprobaciones.

Siguiendo las instrucciones del desarrollador de Google sobre la implementación de Firebase en mi aplicación , me doy cuenta de que la pelusa de Android se queja.

La idea es que tenemos que implementar dos servicios que heredan de los servicios de Firebase:

public class MyFirebaseInstanceIDService extends FirebaseInstanceIdService { ... } public class MyFirebaseMessagingService extends FirebaseMessagingService { ... }

y luego registrar esos servicios en el manifiesto. Pero, no es del todo perfecto. En particular, estas dos entradas del servicio AndroidManifest.xml recomendadas no contienen ningún permiso especial:

<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>

Y así la linter dice:

Los servicios exportados (servicios que configuran exportado = verdadero o contienen un filtro de intento y no especifican exportado = falso) deben definir un permiso que una entidad debe tener para iniciar el servicio o vincularlo. Sin esto, cualquier aplicación puede utilizar este servicio.

¿Debo agregar este atributo a cada etiqueta de servicio y terminar con él?

tools:ignore="ExportedService"

¿O hay un mejor enfoque en esta situación? Quiero decir, ¿es seguro exponer estos servicios derivados de Firebase en particular como este?