15

Google developer instructions on implementing Firebase in my app 다음에 안드로이드 린트가 불평을합니다.내 보낸 Firebase Messaging 서비스 구현에 관한 안드로이드 보푸라기 불만을 해결하는 방법은 무엇입니까?

public class MyFirebaseInstanceIDService extends FirebaseInstanceIdService { ... } 

public class MyFirebaseMessagingService extends FirebaseMessagingService { ... } 

다음 매니페스트에 해당 서비스를 등록 :

생각

우리가 중포 기지 서비스에서 상속이 개 서비스를 구현해야한다는 것입니다. 그러나, 그것은 완벽하지 않습니다.

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

그래서 린터가 말한다 :

수출 서비스 (서비스하는 세트 중 하나가 = 사실을 수출 또는를 포함 특히,이 두 AndroidManifest.xml에 서비스 항목이 어떤 특별한 권한을 포함하지 않는 것이 좋습니다 intent-filter를 지정하고 exported = false를 지정하지 않음) 엔티티가 서비스를 시작하거나 바인딩하기 위해 가지고 있어야하는 권한을 정의해야합니다. 이 기능이 없으면 모든 응용 프로그램에서이 서비스를 사용할 수 있습니다.

난 그냥 각 서비스 태그에이 속성을 추가해야하며

tools:ignore="ExportedService" 

또는이 상황에서 더 나은 방법이 함께 할 수? 내 말은, 이러한 특정 Firebase 파생 서비스를 공개하는 것이 안전할까요?

답변

22

질문 : ... 이러한 특정 Firebase 파생 서비스를 공개하는 것이 안전할까요? 이러한 서비스에 대한 매니페스트 파일의 주석을 신뢰할 수 있습니다.

Android Studio에서 앱의 AndroidManifest.xml 파일을 엽니 다. 창 하단에서 Merged Manifest의 탭을 선택하십시오. 스크롤하여 FirebaseMessagingService 항목을 찾습니다. 서비스 이름이있는 행을 두 번 클릭하십시오. 서비스에 대한 매니페스트 파일을 열어야하고이 표시됩니다 댓글이

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

참고 : FirebaseMessagingService 런타임에 보안 검사를 수행 명시 적 사용 권한이 필요 수출하지에도 불구하고

당신을 = "true"로 FirebaseInstanceIdService에 대해서도 같은 작업을 수행 할 수 있으며 같은 댓글을 볼 수 있습니다.

(내가하는) 주석을 신뢰할 수 있다면, lint 경고를 무시하거나 수표를 사용하지 않도록 안전하게 할 수 있습니다.

+2

"Merged Manifest"버튼에 대해 알지 못했습니다! 고맙습니다! – AutonomousApps

+0

우리는'android : exported = "false"'를 설정하고 있으며 여전히 알림을 받고 있습니다. 파이어베이스가 정말로 파이썬을 내보낼 필요가 있는지 확실하지 않습니다. – Prakash

+0

이러한 설명을 정당화하기위한 실제 설명이 있습니까? 당신은 그것을 믿을 지 모르지만 왜 우리는해야합니까? – deed02392