programing

java.io .IO 예외: Android Firebase의 FIS_AUTH_ERROR

telebox 2023. 6. 6. 08:11
반응형

java.io .IO 예외: Android Firebase의 FIS_AUTH_ERROR

Firebase 서비스에 다음 오류가 발생했습니다.

 E/FirebaseInstanceId: Topic sync or token retrieval failed on hard failure exceptions: FIS_AUTH_ERROR. Won't retry the operation.
 D/AndroidRuntime: Shutting down VM
    com.google.android.gms.tasks.RuntimeExecutionException: java.io.IOException: FIS_AUTH_ERROR
        at com.google.android.gms.tasks.zzu.getResult(Unknown Source:15)
        at com.myApp.MainActivity$2.onComplete(MainActivity.java:349)
        at com.google.android.gms.tasks.zzj.run(Unknown Source:4)
        at android.os.Handler.handleCallback(Handler.java:883)
        at android.os.Handler.dispatchMessage(Handler.java:100)
        at android.os.Looper.loop(Looper.java:237)
        at android.app.ActivityThread.main(ActivityThread.java:7804)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1068)
     Caused by: java.io.IOException: FIS_AUTH_ERROR
        at com.google.firebase.iid.zzs.zza(com.google.firebase:firebase-iid@@20.1.0:82)
        at com.google.firebase.iid.zzs.zza(com.google.firebase:firebase-iid@@20.1.0:96)
        at com.google.firebase.iid.zzx.then(com.google.firebase:firebase-iid@@20.1.0:4)
        at com.google.android.gms.tasks.zzd.run(Unknown Source:5)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
        at java.lang.Thread.run(Thread.java:919)

다음은 충돌이 발생하는 코드 부분입니다.

        FirebaseInstanceId.getInstance().getInstanceId().addOnCompleteListener(new OnCompleteListener<InstanceIdResult>() {
            @Override
            public void onComplete(@NonNull Task<InstanceIdResult> task) {
                if (task.getResult() != null && task.isSuccessful()) {
                    // Get new Instance ID token
                    firebaseToken = task.getResult().getToken();
                    prefs.edit().putString("firebaseToken", firebaseToken).apply();
                    registerToken();
                }
            }
        });

onComplete에서 오류가 발생합니다.다음은 제가 사용하는 Firebase 종속성입니다.

    // FIREBASE
implementation 'com.google.firebase:firebase-analytics:17.2.3'
implementation 'com.google.firebase:firebase-messaging:20.1.2'
implementation 'com.google.firebase:firebase-appindexing:19.1.0'
implementation 'com.google.firebase:firebase-ads:19.0.0'
implementation 'com.google.firebase:firebase-crashlytics:17.0.0-beta01'

저는 Github에서 이 문제가 제 충돌과 관련이 있다는 을 발견했지만 결정적인 해결책은 전혀 없습니다.이런 종류의 문제에 직면한 사람이 있습니까?잘 부탁드립니다.

참고: Float을 사용하지 않지만 Float 없이 오류가 발생합니다.기기는 Android 10을 지원하는 Samsung A51입니다.

참고 2: Firebase는 Firebase-Core를 제거했습니다.문제는 여기에 이미지 설명 입력그것과 관련이 있을 수 있습니다.

Firebase Cloud Messaging을 사용하는 앱 중 하나에서 갑자기 동일한 오류(FIS_AUTH_ERROR)가 발생했습니다.모든 것이 문제 없이 작동했고, 갑자기 앱이 get으로 앱/디바이스 토큰을 가져올 수 없었습니다.토큰().몇 시간의 연구 끝에 저는 무언가를 발견했고, 그것은 저에게 문제를 해결해 주었습니다.Google-services.json 파일의 값이 프로젝트 설정에서 Firebase Console의 해당 매개 변수와 일치하는지 확인하기로 했습니다.먼저 새로운 구글 서비스.json을 다운로드했는데, 이는 제가 이미 앱 폴더에 가지고 있던 것과 비교해 본 결과 둘 다 아무런 차이 없이 똑같았습니다.Firebase Console에서 프로젝트 ID, 프로젝트 번호 등을 하나씩 확인하고 있었습니다.제가 웹 API Key에 접근했을 때, 그 값은 구글-services.json의 api_key와 매우 유사해 보였지만, 여전히 두 값은 달랐습니다.그리고 파일을 편집하기로 결정했고, api_key 대신 Web API Key에서 값을 입력했습니다.그리고 나서 저는 프로젝트를 청소하고 재건했고, 그 후 모든 것이 완벽하게 작동하기 시작했습니다.

API 키 추가


업데이트 08.2022

1년 이상이 지난 후에도 나는 위의 내용이 여전히 유효하다는 것을 확인할 수 있습니다.Ambrose Bako의 조언에 따라 Google Cloud Console의 주요 제한 사항을 확인하기로 결정했습니다.그리고 나서 저는 제 계정에서 사용할 수 있는 다른 키들의 혼란이 훨씬 더 크다는 것을 발견했습니다.API 키

마지막 키(Maps API 키)는 Firebase 파일인 Google-services.json에 들어가는 키입니다.저는 새로운 복사본을 다운로드했고, 그것은 그 이후로 변하지 않고 그대로입니다.분명히 이 키는 상당히 엄격한 제한이 있지만, 다른 곳에서 사용하기 위한 것이며(구글 맵이 펄럭이고), 제 위치에서 제대로 작동합니다.

이제 맞춰보세요!Firebase에 "Web API Key"로 입력되는 키는 첫 번째 Android 키(Firebase에서 만든 자동)입니다.파이어베이스와 구글 클라우드 콘솔 간에 얼마나 다른 것들이 구성되어 있는지 잘 모르겠지만, 키의 이름을 고려해 볼 때, 두 번째 것인 브라우저 키(Firebase에서 자동으로 생성됨)는 파이어베이스에서 "웹 API 키"로 그 자리를 찾아야 한다고 생각했습니다.

어쨌든 저의 경우 Firebase의 웹 API 키는 실제로 제가 필요로 했던 안드로이드 키였기 때문에 제 구글-services.json에서 제대로 작동했습니다.다른 경우에는 완전히 같지 않을 수도 있기 때문에 이 모든 것을 씁니다.따라서 필요한 경우 Google Cloud Console > APIs & Services > Credentials > API Keys 내부를 살펴보고 오른쪽 Android 키(오른쪽의 "SHOW KEY" 클릭)를 가져다가 Firebase 파일 google-services.json에 배치해야 합니다.이것이 도움이 되길 바랍니다.

당신이 해야 할 일은 당신이 사용하고 있는 API 키가 다음 API에 대한 권한을 갖도록 하는 것입니다.

  1. Firebase 설치 API
  2. Firebase 클라우드 메시징 API
  3. FCM 등록 API
  4. 클라우드 메시징

Google 클라우드 -> API 및 서비스 -> 자격 증명에서 제한 사항을 변경할 수 있습니다.

임시적이지만 작동 중인 솔루션입니다. 다운그레이드 ㅠㅠㅠㅠㅠㅠㅠcom.google.firebase:firebase-messaging:20.1.2com.google.firebase:firebase-messaging:20.1.0보아하니, 어떤 종류의 버그가 있습니다.20.1.1그리고.20.1.2이 더 이상앱이 더 이상 작동하지 않습니다.

업데이트(11.04.2020):에서 테스트했습니다.com.google.firebase:firebase-messaging:20.1.5문제가 해결된 것 같습니다


업데이트(26.04.2020):

영구적인 해결책을 찾았습니다.먼저 com.google로 파이어베이스 종속성을 업그레이드합니다.firebase:firebase-messaging:20.1.6. 그런 다음 firebase에서 google-services.json을 다운로드합니다.현재의 것으로 대체합니다.그 후에build > clean project그렇지 않으면 얻을 수 있습니다.

API key expired. Please renew the API key

오류. 키에는 문제가 없습니다. 구글의 버그입니다.이러한 단계를 완료한 경우 응용 프로그램 태그에서 매니페스트에 선언한 최상위 응용 프로그램 클래스의 만들기에 다음 코드를 추가합니다.

FirebaseOptions options = new FirebaseOptions.Builder()
        .setApplicationId("APP ID") // Required for Analytics.
        .setProjectId("PROJECT ID") // Required for Firebase Installations.
        .setApiKey("GOOGLE API KEY") // Required for Auth.
        .build();
FirebaseApp.initializeApp(this, options, "FIREBASE APP NAME");

파이어베이스 > 프로젝트 설정에서 앱 아이디를 확인하실 수 있습니다.또한 디버깅하는 경우에는 디버깅을 추가하는 것을 잊지 마십시오.SHA-256화력 기지의 열쇠.

이제 저는 더 이상 충돌하지 않습니다.파이어베이스 서비스는 완벽하게 작동합니다.

최근에 Google-services.json 파일을 변경한 경우 프로젝트의 빌드 파일을 제거하고 프로젝트를 다시 빌드해야 합니다.

update: 디버깅 모드에서 앱을 테스트할 때 이 오류가 발생했습니다.릴리스 버전에서는 문제가 해결되어 올바르게 작동했습니다.

https://stacklearn.ir/course/android-introductory-training-course

FIS_AUTH_ERRORFirebase 설치 skd에 대한 인증이 실패했음을 의미합니다.Firebase 설치 skd(또는 FIS)에 의존하는 서비스를 사용하는 경우 유효한 인증이 필요합니다.

Firebase 클라우드 메시징 릴리스 노트:

Firebase 자동 초기화 프로세스와 Gradle 플러그인을 사용하여 Google-services.json을 리소스로 변환하는 앱은 영향을 받지 않습니다.그러나 자체 Firebase Options 인스턴스를 생성하는 앱은 유효한 API 키, Firebase 프로젝트 ID 및 응용 프로그램 ID를 제공해야 합니다.

한 fcm을 사용하는 ) 를 한다면,"FirebaseOptionsFIS를 위한 몇 가지 추가 값을 통과해야 합니다.

솔루션

  • .1.0 으로 다운그레이드firebase-messaging(그러나 권장되지는 않습니다.그것은 문제에서 도망치는 것과 같습니다)
  • 사할경 추용키제공을 를 제공FirebaseOptions

올바른 해결 방법은 Google API 키의 제한에 "파이어베이스 설치 API"를 추가하는 것입니다(Google-services.json 참조).

Google 클라우드 콘솔에서 API 및 서비스, 자격 증명에 있습니다.API 키를 열고 "제한"을 확인합니다.

다시 컴파일할 필요가 없습니다.

Steve의 답변 외에도 Firebase Messaging 자격 증명은 다음 3가지 선택된 API로 제한되어야 합니다.

Firebase Cloud Messaging API
Firebase Installations API
FCM Registration API

Google Cloud Console(APIs & Services -> Credentials)에서 자격 증명으로 이동한 후 관련 키를 클릭하여 위의 3가지 API를 선택합니다.

Android 앱 사용을 제한하는 경우 특정 앱에 대한 SHA-1 지문을 추가해야 합니다.내부 앱 공유를 사용하는 경우 여기에 설명된 대로 내부 앱 번들의 SHA-1도 추가해야 합니다.

나는 이 문제에 대한 해결책을 찾았습니다.

Android Studio의 왼쪽 패널 "Project"에서 Android 보기를 Project 보기로 전환

google-services.json 파일을 "app" 폴더에 복사하지 않습니다(설명서에 나와 있음)... 하지만 이 파일을 상위 루트 폴더에 복사합니다.

그리고 그것은 작동할 것입니다.

이것은 확실히 (모든 구성을 완료한 경우) Firebase 메시징 버전이 다른 종속성과 호환되지 않습니다.

여기서 종속성을 확인할 수 있습니다. 제 솔루션은 에서 다운그레이드하는 것이었습니다.implementation 'com.google.firebase:firebase-messaging:20.1.3'implementation 'com.google.firebase:firebase-messaging:20.1.0'

@mahdi-malv, @ambrose-bako, @steve가 맞습니다.


Firebase Android SDK는 2월 27일(M65) 업데이트되었으며, 이후 Firebase Installations API에 종속된 새로운 인프라 서비스인 Firebase Installations SDK를 도입했습니다.
옵션 Firebase 설치가 합니다.API key,project ID,그리고.application ID명: appId.")의 파일을 저장합니다.

Firebase 설치 API와 통신하는 동안 오류가 발생하면 API 키와 관련하여 Firebase 옵션이 잘못되었거나 구성이 잘못되었음을 나타냅니다.

문제를 완화하기 위해

  • 프로그램이 버전의 합니다.google-services.jsonFirebase 콘솔의 파일:파이어베이스 옵션: 지침 배경.
  • 사용하는 경우API restrictions응용 프로그램에서 사용하는 API 키가 Firebase 설치 API(및 응용 프로그램용)에 대한 화이트리스트에 있는지 확인합니다. API 제한: 지침배경
  • 에 대하여Application restrictions을 "라오버튼을다음설정로합니다으디설다니합정▁to▁the▁either▁button▁set"로 설정합니다.None또는 앱이 화이트리스트에 있는지 확인합니다(올바르게).SHA-1 certificate).

자세한 내용은 다음을 참조하십시오.
https://firebase.google.com/support/privacy/://firebase.google.com/support/privacy/init-options

저는 그냥...

build > clean project

왜냐하면 구글 서비스.json 파일을 여러 번 변경하고 있었기 때문입니다.

만약을 위해 패키지 이름을 바꾸고, 구글-services.json을 삭제하고, 파이어베이스로 들어가 firebase-database를 확인했습니다(read\write).

그런 다음 새 패키지와 해시를 추가한 후에 이전 패키지와 해시를 파이어베이스 프로젝트 설정에서 삭제하고 새 Google-services.json을 수신하여 모든 것이 작동했습니다.

오류는 패키지가 Firebase에 지정되었지만 해시가 없다는 것입니다.

이것이 누군가에게 도움이 되기를 바랍니다.

제 상황에서는 자기 서명된 ca를 사용했습니다.그래서 network-security-config.xml을 사용해야 합니다.

엄청난 시도 끝에 아래와 같은 신뢰 앵커에 시스템 디렉토리를 추가하면 FIS_AUTH_ERROR가 사라지고 Firebase가 작동합니다.

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <base-config>
        <trust-anchors>
            <certificates src="system" />  <!-- for Firebase -->
            <certificates src="user" /> <!-- for tooling.   Ex:Charles --> 
            <certificates src="@raw/ca_1"/> <!-- my self-signed ca-->
        </trust-anchors>
    </base-config>
</network-security-config>

저는 거의 이틀 동안 이 예외 사항과 싸웠고, 이제 해결되었습니다.

  1. 먼저 Ambrose의 답변에 언급된 제한 사항 API를 확인합니다.
  2. Firebase 콘솔 및 클라우드 콘솔에 모든 SHA-1을 추가합니다. 이 경우 다음에서 4개의 SHA-1이 필요합니다.
  • 디버그 키 저장소
  • 릴리스 키 저장소
  • 화재 기지 분포(.AAB를 사용하는 경우)
  • 다음과 같이 플레이스토어의 서명에서 인증된 릴리스:

클라우드 콘솔에 마지막 SHA-1을 추가하면 앱이 잘 작동하는 것 같습니다.이 대답이 다른 사람들에게 도움이 되기를 바랍니다.해피코드!

조금 늦었을 수도 있지만, 이 정보가 누군가를 도울 수 있기를 바랍니다.

저도 문제가 있었습니다.firebase-messaging:21.0.1나는 이 스레드에서 주어진 모든 지시를 따랐지만, 아무 것도 도움이 되지 않았습니다.

궁금한 것은 오류가 발생하기 전에E/FirebaseInstanceId: Topic sync or token retrieval failed on hard failure exceptions: FIS_AUTH_ERROR. Won't retry the operation로그캣이 보여준 것처럼 나타났어요.Firebase Installations Service is unavailable.

몇 가지 조사 후 해결책은 다음과 같습니다.저는 개발 서버에서 자체 서명된 인증서를 사용했으며 여기에 설명된 대로 앱에서 인증서를 참조하십시오.
이로 인해 안드로이드에서 SSL 핸드셰이크가 모두 깨져서 더 이상 Firebase 설치 서비스에 인증할 수 없었습니다.이것을 제거하고 내 개발 환경에 일반 http를 사용한 후 모든 것이 매력적으로 다시 작동합니다.(물론 제품 서버의 경우 루트 신뢰 인증서를 사용하므로 여기서는 문제가 없습니다.)

종속성 업그레이드 및 클린&재구축 프로젝트가 가장 효과적인 솔루션입니다.

안드로이드 스튜디오를 새 컴퓨터에 다시 다운로드했을 때도 같은 문제가 있었습니다.SDK Tools에서 Google Play 서비스를 설정하지 않았고 에뮬레이터에도 Google Play 스토어가 없었습니다. 토론을 참조하십시오. https://github.com/firebase/firebase-android-sdk/issues/1286#issuecomment-951403455

또한 Firebase는InstanceId는 Google Play 서비스에서 토큰을 생성해야 하며 토큰이 없는 장치에서는 실패합니다.

Google Play로 새 Emulator를 만들고 IDE를 다시 시작한 후 문제가 해결되었습니다.

  1. 플레이 스토어의 지문을 추가합니다.
  2. 를 합니다.google-services.json.

그것은 나에게 효과가 있었다.

Steve의 답변 보완

프로젝트에서 Firebase 및 Google Maps API를 사용하고 API KEY에 Key 제한을 추가한 경우 Google 클라우드 콘솔에서 API 제한에 Firebase 설치 API를 추가해야 합니다.

https://console.cloud.google.com/apis/credentials/key/

Firebase 설치 API

저는 api_key가 Google-services.json에서 둘 이상의 current_key로 구성되어 있기 때문에 이러한 현상이 발생했습니다.그리고 firebase sdk는 구글 콘솔에서 해당 제한이 없는 api_key 배열에서 먼저 "current_key"를 가져옵니다.

어떠했었습니까?

이 문제를 해결하려면 올바른 제한이 있는 모든 api_key를 제거하십시오.

내가 어떻게 고쳤는지

추가해야 합니다.

apply plugin: 'com.google.gms.google-services'

implementation platform('com.google.firebase:firebase-bom:x.x.x')
implementation 'com.google.firebase:firebase-analytics'

당신의 app/build.gradle에, 이 코드들은 구글을 만들 때 당신에게 줄 것입니다.파이어베이스 콘솔의 서비스 파일

이 줄을 제거하는 방법

FirebaseApp.initializeApp(ApplicationContext() 가져오기);

SDK를 .google-services.json해결해줬어요

(FIS_AUTH_ERROR를 사용하여) 이 오류에 대한 해결책을 검색하는 방법이 매우 혼란스럽지만, @Andreas Rayo Kniep의 답변, 특히 CURL 명령 테스트를 사용하여 제 문제가 무엇인지 알고 있습니다.

firebase conf를 테스트하는 CURL 명령: curl -H "content-type: application/json" -d "{appId: 'YOUR-APP-ID', sdkVersion: 't:1'}" https://firebaseinstallations.googleapis.com/v1/projects/PROJECT-NAME/installations/ ?key=API-KEY;

상태:PERMISSION_DENIED, 메시지:Referer로부터의 요청이 차단되어 있기 때문에 Google-services.json에서 API 키를 변경해야 합니다.

그래서 저는 Google 콘솔에서 Cloud Messaging, FCM Registration API, Firebase Cloud Messaging API, Firebase Installations API 및 응용 프로그램 제한: 없음에 대한 제한 API를 사용하여 새 API 키를 만듭니다.

그리고 문제는 해결되었습니다!

저는 : com.google을 사용합니다.파이어베이스:파이어베이스-디젤:20.1.0 파이어베이스_디젤:^10.0.2

Crashlytics의 경우 일부 삼성 장치에서만 이를 보고합니다. 특정 삼성 장치에서 Google 서비스가 구현되는 방식과 관련이 있기 때문에 할 수 있는 일이 많지 않다고 생각합니다.

위의 모든 솔루션을 시도했습니다.그들은 나를 위해 일하지 않았습니다.하지만 그 후에 저는 그 앱을 기기에서 삭제하고 다시 설치했습니다.이게 도움이 됐어요.

방법 1

Google 클라우드 콘솔로 이동합니다. https://console.cloud.google.com/

그런 다음 프로젝트를 선택하고 확인합니다.auto-created by firebase tokencredentials -> API keys키를 선택하고 구성해야 하는 제한 사항이 있는지 확인합니다.제한 사항을 지우고 다시 앱을 새로 빌드합니다.

방법 2

를 확인해 .fingerprints->project settings-> 인firebase console키 저장소 파일의 지문 알고리즘으로 교차 확인할 수 있습니다.그런 다음 새 파일을 다운로드합니다.google-services.json하여 안드로이드appAndroid/합니다.

저는 앱의 초기 단계에서 SSL 핀을 구현했다는 것을 잊어버려서 루트 Google Trust Services CA를 다운로드하고 신뢰해야 했습니다.

SSL 핀 연결을 고려해야 한다는 점을 상기시켜 준 GitHub 스레드 덕분입니다. https://github.com/invertase/react-native-firebase/issues/5522#issuecomment-884960850

내 생각에 좋은 선물은 그것이었습니다.curl잘 작동하지만 Android에서는 실패합니다.

제가 핸드폰에 앱을 설치했을 때 이 오류가 발생했습니다.에뮬레이터에서 오류가 발생하지 않았습니다.저는 거의 모든 솔루션을 시도했지만, 저의 경우에는 애플리케이션을 삭제하고 컴파일하고 다시 빌드하기에 충분했습니다.나는 이것을 하루 만에 깨달았습니다.
종속성 사용자 정의:

implementation platform('com.google.firebase:firebase-bom:26.4.0')
implementation 'com.google.firebase:firebase-crashlytics'
implementation 'com.google.android.gms:play-services-auth:16.0.1'
implementation 'com.google.firebase:firebase-analytics:17.3.0'
implementation 'com.google.firebase:firebase-installations:17.0.1'
implementation "com.google.android.gms:play-services-base:16.1.0"
implementation "com.google.firebase:firebase-core:16.0.8"
implementation "com.google.firebase:firebase-messaging:20.1.0"

위의 모든 제안을 시도한 후, 제가 이 문제를 해결할 수 있는 유일한 방법은 새로운 Firebase 프로젝트를 만드는 것이었습니다.Angular 14, Capacitor 4, Ionic 6로 업그레이드하기 위한 방법으로 Angular Ionic 프로젝트를 새로 만든 후 문제가 발생했습니다.동일한 Google-service.json을 모든 src 코드 파일과 함께 새 프로젝트에 복사하고 build.grle 및 AndroidManifest.xml의 package/applicationId를 조정하면 이 문제가 발생합니다.어쨌든, 말씀하신 대로, 3분간의 새로운 Firebase 프로젝트 프로세스는 결국 모든 것을 해결했습니다.

다음 코드를 사용하여 SHA 1 및 SHA 256을 얻은 후 Firebase 패널로 이동하여 새 SHA를 추가하고 Firebase Jason 파일을 다시 다운로드하여 교체하고 프로젝트를 정리 및 재구축해야 합니다.그렇게 하면 당신의 문제가 해결될 것입니다.SHA를 얻기 위한 코드는 아래와 같습니다.keytool -list -v -keystore "I:\안드로이드 프로젝트\Busnet\example.jks" -alias example -storepass example -keypass example

언급URL : https://stackoverflow.com/questions/60698622/java-io-ioexception-fis-auth-error-in-android-firebase

반응형