Docs 菜单
Docs 主页
/ /
Atlas Device SDKs
/ /

打包 Realm 文件-React Native SDK

在此页面上

  • 步骤
  • 创建要捆绑的 Realm 文件
  • 将 Realm 文件与您的应用捆绑在一起
  • 在应用程序中打开捆绑的 Realm

Realm 支持捆绑Realm 文件。 捆绑 Realm 文件时,您将在应用程序下载中包含一个数据库及其所有数据。

这允许用户使用一设立初始数据首次启动应用程序。 对于同步 Realm,捆绑可以避免用户首次打开应用程序时长时间的初始下载。 相反,用户必须只下载自生成捆绑文件以来发生的同步更改。

重要

仅适用于本地 Realm

此页面上的内容仅适用于本地 Realm。

警告

不适用于 Expo 应用程序

请按照以下步骤为您的 React Native 应用程序创建并捆绑 Realm 文件。

1

为 React Native 应用创建捆绑 Realm 的最简单方法是编写单独的 Node.js 脚本来创建捆绑包。

您应该使用 realm包而不是@realm/react来创建捆绑包。

  1. 构建一个共享应用程序数据模型的临时 Realm 应用。

  2. 打开一个 Realm 并添加要捆绑的数据。 如果使用同步 Realm,请留出时间让 Realm 完全同步。

    create-bundled-realm.js
    import Realm from "realm";
    import { Dog } from "./schemas";
    // open realm
    const config = {
    schema: [Dog],
    path: "bundle.realm",
    };
    const realm = await Realm.open(config);
    // add data to realm
    realm.write(() => {
    realm.create("Dog", { name: "Jasper", age: 10, type: "Golden Retriever" });
    realm.create("Dog", { name: "Maggie", age: 12, type: "Collie" });
    realm.create("Dog", { name: "Sophie", age: 6, type: "German Shepard" });
    });
    realm.close();
  3. 记下捆绑 Realm 文件的文件路径。 您需要此文件才能在生产应用程序中使用捆绑域,如下一节所述。

    temp_realm_app
    .
    ├── bundle.realm
    ... rest of files in _temp_ application
2

现在您已拥有包含初始数据的 Realm 副本,请将捆绑的 Realm 文件添加到生产应用程序中。 对于 iOS 和 Android 版本,放置捆绑 Realm 的位置有所不同。

  1. 在 Android Studio 中打开 React Native 生成的android文件夹。

  2. Project树中,导航到app > src > main 。 右键单击main目录。 创建一个名为assets的新子目录。

  3. 将捆绑的 Realm 文件拖到assets目录中。

  1. 在 Xcode 中,打开React Native生成的ios目录内的your_project_name.xcworkspace文件。

  2. 在项目导航器中选择您的应用,然后在项目概述中选择Build Phases标签页。

  3. 展开Copy Bundle Resources项。

  4. 单击 + 图标。

  5. 单击 Add Other... 按钮。

  6. 找到并添加捆绑的域文件。 请勿更改默认设置,然后选择Finish按钮。

3

域现已捆绑,用户下载应用时将包含该 Realm。 要将捆绑的域文件添加到应用程序的文档目录中,请调用 Realm.copyBundledRealmFiles() 在您打开域之前。

Realm.copyBundledRealmFiles() 会将应用程序包中的所有*.realm文件添加到应用程序文档目录中。 此方法不会覆盖任何现有的同名文件,因此每次启动应用时都可以安全地调用。

使用您最初创建捆绑 Realm 时指定的相同名称和配置,打开捆绑 Realm。

现在您已经拥有生产应用程序中包含的 Realm 副本,您需要添加代码来使用它。

import React from 'react';
import {createRealmContext, Realm} from '@realm/react';
import {Dog} from './schema';
Realm.copyBundledRealmFiles();
const realmContext = createRealmContext({schema: [Dog], path: 'bundle.realm'});
const {RealmProvider} = realmContext;
export default function OpenBundledRealm() {
return (
<RealmProvider>
{/* Rest of app has access to objects pre-populated
in the bundled realm. */}
<RestOfApp />
</RealmProvider>
);
}

后退

配置 Realm