升级至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
相关产品推荐
相关产品推荐

