Android Facebook SDK (4.31.0) - CustomTabLoginMethodHandler 中的 ActivityNotFoundException
Android Facebook SDK (4.31.0) - ActivityNotFoundException in CustomTabLoginMethodHandler
自从我们使用更新的 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)
知道可能导致崩溃的原因以及如何修复吗?
=== 编辑 ===
请注意只有部分 用户崩溃,在本地测试时我们似乎可以正常登录。
我们按照官方文档中的建议在清单中定义了 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"/>
从堆栈跟踪和 Facebook SDK sources 看来 com.facebook.e
是 com.facebook.CustomTabMainActivity
的混淆名称。我不知道 Facebook SDK 在什么情况下会调用此 Activity
,但如果调用它,则应在 AndroidManifest.xml
中定义它。
因为你的manifest里面没有定义,所以不会混淆。
根据this link,您的清单中缺少的部分是:
<activity
android:name="com.facebook.CustomTabMainActivity"
android:exported="true">
</activity>
您是否在如下清单文件中声明了 FacebookActivity
。
<meta-data android:name="com.facebook.sdk.ApplicationId"
android:value="@string/facebook_app_id"/>
<activity android:name="com.facebook.FacebookActivity"
android:configChanges=
"keyboard|keyboardHidden|screenLayout|screenSize|orientation"
android:label="@string/app_name" />
自从我们使用更新的 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)
知道可能导致崩溃的原因以及如何修复吗?
=== 编辑 ===
请注意只有部分 用户崩溃,在本地测试时我们似乎可以正常登录。
我们按照官方文档中的建议在清单中定义了 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"/>
从堆栈跟踪和 Facebook SDK sources 看来 com.facebook.e
是 com.facebook.CustomTabMainActivity
的混淆名称。我不知道 Facebook SDK 在什么情况下会调用此 Activity
,但如果调用它,则应在 AndroidManifest.xml
中定义它。
因为你的manifest里面没有定义,所以不会混淆。
根据this link,您的清单中缺少的部分是:
<activity
android:name="com.facebook.CustomTabMainActivity"
android:exported="true">
</activity>
您是否在如下清单文件中声明了 FacebookActivity
。
<meta-data android:name="com.facebook.sdk.ApplicationId"
android:value="@string/facebook_app_id"/>
<activity android:name="com.facebook.FacebookActivity"
android:configChanges=
"keyboard|keyboardHidden|screenLayout|screenSize|orientation"
android:label="@string/app_name" />