如何实现React Native与Android原生间的用户ID数据传递
解决React Native到Android原生跨端存储用户ID问题
1 修复react-native-default-preference配置报错
- RN 0.60及以上版本默认支持autolinking,不需要手动注册模块,先删除
MainApplication.java中手动添加的RNDefaultPreferencePackage注册代码,再执行以下命令清理缓存重新构建:cd android && ./gradlew clean && cd .. && npm install && npx react-native run-android - 检查
AndroidManifest.xml文件,确保没有重复声明该库对应的provider节点,重复声明会直接触发类重复报错。
2 解决Android原生读不到RN侧写入值的问题
该问题的核心原因是RN侧和Android原生侧使用了不同的SharedPreferences存储文件,两边必须指定完全一致的文件名才能互通数据:
- RN侧写入数据前先手动指定存储文件名,示例代码:
import DefaultPreference from 'react-native-default-preference'; // 指定和原生侧一致的存储文件名 DefaultPreference.setName('AppCommonPrefs').then(() => { // 写入用户ID DefaultPreference.set('login_user_id', '你的用户ID值'); });
- Android原生启动时读取对应文件的用户ID即可,示例代码:
import android.content.SharedPreferences; import android.content.Context; // 使用Application上下文读取,避免内存泄漏 SharedPreferences sp = getApplicationContext().getSharedPreferences("AppCommonPrefs", Context.MODE_PRIVATE); // 第二个参数为读取不到时返回的默认值 String userId = sp.getString("login_user_id", ""); // 拿到userId后直接传递给SDK即可
注意:不要使用库默认的文件名,必须两边手动指定同一个自定义文件名,否则数据会存在不同的文件中,无法跨端读取。
3 轻量替代方案
如果不想处理第三方库的兼容性问题,可以自己实现原生模块实现存储功能,整体代码量小于100行,完全可控不会出现适配问题:
- Android侧新增一个RN原生模块,暴露存储用户ID的方法,内部直接操作SharedPreferences
- RN侧登录完成后调用该原生方法存储用户ID,原生启动时直接读取自己写入的SharedPreferences即可。
内容的提问来源于stack exchange,提问作者CAZX
相关产品推荐
相关产品推荐

