programing

내보낸 Firebase 메시징 서비스 구현에 대한 안드로이드 린트 불만을 해결하는 방법은 무엇입니까?

itmemos 2023. 6. 26. 21:05
반응형

내보낸 Firebase 메시징 서비스 구현에 대한 안드로이드 린트 불만을 해결하는 방법은 무엇입니까?

Google 개발자의 앱에서 Firebase 구현 지침에 따라 안드로이드 린트가 불만을 표시합니다.

이 개념은 Firebase 서비스에서 상속되는 두 가지 서비스를 구현해야 한다는 것입니다.

public class MyFirebaseInstanceIDService extends FirebaseInstanceIdService { ... }

public class MyFirebaseMessagingService extends FirebaseMessagingService { ... }

그런 다음 해당 서비스를 매니페스트에 등록합니다.하지만 완벽하지는 않습니다.특히 다음 두 가지 권장 AndroidManifest.xml 서비스 항목에는 특별한 권한이 없습니다.

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

그래서 린터는 이렇게 말합니다.

내보낸 서비스(exported=true로 설정하거나 intent-filter를 포함하고 exported=false를 지정하지 않는 서비스)는 서비스를 시작하거나 서비스에 바인딩하기 위해 엔티티에 필요한 사용 권한을 정의해야 합니다.이것이 없으면, 어떤 애플리케이션도 이 서비스를 사용할 수 있습니다.

이 속성을 각 서비스 태그에 추가하고 완료해야 합니까?

tools:ignore="ExportedService"

아니면 이 상황에서 더 나은 접근법이 있습니까?제 말은, 이런 파이어베이스 파생 서비스를 노출하는 것이 안전한가요?

이런 Firebase 파생 서비스를 이렇게 노출하는 것이 안전한가요?이러한 서비스에 대한 매니페스트 파일의 주석을 신뢰하는 경우입니다.

Android Studio에서 앱의 AndroidManifest.xml 파일을 엽니다.창 하단에서 병합된 매니페스트 을 선택합니다.스크롤하여 다음에 대한 항목을 찾습니다.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>

주석을 메모합니다.Firebase Messaging Service가 런타임에 보안 검사를 수행하므로 내보냈음에도 불구하고 명시적인 권한이 필요 없음="true"

동일한 작업을 수행할 수 있습니다.FirebaseInstanceIdService그리고 같은 댓글을 봅니다.

설명을 신뢰할 수 있는 경우(그렇습니다) 보풀 경고를 무시하거나 검사를 비활성화할 수 있습니다.

<service android:name=".java.MyFirebaseMessagingService"
    android:exported="false">
    <intent-filter>
        <action android:name="com.google.firebase.MESSAGING_EVENT" />
    </intent-filter>
</service>

공식 코드 샘플을 기준으로 export=false로 설정해도 무방합니다.

언급URL : https://stackoverflow.com/questions/43927149/how-to-address-android-lint-complaint-about-exported-firebase-messaging-service

반응형