15

Suite à la Google developer instructions on implementing Firebase in my app, je remarque que les peluches android se plaint.Comment traiter la plainte de la fibre Android concernant les implémentations du service Firebase Messaging exportées?

L'idée est que nous devons mettre en œuvre deux services qui héritent des services Firebase:

public class MyFirebaseInstanceIDService extends FirebaseInstanceIdService { ... } 

public class MyFirebaseMessagingService extends FirebaseMessagingService { ... } 

puis enregistrez ces services dans le manifeste. Mais ce n'est pas parfait. En particulier, ces deux entrées de service AndroidManifest.xml recommandé ne contiennent pas d'autorisations spéciales:

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

et donc le linter dit:

services Exportés (services soit exporté ensemble = true ou contiennent un intention-filter et ne spécifiez pas exporté = false) doit définir une autorisation qu'une entité doit avoir pour lancer le service ou s'y lier. Sans cela, n'importe quelle application peut utiliser ce service.

Dois-je ajouter que cet attribut à chaque balise de service et être fait avec elle

tools:ignore="ExportedService" 

ou est-il une meilleure approche dans cette situation? Je veux dire, est-il sûr d'exposer ces services dérivés Firebase particulier comme celui-ci?

Répondre

22

Vous demandez: ... est-il sécuritaire d'exposer ces services dérivés de Firebase comme celui-ci? C'est si vous faites confiance aux commentaires dans les fichiers manifestes pour ces services.

Dans Android Studio, ouvrez le fichier AndroidManifest.xml de votre application. Au bas de la fenêtre, sélectionnez l'onglet Manifeste fusionné. Faites défiler pour trouver l'entrée pour FirebaseMessagingService. Double-cliquez sur la ligne qui contient le nom du service. Le fichier manifeste pour le service devrait ouvrir et vous verrez ceci:

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

Notez le commentaire: FirebaseMessagingService effectue des contrôles de sécurité lors de l'exécution, pas besoin d'autorisations explicites malgré l'exportation = « true »

Vous peut faire la même chose pour FirebaseInstanceIdService et voir le même commentaire.

Si vous faites confiance aux commentaires (oui), vous pouvez ignorer les avertissements de peluches ou désactiver les vérifications.

+2

Je ne connaissais pas le bouton "Merged Manifest"! Je vous remercie! – AutonomousApps

+0

Nous définissons 'android: exported =" false "' et je reçois toujours des notifications. Vous ne savez pas si Firebase a vraiment besoin d'être exporté. – Prakash

+0

Y a-t-il une explication réelle pour justifier ces commentaires? Vous pourriez lui faire confiance, mais pourquoi devrions-nous? – deed02392