标签: asyncstorage

React Native的异步存储是否安全?

我想在React Native应用程序中本地存储敏感数据.

数据仅供编写它的应用程序使用吗?

react-native asyncstorage

41
推荐指数
4
解决办法
2万
查看次数

React Native - Play 商店警告“从 5 月 5 日开始,您必须让我们知道为什么您的应用需要广泛的存储访问权限”

我有一个 React Native 应用程序,它在 Play 商店上架了一段时间,最近我从 Play 商店收到了这个重要通知,说明如果我不解决这个问题,我的应用程序将从 Play 商店中删除。

谁能告诉我这是什么以及如何解决它?

这是来自 Play 商店的完整消息

我们检测到您的应用在 1 个或多个 app bundle 或 APK 的清单文件中包含 requestLegacyExternalStorage 标志。

在运行 Android 11+ 的设备上使用应用的开发人员必须使用 Scoped Storage 来让用户更好地控制他们的设备存储。要在 5 月 5 日之后在 Android 11 或更高版本上发布您的应用,您必须:

  • 更新您的应用程序以使用更多隐私友好的最佳实践,例如存储访问框架或媒体存储 API
  • 更新您的应用以在清单文件中声明所有文件访问权限 (MANAGE_EXTERNAL_STORAGE),并从 5 月 5 日起在 Play 管理中心完成所有文件访问权限声明
  • 从您的应用程序中完全删除所有文件访问权限。

对于面向 Android 11 的应用,将忽略 requestLegacyExternalStorage 标志。您必须使用所有文件访问权限才能保留广泛访问权限。

未经许可而请求访问所有文件访问权限的应用将从 Google Play 中删除,并且您将无法发布更新。

我的 package.json

{
    "@react-native-async-storage/async-storage": "^1.13.4",
    "@react-native-community/masked-view": "^0.1.10",
    "@react-navigation/bottom-tabs": "^5.11.8",
    "@react-navigation/drawer": "^5.12.3",
    "@react-navigation/material-bottom-tabs": "^5.3.14",
    "@react-navigation/native": "^5.9.2",
    "@react-navigation/stack": "^5.14.2",
    "axios": "^0.21.1",
    "fuse.js": …
Run Code Online (Sandbox Code Playgroud)

android google-play react-native asyncstorage

32
推荐指数
1
解决办法
6341
查看次数

React Native - 如何查看存储在AsyncStorage中的内容?

AsyncStorage在React Native中保存了一些项目,我正在使用chrome调试器和iOS模拟器.

如果没有原生的反应,使用常规的Web开发localStorage,我能够看到存储的localStorage项目Chrome Debugger > Resources > Local Storage

任何想法如何查看React Native AsyncStorage存储的项目?

react-native asyncstorage

26
推荐指数
5
解决办法
2万
查看次数

在反应原生中擦除AsyncStorage

我注意到,我在浪费时间调试一定量的终极版,我坚持到行动AsyncStorage反应母语感谢终极版-坚持.有时我只想擦除AsyncStorage以节省一些开发时间并尝试使用新数据.

编辑:最好的解决方案应该适用于模拟器和真实设备,iOS和Android.也许不同的平台有不同的工作方式.

谢谢

javascript react-native redux asyncstorage

24
推荐指数
5
解决办法
2万
查看次数

在React Native应用程序中使用Realm与Redux

我即将开发React Native应用程序,并且完全相信使用Redux管理应用程序状态的好处,但是我想通过使用Realm进行持久存储来使应用程序的数据在离线时可用.我想知道Redux将如何与Realm一起玩?

我正在开发的应用程序将通过RESTful API提取大量的JSON数据,然后我想将这些数据保存到本地存储 - Realm似乎是一个很好的选择.然而,我不确定Realm数据库将如何存在于Redux商店中?它必须存在于商店外部吗?在基于Redux的应用程序中使用Realm在某种程度上是矛盾吗?

我已经很好地搜索了一些文章,这些文章描述了使用Realm或其他存储选项(Asyncstorage或SQLite)与Redux的大型数据集,并且可以找到很少的信息.

sqlite realm react-native redux asyncstorage

24
推荐指数
1
解决办法
4196
查看次数

如何使用Jest测试异步存储?

我正在用React Native构建一个应用程序.我想尽量减少与数据库通信的频率,因此我大量使用AsyncStorage.但是DB和AsyncStorage之间的转换存在很多错误.因此,我想通过对它运行自动化测试来确保AsyncStorage拥有我相信它所做的数据.令人惊讶的是,我还没有找到任何有关如何在线进行此操作的信息.我试图独自完成这项工作并没有成功.

使用Jest:

it("can read asyncstorage", () => {
return AsyncStorage.getItem('foo').then(foo => {
  expect(foo).not.toBe("");
});  });
Run Code Online (Sandbox Code Playgroud)

此方法失败并显示错误:

TypeError: RCTAsyncStorage.multiGet is not a function
Run Code Online (Sandbox Code Playgroud)

删除返回将使其立即运行而无需等待值并不正确地通过测试.

当我尝试使用await关键字测试它时,我遇到了完全相同的错误:

it('can read asyncstorage', async () => {
this.foo = "";
await AsyncStorage.getItem('foo').then(foo => {
    this.foo = foo;
});
expect(foo).not.toBe(""); });
Run Code Online (Sandbox Code Playgroud)

有关如何成功运行AsyncStorage中的值断言的任何建议?我宁愿继续使用Jest,但如果它只能通过一些备用测试库来完成,我会对此持开放态度.

asynchronous reactjs jestjs react-native asyncstorage

19
推荐指数
3
解决办法
8459
查看次数

在存储使用redux-persist重新水合之前加载初始状态的默认值

应用程序启动后使用redux-persist访问保存的数据时遇到问题.

reducer使用我初始状态中定义的数据进行初始化.当前一个会话的状态加载AsyncStorage时,该组件已显示默认数据.

我知道数据已成功保存和获取.如果我将屏幕留给另一个并回到它,我可以看到数据显示正确.调试状态和道具也表明这是一个异步计时问题.

如何在商店补充水分后延迟加载redux容器.或者,我可以在商店完成加载时强制更新conatainer(及其子代)以进行更新吗?

这是我尝试过的.配置我的商店:

export default function configureStore(initialState) {
    const middlewares = [thunk];
    if (process.env.NODE_ENV === `development`) {
        const createLogger = require(`redux-logger`);
        const logger = createLogger();
        middlewares.push(logger);
    }

    let store = compose(
        applyMiddleware(...middlewares),
        autoRehydrate() )(createStore)(reducers);

        persistStore(store, {blacklist: ['routing'], storage: AsyncStorage}, () => {
            store.dispatch(storeRehydrateComplete())
        })


    return store
}
Run Code Online (Sandbox Code Playgroud)

希望这会更新所有其他组件(因为redux中的所有reducer都在一个动作中被调用),我尝试创建一个在商店完成加载时触发的动作:

import { REHYDRATE_STORE } from './types'

export function storeRehydrateComplete(){
    return {
        type: REHYDRATE_STORE,
    }
}
Run Code Online (Sandbox Code Playgroud)

它是reducer:从{./actions/types'const initialState = {storeIsReady:false}导入{REHYDRATE_STORE}

export default function reducer(state = initialState, action){
    switch (action.type) …
Run Code Online (Sandbox Code Playgroud)

react-native redux asyncstorage

16
推荐指数
1
解决办法
4458
查看次数

等待AsyncStorage.getItem()

AsyncStorage在我的React Native应用程序中使用来存储有关用户的信息.该getItem()函数是异步的,当我想从存储系统加载数据时,我需要实现回调.

AsyncStorage.getItem("phoneNumber").then((value) => {
    this.setState({"phoneNumber": value});
}).done();
Run Code Online (Sandbox Code Playgroud)

因为从存储中检索值不需要很长时间,所以我想等到操作完成后再继续执行.

是否可以以非异步方式加载数据?如果没有,是否有一种简单的方法让我等到getItem()通话完成后继续执行?

react-native asyncstorage

15
推荐指数
2
解决办法
3万
查看次数

使用AsyncStorage如何以及在何处保存整个redux存储

我想知道我是否必须做这样的事情来在我的react-native应用程序中使用AsyncStorage保存我的应用程序的整个商店,并在应用程序启动时检查它是否存在.

var store;

_loadInitialState = async () => {
  try {
    var value = await AsyncStorage.getItem(STORAGE_KEY);
    if (value !== null){
      store = value;
      console.log('Recovered selection from disk: ' + value);
    } else {
      store = configureStore({});
      console.log('Initialized with no selection on disk.');
    }
  } catch (error) {
    console.log('AsyncStorage error: ' + error.message);
  }
};



export default class App extends Component {

  componentWillMount(){
    this._loadInitialState().done()
  }

  render(){
    return(
      <Provider store={store}>
        <AppContainer/>
      </Provider>
    )
  }
}
Run Code Online (Sandbox Code Playgroud)

这不行,但我希望你明白这个想法.

store react-native redux react-redux asyncstorage

13
推荐指数
2
解决办法
1万
查看次数

如何检查React Native中的AsyncStorage中是否存在密钥?getItem()始终返回一个promise对象

我想检查某个键是否可用AsyncStorageAsyncStorage.getItem('key_name').如果密钥不可用,则不返回null,它仍然返回以下promise对象:

Promise
_45:0
_54:null
_65:null
_81:1
Run Code Online (Sandbox Code Playgroud)

我获取数据的功能如下:

checkItemExists(){
    let context = this;
    try {
        let value = AsyncStorage.getItem('item_key');
        if (value != null){
            // do something 
        }
        else {
            // do something else
        }
    } catch (error) {
    // Error retrieving data
    }
}
Run Code Online (Sandbox Code Playgroud)

如何检查AsyncStorage中是否存在密钥?

javascript react-native asyncstorage react-native-android

11
推荐指数
2
解决办法
1万
查看次数