You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Android Facebook SDK(4.31.0):CustomTabLoginMethodHandler触发ActivityNotFoundException

解决Facebook SDK更新后登录崩溃(ActivityNotFoundException)的问题

这种情况我之前帮团队踩过一模一样的坑!测试环境完全没问题但线上大量用户崩溃,核心原因几乎都是混淆工具(ProGuard/R8)把Facebook SDK的关键Activity给重命名了——毕竟测试包一般不会开启混淆,而线上包是混淆后的,所以只有用户会触发这个问题。

先看你贴的崩溃堆栈:Unable to find explicit activity class {<our_app_id>/com.facebook.e},这里的com.facebook.e就是被混淆后的类名,真实的Facebook登录相关Activity(比如FacebookActivity)被混淆器改了名字,系统自然找不到Manifest里声明的原始类了。

具体修复步骤:

  • 第一步:补全混淆规则
    打开你的ProGuard/R8配置文件(一般是proguard-rules.pro),添加以下规则防止Facebook SDK的类被混淆:

    # 保留Facebook SDK所有类不被混淆
    -keep class com.facebook.** { *; }
    -keep interface com.facebook.** { *; }
    -keep enum com.facebook.** { *; }
    
    # 如果想更精准,也可以只保留登录相关的核心类
    # -keep class com.facebook.login.** { *; }
    # -keep class com.facebook.FacebookActivity { *; }
    # -keep class com.facebook.CustomTabActivity { *; }
    
  • 第二步:确认Manifest里的Activity声明正确
    检查AndroidManifest.xml,确保已经正确声明了Facebook的必要Activity,示例如下:

    <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" />
            <!-- 这里替换成你的Facebook应用ID对应的scheme,比如fb123456789 -->
            <data android:scheme="@string/fb_login_protocol_scheme" />
        </intent-filter>
    </activity>
    

    注意fb_login_protocol_scheme的值必须是fb加上你的Facebook应用ID,这个字符串要在strings.xml里正确定义。

  • 第三步:验证混淆后的包
    修复后,打一个开启混淆的测试包(比如给debug模式开启混淆),在测试设备上走一遍登录流程,确保不会再出现崩溃——这样能提前确认修复有效,避免再次线上翻车。

额外排查点:

如果上面的步骤没解决,还可以检查:

  1. 你更新的Facebook SDK版本是否和当前的混淆规则匹配,有时候新版本SDK会新增需要保留的类;
  2. 部分用户设备上可能没有安装Facebook应用,或者应用版本过低,导致SDK唤起的Activity不存在,但这种情况概率较低,优先排查混淆问题。

内容的提问来源于stack exchange,提问作者yonix

火山引擎 最新活动