2016-09-08 4 views
7

에서 Google Awareness API을 사용하고 있습니다. 내 장치에서 제대로 작동하지만 Crashlytics에서 여러 가지 충돌을 받았습니다. SecurityException.Google 인식 API SecurityException이 발생했습니다.

Fatal Exception: java.lang.SecurityException: Invalid API Key for package = [package_name] .Status code received = -1 
    at android.os.Parcel.readException(Parcel.java:1540) 
    at android.os.Parcel.readException(Parcel.java:1493) 
    at com.google.android.gms.common.internal.zzu$zza$zza.zza(Unknown Source) 
    at com.google.android.gms.common.internal.zzd.zzqz(Unknown Source) 
    at com.google.android.gms.internal.zzpw$zzc.zzapl(Unknown Source) 
    at com.google.android.gms.internal.zzpw$zzf.run(Unknown Source) 
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:422) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:237) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) 
    at com.google.android.gms.internal.zzrn.run(Unknown Source) 
    at java.lang.Thread.run(Thread.java:818) 

이것은 Android 버전간에 상관없이 발생합니다. 즉, 다른 제조업체의 기기와 다양한 Android 버전 (5.x-6.x)에 영향을줍니다. 이러한 장치는 루팅되지 않으며 스톡 ROM에서 작동하는 것처럼 보입니다. 이 문제는 사용자 중 10 %에게 발생합니다.

그렇지 않으면 내 자체 장치에서 충돌을 볼 수있는 올바른 API 키를 사용하고 있다고 확신 할 수 있습니까?

아무도 동일한 문제가 있습니까?

+0

Google 콘솔에 API 키를 만들었습니까? – Amy

+0

@Amy 예, 내 장치에서 작동하며 키가 맞다고 가정합니다. –

+0

@aeinsam * 패키지 이름 *이 * 다른 패키지 이름으로 생성 된 * API 키 *. * API 키 *를 생성하는 동안 앱의 패키지 이름과 개발자 콘솔에 입력 한 패키지 이름을 확인하십시오. –

답변

5

실제 오류가 다른 경우에도 API가 올바르게 설정되지 않았 음을 나타내는 것으로 네트워크 작업의 오류를 실수로 잘못 범하는 버그가 있습니다. 이는 내부적으로 수정되었으며 다음 Google Play 서비스 릴리스에서 출시 될 예정입니다.

지금은 가장 좋은 해결 방법은 GoogleApiClient.connect()를 호출하는 스레드에 UncaughtExceptionHandler를 추가하는 것입니다. 주 스레드에서 GoogleApiClient.connect()를 호출하면 Looper.myLooper(). getThread()를 통해 Thread 인스턴스를 가져올 수 있습니다.

+2

수정 프로그램은 2017 년 초에 출시 될 예정입니다. – mochu

+1

당신은 어떻게 알았습니까? – mklimek

+0

버그 보고서에서 바꿔 쓰는 것 같습니다. 제대로 참조 된 새로운 대답을 만들었습니다. 그 스레드를 주시하고 거기서 업데이트하는 것이 중요합니다. 내가 읽은 바에 따르면 "최선의 해결 방법"이 효과가 있는지 여부에 대한 의견 차이가 있습니다. 소스를 귀속시키지 않기위한 Downvote. –

0

은에서 : https://code.google.com/p/android/issues/detail?id=223751#c2

인증하는 네트워크 오류가있을 때 가끔이 , SecurityException를 던지고 우리의 검사에 버그가 있습니다. 수정 사항은 다음 버전의 Google Play 서비스에서 출시 될 예정입니다.

지금은 GoogleApiClient.connect()라고하는 스레드에서 UncaughtExceptionHandler를 설정하는 것이 가장 좋습니다. 대부분의 사람들은 메인 스레드에 있는데,이 스레드는 Looper.myLooper(). getThread()를 통해 얻을 수 있습니다.

그러나 답장을 보면 단단한 해결책이 아니라는 것을 알 수 있습니다.

그 스레드의 OP가이 SO 게시물을 참조하지만, 받아 들여진 응답은 스레드에서 그대로 복사하더라도 스레드를 참조하지 않습니다. 아주 나쁜 형태!

0

동일한 오류가 발생하면서이 문제가 발생했으며 Google 개발자 콘솔과 동기화되지 않는 인식 API 키일 수 있다고 생각하여 많은 오류가 발생하여 같은 오류가 발생하면 다시 Awareness API를 Google 개발자 콘솔에 설치했는데 패키지가 설정되어 있고 유효한 API 키가 있어도 인식 기능 API를 사용할 수 없음을 깨달았습니다. 또한 매니페스트에 API 키가 설정되어 있는지 확인하십시오. 희망이 사람을 도움이됩니다.

0

나는 거의 하루 종일 고생했고 또 다른 대답을 발견했다. 당시에 받아 들여진 대답은 정확했지만.

유일한 것은 테스트 목적으로 디버그 키 저장소를 사용하여 Google 개발자 콘솔에서 API 키를 생성하고 프로덕션 환경으로 나가는 동안 릴리스 키 저장소로 대체하는 것입니다.

어떻게 API 키를 생성합니까?Google의 단어 자체를 확인하십시오. Here

앞으로 도움이되기를 바랍니다.

관련 문제