15

Google developer instructions on implementing Firebase in my app'u izlediğimde, android lint'in şikayet ettiğini görüyorum.Dışa aktarılan Firebase Messaging hizmeti uygulamaları ile ilgili android lint şikayetine nasıl adres verilir?

public class MyFirebaseInstanceIDService extends FirebaseInstanceIdService { ... } 

public class MyFirebaseMessagingService extends FirebaseMessagingService { ... } 

ve sonra manifest'te bu hizmetleri kayıt:

fikri

biz Firebase hizmetlerden devralan iki hizmet uygulamak zorunda olmasıdır. Ama bu mükemmel değil.

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

ve böylece linter diyor:

Dışa hizmetler (servisler hangi seti ya = true ihraç veya içermeyen Özellikle, bu iki AndroidManifest.xml servis girişleri herhangi bir özel izin içermeyen tavsiye niyet süzgeci ve dışa aktarma belirtilmemiş = yanlış), bir hizmetin başlatılması veya ona bağlanması için bir varlığın sahip olması gereken bir izin tanımlamalıdır. Bu olmadan, herhangi bir uygulama bu servisi kullanabilir.

Sadece her hizmet etiketine bu özelliği eklemelerini Should ve onunla

tools:ignore="ExportedService" 

veya bu durumda daha iyi bir yaklaşım olduğunu yapılabilir? Yani, bu Firebase'den türetilen hizmetleri bu şekilde açığa çıkarmak güvenli mi?

cevap

22

Soruyorsunuz: ... Bu Firebase'den türetilen hizmetleri bu şekilde açığa çıkarmak güvenli midir? Bu hizmetlere ilişkin açık dosyalardaki yorumlara güveniyorsanız.

Android Studio'da, uygulamanızın AndroidManifest.xml dosyasını açın. Pencerenin alt kısmında, Birleştirilmiş Manifest için sekmeyi seçin. FirebaseMessagingService için girişi bulmak için kaydırın. Servis adını içeren satıra çift tıklayın. hizmet için bildirim dosyası açılmalıdır ve bu göreceksiniz: Yorum

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

Not: FirebaseMessagingService zamanında güvenlik kontrollerini gerçekleştirir açık izinlere gerek ihraç rağmen

You = "true" FirebaseInstanceIdService için aynı şeyi yapabilir ve aynı yorumu görebilir.

Açıklamalara güvenirseniz (yapıyorum), tüttürme uyarılarını güvenle yok sayabilir veya denetimleri devre dışı bırakabilirsiniz.

+2

"Birleştirilmiş Manifest" düğmesini bilmiyordum! Teşekkür ederim! – AutonomousApps

+0

Biz android: exported = "false" 'ı ayarlıyoruz ve hala bildirim alıyorum. Firebase'in gerçekten ihraç edilmesine ihtiyaç duyup duymadığından emin değil. – Prakash

+0

Bu yorumları doğrulamak için herhangi bir gerçek açıklama var mı? Buna güvenebilirsin, ama neden yapmalıyız? – deed02392