android - 왜 모드에 따라 Facebook 인증 SDK가 매우 다르게 작동합니까?




firebase firebase-authentication (4)

App Store에 Android 앱이 있습니다. 백엔드에서 Firebase를 사용하고 Facebook (및 Google)을 통한 소셜 로그인을 제공합니다.

최근 페이스 북은 페이스 북을 통해 로그인 할 때 내 앱이 충돌하고 응답하지 않는다고 경고하기 위해 나를 연락했다. 혼란 스러울 때, 나는 몇 가지 테스트를 시작했다.

내가 찾은 것은 Facebook 앱을 설치하지 않고 Facebook 로그인을 사용하면 모든 것이 완벽하게 작동한다는 것입니다. 사용자는 브라우저 창을 표시하고 로그인 할 수 있으며 내 앱으로 리디렉션되며 본인의 신원을가집니다. 물론 개발 과정에서이 모든 것을 발견했지만, 여전히 작동하고 있음을 확인하고 싶었습니다.

하지만 페이스 북 앱 (내가 개발하는 동안 소홀히했던 것)을 설치할 때 더 이상 작동하지 않는다는 것을 발견했다. 대신 사용자가이 페이지로 리디렉션됩니다.

검색 및 접근성을 위해이 이미지의 텍스트는 다음과 같습니다.

로그인 오류 :이 응용 프로그램에 로그인하는 중에 오류가 발생했습니다. 나중에 다시 시도하십시오.

이 문제가 발생했을 때 로그를 확인하고 관련성이 있을 수있는 다음 항목을 찾았지만 확실하지 않습니다.

07-05 15:36:28.468   908  5828 I ActivityManager: START u0 {act=NATIVE_WITH_FALLBACK cmp=<<redacted>>/com.facebook.FacebookActivity (has extras)} from uid 10264
07-05 15:36:28.469   665   665 D QCOM PowerHAL: LAUNCH HINT: ON
07-05 15:36:28.470   665   665 D QCOM PowerHAL: Activity launch hint handled
07-05 15:36:28.495  4837  4837 W ActivityThread: handleWindowVisibility: no activity for token android.os.[email protected]
07-05 15:36:28.689   665   665 D QCOM PowerHAL: LAUNCH HINT: OFF
07-05 15:36:28.946 29406  4941 W fb4a.BlueServiceQueue: Exception during service
07-05 15:36:28.946 29406  4941 W fb4a.BlueServiceQueue: X.2LH: [code] 404 [message]: Key hash GtvUdcOKFRAE0RY0LIw5veCA+M8= does not match any stored key hashes. (404) [extra]: null
07-05 15:36:28.946 29406  4941 W fb4a.BlueServiceQueue:         at X.1eL.C(:93)
07-05 15:36:28.946 29406  4941 W fb4a.BlueServiceQueue:         at X.2sO.C(:26)
07-05 15:36:28.946 29406  4941 W fb4a.BlueServiceQueue:         at X.CvC.umA(:38)
07-05 15:36:28.946 29406  4941 W fb4a.BlueServiceQueue:         at X.2yi.handleResponse(:224)
07-05 15:36:28.946 29406  4941 W fb4a.BlueServiceQueue:         at X.1dO.run(:71)
07-05 15:36:28.946 29406  4941 W fb4a.BlueServiceQueue:         at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:458)
07-05 15:36:28.946 29406  4941 W fb4a.BlueServiceQueue:         at X.0r0.run(:2)
07-05 15:36:28.946 29406  4941 W fb4a.BlueServiceQueue:         at X.1qG.run(:2)
07-05 15:36:28.946 29406  4941 W fb4a.BlueServiceQueue:         at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
07-05 15:36:28.946 29406  4941 W fb4a.BlueServiceQueue:         at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
07-05 15:36:28.946 29406  4941 W fb4a.BlueServiceQueue:         at X.12V.run(:3)
07-05 15:36:28.946 29406  4941 W fb4a.BlueServiceQueue:         at X.1xB.run(:12)
07-05 15:36:28.946 29406  4941 W fb4a.BlueServiceQueue:         at java.lang.Thread.run(Thread.java:764)
07-05 15:36:28.981   908  8581 I ActivityManager: START u0 {cmp=com.facebook.katana/.ProxyAuth (has extras)} from uid 10264
07-05 15:36:28.982   665   665 D QCOM PowerHAL: LAUNCH HINT: ON
07-05 15:36:28.983   665   665 D QCOM PowerHAL: Activity launch hint handled
07-05 15:36:29.022 29406 29406 W ActivityThread: handleWindowVisibility: no activity for token android.os.[email protected]
07-05 15:36:29.037 29406 29406 E Instrumentation: Uninitialized ActivityThread, likely app-created Instrumentation, disabling AppComponentFactory
07-05 15:36:29.037 29406 29406 E Instrumentation: java.lang.Throwable
07-05 15:36:29.037 29406 29406 E Instrumentation:       at android.app.Instrumentation.getFactory(Instrumentation.java:1224)
07-05 15:36:29.037 29406 29406 E Instrumentation:       at android.app.Instrumentation.newActivity(Instrumentation.java:1215)
07-05 15:36:29.037 29406 29406 E Instrumentation:       at X.05O.newActivity(:3382)
07-05 15:36:29.037 29406 29406 E Instrumentation:       at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2869)
07-05 15:36:29.037 29406 29406 E Instrumentation:       at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3086)
07-05 15:36:29.037 29406 29406 E Instrumentation:       at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
07-05 15:36:29.037 29406 29406 E Instrumentation:       at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
07-05 15:36:29.037 29406 29406 E Instrumentation:       at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
07-05 15:36:29.037 29406 29406 E Instrumentation:       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1816)
07-05 15:36:29.037 29406 29406 E Instrumentation:       at android.os.Handler.dispatchMessage(Handler.java:106)
07-05 15:36:29.037 29406 29406 E Instrumentation:       at android.os.Looper.loop(Looper.java:193)
07-05 15:36:29.037 29406 29406 E Instrumentation:       at android.app.ActivityThread.main(ActivityThread.java:6718)
07-05 15:36:29.037 29406 29406 E Instrumentation:       at java.lang.reflect.Method.invoke(Native Method)
07-05 15:36:29.037 29406 29406 E Instrumentation:       at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
07-05 15:36:29.037 29406 29406 E Instrumentation:       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
07-05 15:36:29.045   908  2933 I ActivityManager: START u0 {flg=0x2000000 cmp=com.facebook.katana/com.facebook.gdp.ProxyAuth (has extras)} from uid 10262
07-05 15:36:29.047   665   665 D QCOM PowerHAL: LAUNCH HINT: ON
07-05 15:36:29.068 29406 29406 W ActivityThread: handleWindowVisibility: no activity for token android.os.[email protected]
07-05 15:36:29.069 29406 29406 E Instrumentation: Uninitialized ActivityThread, likely app-created Instrumentation, disabling AppComponentFactory
07-05 15:36:29.069 29406 29406 E Instrumentation: java.lang.Throwable
07-05 15:36:29.069 29406 29406 E Instrumentation:       at android.app.Instrumentation.getFactory(Instrumentation.java:1224)
07-05 15:36:29.069 29406 29406 E Instrumentation:       at android.app.Instrumentation.newActivity(Instrumentation.java:1215)
07-05 15:36:29.069 29406 29406 E Instrumentation:       at X.05O.newActivity(:3382)
07-05 15:36:29.069 29406 29406 E Instrumentation:       at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2869)
07-05 15:36:29.069 29406 29406 E Instrumentation:       at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3086)
07-05 15:36:29.069 29406 29406 E Instrumentation:       at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
07-05 15:36:29.069 29406 29406 E Instrumentation:       at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
07-05 15:36:29.069 29406 29406 E Instrumentation:       at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
07-05 15:36:29.069 29406 29406 E Instrumentation:       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1816)
07-05 15:36:29.069 29406 29406 E Instrumentation:       at android.os.Handler.dispatchMessage(Handler.java:106)
07-05 15:36:29.069 29406 29406 E Instrumentation:       at android.os.Looper.loop(Looper.java:193)
07-05 15:36:29.069 29406 29406 E Instrumentation:       at android.app.ActivityThread.main(ActivityThread.java:6718)
07-05 15:36:29.069 29406 29406 E Instrumentation:       at java.lang.reflect.Method.invoke(Native Method)
07-05 15:36:29.069 29406 29406 E Instrumentation:       at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
07-05 15:36:29.069 29406 29406 E Instrumentation:       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
07-05 15:36:29.074   908  5828 I ActivityManager: START u0 {cmp=com.facebook.katana/com.facebook.gdp.LightWeightProxyAuthActivity (has extras)} from uid 10262
07-05 15:36:29.075   665   665 D QCOM PowerHAL: LAUNCH HINT: ON
07-05 15:36:29.121 29406 29406 W ActivityThread: handleWindowVisibility: no activity for token android.os.[email protected]
07-05 15:36:29.125 29406 29406 E Instrumentation: Uninitialized ActivityThread, likely app-created Instrumentation, disabling AppComponentFactory
07-05 15:36:29.125 29406 29406 E Instrumentation: java.lang.Throwable
07-05 15:36:29.125 29406 29406 E Instrumentation:       at android.app.Instrumentation.getFactory(Instrumentation.java:1224)
07-05 15:36:29.125 29406 29406 E Instrumentation:       at android.app.Instrumentation.newActivity(Instrumentation.java:1215)
07-05 15:36:29.125 29406 29406 E Instrumentation:       at X.05O.newActivity(:3382)
07-05 15:36:29.125 29406 29406 E Instrumentation:       at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2869)
07-05 15:36:29.125 29406 29406 E Instrumentation:       at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3086)
07-05 15:36:29.125 29406 29406 E Instrumentation:       at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
07-05 15:36:29.125 29406 29406 E Instrumentation:       at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
07-05 15:36:29.125 29406 29406 E Instrumentation:       at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
07-05 15:36:29.125 29406 29406 E Instrumentation:       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1816)
07-05 15:36:29.125 29406 29406 E Instrumentation:       at android.os.Handler.dispatchMessage(Handler.java:106)
07-05 15:36:29.125 29406 29406 E Instrumentation:       at android.os.Looper.loop(Looper.java:193)
07-05 15:36:29.125 29406 29406 E Instrumentation:       at android.app.ActivityThread.main(ActivityThread.java:6718)
07-05 15:36:29.125 29406 29406 E Instrumentation:       at java.lang.reflect.Method.invoke(Native Method)
07-05 15:36:29.125 29406 29406 E Instrumentation:       at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
07-05 15:36:29.125 29406 29406 E Instrumentation:       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
07-05 15:36:29.166  4837  4846 W System  : A resource failed to call end.
07-05 15:36:29.250   665   665 D QCOM PowerHAL: LAUNCH HINT: OFF
07-05 15:36:29.266   908   952 I ActivityManager: Displayed com.facebook.katana/com.facebook.gdp.LightWeightProxyAuthActivity: +237ms
07-05 15:36:29.266 29463 29463 W BackgroundBroad: type=1400 audit(0.0:9257): avc: denied { read } for name="stats" dev="proc" ino=4026533031 scontext=u:r:untrusted_app:s0:c6,c257,c512,c768 tcontext=u:object_r:proc_qtaguid_stat:s0 tclass=file permissive=0
07-05 15:36:29.447   492  1273 D SurfaceFlinger: duplicate layer name: changing Surface(name=6e58560 com.facebook.katana/com.facebook.gdp.LightWeightProxyAuthActivity)/@0x13e5ed5 - animation-leash to Surface(name=6e58560 com.facebook.katana/com.facebook.gdp.LightWeightProxyAuthActivity)/@0x13e5ed5 - animation-leash#1
07-05 15:36:29.456   492  1273 D SurfaceFlinger: duplicate layer name: changing Surface(name=Dim Layer for - Task=2317)/@0x8471ddb - animation-leash to Surface(name=Dim Layer for - Task=2317)/@0x8471ddb - animation-leash#1
07-05 15:36:29.465   908  2933 I ActivityManager: START u0 {cmp=com.facebook.katana/.gdp.WebViewProxyAuth (has extras)} from uid 10262
07-05 15:36:29.467   665   665 D QCOM PowerHAL: LAUNCH HINT: ON
07-05 15:36:29.469   665   665 D QCOM PowerHAL: Activity launch hint handled
07-05 15:36:29.507 29406 29406 W ActivityThread: handleWindowVisibility: no activity for token android.os.[email protected]
07-05 15:36:29.509 29406 29406 E Instrumentation: Uninitialized ActivityThread, likely app-created Instrumentation, disabling AppComponentFactory
07-05 15:36:29.509 29406 29406 E Instrumentation: java.lang.Throwable
07-05 15:36:29.509 29406 29406 E Instrumentation:       at android.app.Instrumentation.getFactory(Instrumentation.java:1224)
07-05 15:36:29.509 29406 29406 E Instrumentation:       at android.app.Instrumentation.newActivity(Instrumentation.java:1215)
07-05 15:36:29.509 29406 29406 E Instrumentation:       at X.05O.newActivity(:3382)
07-05 15:36:29.509 29406 29406 E Instrumentation:       at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2869)
07-05 15:36:29.509 29406 29406 E Instrumentation:       at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3086)
07-05 15:36:29.509 29406 29406 E Instrumentation:       at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
07-05 15:36:29.509 29406 29406 E Instrumentation:       at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
07-05 15:36:29.509 29406 29406 E Instrumentation:       at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
07-05 15:36:29.509 29406 29406 E Instrumentation:       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1816)
07-05 15:36:29.509 29406 29406 E Instrumentation:       at android.os.Handler.dispatchMessage(Handler.java:106)
07-05 15:36:29.509 29406 29406 E Instrumentation:       at android.os.Looper.loop(Looper.java:193)
07-05 15:36:29.509 29406 29406 E Instrumentation:       at android.app.ActivityThread.main(ActivityThread.java:6718)
07-05 15:36:29.509 29406 29406 E Instrumentation:       at java.lang.reflect.Method.invoke(Native Method)
07-05 15:36:29.509 29406 29406 E Instrumentation:       at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
07-05 15:36:29.509 29406 29406 E Instrumentation:       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
07-05 15:36:29.517   908  8581 I ActivityManager: START u0 {cmp=com.facebook.katana/.gdp.ProxyAuthDialog (has extras)} from uid 10262
07-05 15:36:29.519   665   665 D QCOM PowerHAL: LAUNCH HINT: ON
07-05 15:36:29.567 29406 29406 W ActivityThread: handleWindowVisibility: no activity for token android.os.[email protected]
07-05 15:36:29.569 29406 29406 E Instrumentation: Uninitialized ActivityThread, likely app-created Instrumentation, disabling AppComponentFactory
07-05 15:36:29.569 29406 29406 E Instrumentation: java.lang.Throwable
07-05 15:36:29.569 29406 29406 E Instrumentation:       at android.app.Instrumentation.getFactory(Instrumentation.java:1224)
07-05 15:36:29.569 29406 29406 E Instrumentation:       at android.app.Instrumentation.newActivity(Instrumentation.java:1215)
07-05 15:36:29.569 29406 29406 E Instrumentation:       at X.05O.newActivity(:3382)
07-05 15:36:29.569 29406 29406 E Instrumentation:       at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2869)
07-05 15:36:29.569 29406 29406 E Instrumentation:       at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3086)
07-05 15:36:29.569 29406 29406 E Instrumentation:       at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
07-05 15:36:29.569 29406 29406 E Instrumentation:       at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
07-05 15:36:29.569 29406 29406 E Instrumentation:       at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
07-05 15:36:29.569 29406 29406 E Instrumentation:       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1816)
07-05 15:36:29.569 29406 29406 E Instrumentation:       at android.os.Handler.dispatchMessage(Handler.java:106)
07-05 15:36:29.569 29406 29406 E Instrumentation:       at android.os.Looper.loop(Looper.java:193)
07-05 15:36:29.569 29406 29406 E Instrumentation:       at android.app.ActivityThread.main(ActivityThread.java:6718)
07-05 15:36:29.569 29406 29406 E Instrumentation:       at java.lang.reflect.Method.invoke(Native Method)
07-05 15:36:29.569 29406 29406 E Instrumentation:       at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
07-05 15:36:29.569 29406 29406 E Instrumentation:       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
07-05 15:36:29.651   492   540 D SurfaceFlinger: duplicate layer name: changing com.facebook.katana/com.facebook.katana.gdp.ProxyAuthDialog to com.facebook.katana/com.facebook.katana.gdp.ProxyAuthDialog#1
07-05 15:36:29.697   492  1763 D SurfaceFlinger: duplicate layer name: changing Dim Layer for - Task=2317 to Dim Layer for - Task=2317#1
07-05 15:36:29.720   665   665 D QCOM PowerHAL: LAUNCH HINT: OFF
07-05 15:36:29.731   492   540 W SurfaceFlinger: Attempting to set client state on removed layer: Dim Layer for - Task=2317#0
07-05 15:36:29.731   492   540 W SurfaceFlinger: Attempting to destroy on removed layer: Dim Layer for - Task=2317#0

NATIVE_WITH_FALLBACK 모드를 사용하고 NATIVE_WITH_FALLBACK 모드로 변경하여 테스트했습니다. 그것이 원래의 문제를 넘어서게하는 반면에, 그것은 다른 것을 만듭니다. 로그인 정보를 묻지 않고 다음과 같이 표시합니다.

다시, 본문은 :

이전에 Facebook에 $ MY_APP에 로그인했습니다. 계속 하시겠습니까?

계속 진행하기로 선택하면 취소 할 수 있지만 내 앱으로 돌아가지만 Firebase에서는 ERROR_ACCOUNT_EXISTS_WITH_DIFFERENT_CREDENTIAL 오류를 표시하여 계정이 이미 다른 제공 업체와 연결되어 있음을 알립니다. Firebase 콘솔을 체크 인하면 계정이 Facebook 콘솔로 표시됩니다. 따라서 Facebook 앱을 설치하는 것과 같이 Firebase는 별도의 사회 서비스 제공자라고 생각합니다.

마지막으로 다소 절망적 WEB_VIEW_ONLY 인증 모드를 WEB_VIEW_ONLY 전환 해 WEB_VIEW_ONLY . 물론, 이것은 페이스 북을 설치하지 않고 로그인했을 때와 똑같은 경험을 나에게 보여 줬다. 게다가 모든 것이 예상대로 이루어졌습니다.

내 문제는이 모든 것의 의미가 무엇인지 완전히 확신하지 못한다는 것입니다 (참고 : 아래의 내 업데이트 참조). 네이티브 페이스 북 로그인에 대해 어딘가 더 이상 읽지 않는다는 것을 기억합니다 (또는 아마 반대 일 것이고 사용 되어야 합니다). 기본적으로, 나는 매우 혼란스럽고 다음과 같은 질문에 대한 답을 정말로 고맙게 생각합니다.

  • WEB_VIEW_ONLY 허용되는 것을 사용하고 있습니까?
  • 내 포스트 시작시 NATIVE_WITH_FALLBACK 사용하면 오류가 표시되는 이유는 무엇입니까?
  • WEB_ONLY 가 동일한 계정을 다른 제공 업체로 취급하는 이유는 무엇입니까?
  • 왜 Facebook 로그인 SDK는 이러한 모드에서 매우 다르게 동작합니까? 나는 그것들을 인증 그 자체에는 아무런 영향을 미치지 않는 무해한 선호 라고 생각했지만, 나는 잘못했다.

모든 경우에 최신 SDK 버전 사용을 포함하여 공식 문서를 따르고 있습니다.

implementation 'com.facebook.android:facebook-login:[5,6)'

어떤 도움을 주셔서 감사합니다.

업데이트 : 내 앱을 WEB_VIEW_ONLY 업데이트하고 다시 제출했습니다. 페이스 북이 이제 내게 말했다 :

귀하의 앱이 현재 플랫폼 정책 8.2를 위반하고 있습니다. 페이스 북 로그인을 구현하는 기본 iOS 및 Android 앱은 로그인을 위해 공식 SDK를 사용해야합니다. 앱이 로그인 용 Google SDK의 최신 버전을 사용하는지 확인하십시오.

그래서 나는 지금 바위와 어려운 곳 사이에 갇혀있다.


귀하의 로그 키 해시가 일치하지 않는 페이스 북 개발자 계정에 키 해시를 추가해야합니다. 코드 평화를 공유하고 있습니다.이 함수를 호출하고 keyhash를 표시하는 Log를 인쇄하기 만하면됩니다. fb 개발자 계정에서 keyhash를 업데이트하면됩니다. ..

public void generatekeyhash() {
    try {
        PackageInfo info = getPackageManager().getPackageInfo(
                getPackageName(),
                PackageManager.GET_SIGNATURES);
        for (Signature signature : info.signatures) {
            MessageDigest md = MessageDigest.getInstance("SHA");
            md.update(signature.toByteArray());
            Log.d("KeyHash:", Base64.encodeToString(md.digest(), Base64.DEFAULT));
        }
    } catch (PackageManager.NameNotFoundException e) {

    } catch (NoSuchAlgorithmException e) {

    }
}

로그 상단에
Key hash GtvUdcOKFRAE0RY0LIw5veCA+M8= does not match any stored key hashes.

릴리스 용으로 빌드 할 때 아마도 잘못된 keyhash를 사용하고있을 것입니다. 분명히이 문제는 이 링크 에서 설명한 것처럼 잘못된 keyhash를 사용할 때 발생 합니다 .

WEB 모드에서 작동하는 이유는 SDK에 의해 keyhash가 검사되고 웹 페이지로 이동하기 때문에 오류가 발생하지 않기 때문입니다. 디버그 모드에서 실행 중이며 디버그 모드 키 해시가 올바르지 않아서 장치에서 작동하는 이유에 대한 해답이 될 수 있습니다.


여기에 나와있는 답변 중 상당수는 솔루션의 일부를 제공하지만 이것이 완전한 해결책과 설명이라고 생각합니다.

현재 직면하고있는 문제 는 apk를 구축 한 기기 에서 일치하지 않는 HashKey 값과 관련이 있습니다. 빌드 apk를 실행하는 mac, pc 등의 컴퓨터에는 differnt 해시 키가 있으며 해시 키가 최종 apk 빌드로 통합되어 빌드가 다른 컴퓨터에서 완료되면 Facebook 로그인이 작동하지 않습니다.

해결책은 2 가지를하는 것입니다.

첫째, 새 컴퓨터에서 apk 빌드를 만들 때마다 HashKey 문자열을 생성하고 가져와야합니다. 이 작업을 수행하는 코드는 다음과 같습니다.

public static String getMyHashKey(Context context, String packageName){
    try {
        PackageInfo info = context.getPackageManager().getPackageInfo(
                packageName, PackageManager.GET_SIGNATURES);
        for (Signature signature : info.signatures) {
            MessageDigest md = MessageDigest.getInstance(SHA);
            md.update(signature.toByteArray());
            return Base64.encodeToString(md.digest(), Base64.DEFAULT);
        }
    } catch (PackageManager.NameNotFoundException e) {
        e.printStackTrace();
    } catch (NoSuchAlgorithmException e) {
        e.printStackTrace();
    }
    return null;
}

둘째, String을 페이스 북 앱에 설정에 추가해야합니다. 이것은 다음 2 단계를 수행하여 수행 할 수 있습니다.

1) developers.facebook.com 으로 이동하여 해당 앱으로 이동하십시오. 그런 다음 설정 -> 기본을 클릭하십시오.

2) 그런 다음 Android 영역으로 스크롤하고 입력란을 채우십시오. 여러 해시 키를 가질 수 있습니다!

3) 업데이트를 저장하고 업데이트가 완료 될 때까지 기다린 다음 다시 시도하십시오. 그러면 직면 한 문제가 해결됩니다.


이 문제에 대한 설명을 들려줍니다.

07-05 15 : 36 : 28.946 29406 4941 W fb4a.BlueServiceQueue : 서비스 중 예외 07-05 15 : 36 : 28.946 29406 4941 W fb4a.BlueServiceQueue : X.2LH : [코드] 404 [메시지] : 키 해시 GtvUdcOKFRAE0RY0LIw5veCA + M8 = 저장된 키 해시와 일치하지 않습니다. (404) [추가] : null

페이스 북 응용 프로그램에서 구성하는 키 해시는 응용 프로그램에 서명 된 키 저장소 (인증서)와 관련되어 있음을 기억하십시오.

애플리케이션에 서명 할 때 사용하는 Key 해시를 사용해야합니다. 모르는 경우 키 스토어에서 다시 해보기를 권장합니다.

https://developers.facebook.com/docs/android/getting-started/

왜 Facebook 로그인 SDK는 이러한 모드에서 매우 다르게 동작합니까? 나는 그것들을 인증 그 자체에는 아무런 영향을 미치지 않는 무해한 선호라고 생각했지만, 나는 잘못했다.

웹에서는 문제가 없지만 응용 프로그램 내부에있는 경우 응용 프로그램의 사용 권한을 부여해야 하며 안드로이드 응용 프로그램에서이 구현에 매우 중요 하므로 Facebook SDK를 사용해야합니다 .이 경우에는 응용 프로그램에 서명 된 키 해시 인증서를 가져옵니다.





facebook-authentication