Android Facebook SDK(4.31.0) - CustomTabLoginMethodHandler中的ActivityNotFoundException

yon*_*nix 6 android facebook facebook-login facebook-sdk-4.x

由于我们使用更新的Facebook SDK部署了新版本的Android应用程序,因此我们发现许多用户在Facebook登录时崩溃.它不会在我们的设备上重现.

崩溃和堆栈跟踪:

Caused by android.content.ActivityNotFoundException
Unable to find explicit activity class {<our_app_id>/com.facebook.e}; have you declared this activity in your AndroidManifest.xml?

    android.app.Instrumentation.checkStartActivityResult (Instrumentation.java:1850)
    android.support.v4.app.Fragment.startActivityForResult (Fragment.java:916)
    com.facebook.login.CustomTabLoginMethodHandler.tryAuthorize (CustomTabLoginMethodHandler.java:102)
    com.facebook.login.LoginClient.tryCurrentHandler (LoginClient.java:255)
    com.facebook.login.LoginClient.tryNextHandler (LoginClient.java:217)
    com.facebook.login.LoginClient.authorize (LoginClient.java:122)
    com.facebook.login.LoginClient.startOrContinueAuth (LoginClient.java:103)
    com.facebook.login.LoginFragment.onResume (LoginFragment.java:154)
    android.support.v4.app.Fragment.performResume (Fragment.java:2308)
    com.android.internal.os.ZygoteInit.main (ZygoteInit.java:832)
Run Code Online (Sandbox Code Playgroud)

什么可能导致崩溃的想法以及如何解决?

===编辑===

请注意,只有部分用户崩溃,并且在本地测试时,我们似乎可以毫无问题地登录.

我们在官方文档中推荐的清单中定义了Facebook活动:

<activity
    android:name="com.facebook.FacebookActivity"
    android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation"
    android:label="@string/app_name"/>
<activity
    android:name="com.facebook.CustomTabActivity"
    android:exported="true">
    <intent-filter>
        <action android:name="android.intent.action.VIEW"/>

        <category android:name="android.intent.category.DEFAULT"/>
        <category android:name="android.intent.category.BROWSABLE"/>

        <data android:scheme="@string/fb_login_protocol_scheme"/>
    </intent-filter>
</activity>
<meta-data
    android:name="com.facebook.sdk.ApplicationId"
    android:value="@string/facebook_app_id"/>
Run Code Online (Sandbox Code Playgroud)

ole*_*egr 3

从 stacktrace 和Facebook SDK 来源来看,这似乎com.facebook.ecom.facebook.CustomTabMainActivity. 我不知道 Facebook SDK 在什么情况下调用它,Activity但如果调用它,那么它应该在AndroidManifest.xml.

由于它没有在您的清单中定义,因此不会被混淆。

根据此链接,您的清单中缺少的部分是:

<activity
    android:name="com.facebook.CustomTabMainActivity"
    android:exported="true">
</activity>
Run Code Online (Sandbox Code Playgroud)