React Native中如何存储用户Token?原Android开发用SharedPreference求跨端方案
嘿,当然有啦!作为从Android转React Native的开发者,我太懂你想要找一个类似SharedPreference的跨端存储方案的需求了。下面给你推荐几个成熟的、支持iOS和Android双端的方案,都是我实际项目里用过的:
1. AsyncStorage(社区维护的官方级方案)
这是最接近SharedPreference的选择,本质是键值对存储,专门用来保存轻量数据(比如Token、用户偏好设置),完全支持双端。现在它已经从React Native核心库移到了社区维护的包中,用法和之前的核心库版本几乎一致。
用法示例:
// 先安装依赖 // npm install @react-native-async-storage/async-storage // 或者 yarn add @react-native-async-storage/async-storage import AsyncStorage from '@react-native-async-storage/async-storage'; // 存储用户Token const saveUserToken = async (token) => { try { await AsyncStorage.setItem('user_token', token); console.log('Token存储成功'); } catch (error) { // 处理存储失败的情况,比如上报日志 console.error('存储Token出错:', error); } }; // 获取用户Token const getUserToken = async () => { try { const token = await AsyncStorage.getItem('user_token'); if (token) { // Token存在,返回使用 return token; } } catch (error) { console.error('获取Token出错:', error); } return null; };
它的异步设计不会阻塞主线程,和SharedPreference的使用场景完全匹配,适合大多数轻量存储需求。
2. MMKV(高性能同步存储方案)
如果你对存储性能有更高要求(比如频繁读写数据),那MMKV绝对是更好的选择。它是腾讯开发的高性能键值存储库,支持同步操作,速度比AsyncStorage快很多,同样支持双端。
用法示例:
// 安装依赖 // npm install react-native-mmkv // 或者 yarn add react-native-mmkv import { MMKV } from 'react-native-mmkv'; // 初始化一个存储实例 const storage = new MMKV(); // 存储Token(同步操作,无需async/await) storage.set('user_token', 'your_jwt_token_here'); // 获取Token const token = storage.getString('user_token'); // 删除Token storage.delete('user_token');
MMKV的同步API让代码更简洁,而且性能优势明显,现在很多React Native项目都已经用它替代AsyncStorage了。
3. SecureStore(Expo专属的安全存储方案)
如果你的项目是基于Expo开发的,并且Token属于敏感数据,那SecureStore是最佳选择。它会利用系统级的安全存储机制:Android上使用Keystore,iOS上使用Keychain,对数据进行加密存储,比普通存储更安全。
用法示例:
// Expo项目无需额外安装,直接导入使用 import * as SecureStore from 'expo-secure-store'; // 存储敏感Token const saveSecureToken = async (token) => { await SecureStore.setItemAsync('secure_user_token', token); }; // 获取敏感Token const getSecureToken = async () => { const token = await SecureStore.getItemAsync('secure_user_token'); return token; };
如果你的Token涉及用户隐私或安全相关操作,优先考虑这个方案。
内容的提问来源于stack exchange,提问作者PuskarShestha
相关产品推荐
相关产品推荐

