Agrupar um arquivo Realm - React Native SDK
Nesta página
O Realm suporta o agrupamento de arquivos realm. Ao agrupar um arquivo de domínio, você inclui um banco de dados e todos os seus dados no download do aplicativo.
Isso permite que os usuários iniciem aplicativos pela primeira vez com um conjunto de dados iniciais. Para domínios sincronizados, o agrupamento pode evitar um download inicial demorado na primeira vez que um usuário abre seu aplicação. Em vez disso, os usuários devem baixar apenas as alterações sincronizadas que ocorreram desde que você gerou o arquivo agrupado.
Importante
Aplica-se apenas a domínios locais
O conteúdo desta página se aplica somente aos domínios locais.
Aviso
Não se aplica aos aplicativos Expo
Este procedimento não funciona para aplicativos React Native criados com a Expo.
Procedimento
Siga estas etapas para criar e agrupar um Arquivo de Realm para sua aplicação React Native.
Crie um Arquivo de Realm para agrupar
A maneira mais fácil de criar um Realm para seu aplicativo React Native é escrever um script Node.js separado para criar o Realm.
Você deve usar o pacote realm
para criar seu pacote em vez de @realm/react
.
Construa um aplicativo de domínio temporário que compartilhe o modelo de dados do seu aplicativo.
Abra um domínio e adicione os dados que deseja agrupar. Se estiver usando um domínio sincronizado, dê tempo para que o domínio sincronize totalmente.
create-bundded-realm.jsimport 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(); Observe o caminho de arquivo do Arquivo de Realm fornecido. Você precisará desse arquivo para usar o Realm empacotado em sua aplicação de produção, conforme descrito na próxima seção.
temp_realm_app. ├── bundle.realm ... rest of files in _temp_ application
Agrupe o Arquivo de Realm com seu aplicativo
Agora que você tem uma cópia do Realm que contém os dados iniciais, adicione o Arquivo de Realm ao sua aplicação de produção. Onde você coloca o Realm difere para compilações iOS e Android.
Abra a pasta
android
gerada pelo React Native no Android Studio.Na árvore Project , navegue até
app > src > main
. Clique com o botão direito do mouse no diretóriomain
. Crie um novo subdiretório denominadoassets
.Arraste o Arquivo de Realm agrupado para o diretório
assets
.
No Xcode, abra o arquivo
your_project_name.xcworkspace
dentro do diretórioios
gerado pelo React Native.Selecione seu aplicativo no navegador do projeto e selecione a aba Build Phases na visão geral do projeto .
Expanda o item Copy Bundle Resources .
Clique no ícone +.
Clique no botão Add Other....
Encontre seu arquivo de Realm fornecido e adicione-o. Não altere as configurações padrão e selecione o botão Finish .
Abra o pacote de Realm em seu aplicativo
O Realm agora está em um pacote e será incluído quando um usuário baixar o aplicativo. Para adicionar o arquivo de Realm agrupado ao diretório de documento do seu aplicativo, ligue para Realm.copyBundledRealmFiles() antes de abrir o Realm.
Realm.copyBundledRealmFiles()
adiciona todos os arquivos *.realm
do pacote de aplicativos ao diretório de documentos do aplicativo. Esse método não substitui nenhum arquivo existente com o mesmo nome, portanto, é seguro chamá-lo toda vez que o aplicativo iniciar.
Abra o Realm agrupado com o mesmo nome e configuração que você especificou quando criou inicialmente o Realm agrupado.
Agora que você tem uma cópia do domínio incluída em seu aplicativo de produção, precisa adicionar código para usá-lo.
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> ); }