You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

升级至Android 31后Expo-Facebook 12.2.0登录报错:需指定FLAG_IMMUTABLE或FLAG_MUTABLE

解决方案

1. 升级expo-facebook到适配Android 31+的版本

expo-facebook 12.2.0属于较旧版本,未适配Android 12(API 31)对PendingIntent的flag强制要求。直接升级到最新稳定版即可解决问题:

expo install expo-facebook@latest

升级后可确认官方文档,通常13.x及以上版本已修复该适配问题。

2. 用patch-package修改底层代码(无法升级时的临时方案)

如果暂时无法升级依赖,可通过patch-package修改expo-facebook的Android原生代码,手动补充PendingIntent的flag:

  • 先安装patch-package工具:
    npm install patch-package --save-dev
    # yarn环境执行
    yarn add patch-package postinstall-postinstall --dev
    
  • 找到node_modules/expo-facebook/android/src/main/java/expo/modules/facebook/FacebookModule.java文件,定位创建PendingIntent的代码段(一般在登录回调逻辑里)
  • 在PendingIntent.getActivity()或PendingIntent.getBroadcast()的最后一个参数中添加PendingIntent.FLAG_IMMUTABLE(若需要动态修改Intent则用FLAG_MUTABLE),示例:
    // 修改前
    PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0);
    // 修改后
    PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_IMMUTABLE);
    
  • 生成补丁文件:
    npx patch-package expo-facebook
    
  • 在package.json的scripts中添加"postinstall": "patch-package",确保每次安装依赖后自动应用补丁。

3. 强制升级Facebook SDK依赖

expo-facebook依赖的Facebook Android SDK可能版本过旧,未适配Android 31。可在android/build.gradle中强制升级SDK版本:

configurations.all {
    resolutionStrategy.force 'com.facebook.android:facebook-android-sdk:15.1.0'
    resolutionStrategy.force 'com.facebook.android:facebook-core:15.1.0'
    resolutionStrategy.force 'com.facebook.android:facebook-login:15.1.0'
}

选择15.1.0及以上版本,该版本已适配Android 12的PendingIntent flag要求。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 21:35:26