Menu Docs
Página inicial do Docs
/ /
Atlas Device SDKs
/ /

Arquivos Realm do pacote - .NET SDK

Nesta página

  • Criar um arquivo Realm para agrupamento
  • Agrupe um arquivo Realm em seu aplicativo de produção
  • Abrir um Realm a partir de um arquivo de Realm agrupado

Talvez você queira semear seu aplicativo móvel com alguns dados iniciais que estarão disponíveis aos usuários no lançamento inicial do aplicativo. Para fazer isso, você:

  • Construa um aplicativo Realm temporário,

  • Faça uma cópia de um Realm existente (apenas com os dados que você deseja agrupar) e, em seguida,

  • Agrupe o Arquivo de Realm no projeto compartilhado do seu aplicativo.

Em seu aplicativo de produção (aquele que usará esse Realm agrupado no primeiro carregamento), adicione algumas linhas de código para extrair o Realm e salvá-lo nos dados do aplicativo. As seções a seguir fornecem mais informações sobre essas etapas.

Importante

Agrupar domínios sincronizados

Se o seu aplicação de backend usar Flexible Sync, os usuários poderão enfrentar um reinício do cliente na primeira vez que abrirem o arquivo de Realm agrupado. Isso pode ocorrer quando o tempo máximo offline do cliente está habilitado (o tempo máximo offline do cliente está habilitado por padrão). Se o arquivo de Realm agrupado tiver sido gerado mais do que o número de dias especificado pela configuração de tempo máximo offline do cliente antes de o usuário sincronizar pela primeira vez, o usuário experimenta uma reinício do cliente.

Os aplicativos que executam uma redefinição do cliente baixam o estado completo do domínio do backend do aplicativo. Isso nega as vantagens de agrupar um arquivo de domínio. Para evitar o reinício do cliente e preservar as vantagens do agrupamento de arquivos realm:

  • Evite usar o tempo offline máximo do cliente em aplicativos que agrupam um domínio sincronizado.

  • Se o seu aplicativo usar o tempo máximo offline do cliente, certifique-se de que o download do aplicativo sempre inclua um arquivo de domínio sincronizado recentemente. Gere um novo arquivo a cada versão do aplicativo e garanta que nenhuma versão permaneça atual por mais do que o número máximo de dias de tempo offline do cliente .

  1. Crie um novo projeto com o mesmo Modelo de dados Realm como seu aplicativo de produção. Abra um Realm existente com os dados que você deseja agrupar ou crie um novo.

  2. Use o método WriteCopy() para fazer uma cópia do Realm para um novo local e/ou nome. O seguinte código demonstra isso.

    // open an existing realm
    var realm = Realm.GetInstance("myRealm.realm");
    // Create a RealmConfiguration for the *copy*
    var config = new RealmConfiguration("bundled.realm");
    // Make sure the file doesn't already exist
    Realm.DeleteRealm(config);
    // Copy the realm
    realm.WriteCopy(config);
    // Want to know where the copy is?
    var locationOfCopy = config.DatabasePath;

    Importante

    Copiando domínios sincronizados

    Ao copiar um Realm sincronizado, você deve garantir que não haja processos de sincronização pendentes. Você faz isso chamando WaitForUploadAsync e WaitForDownloadAsync.

    // open an existing realm
    var existingConfig = new PartitionSyncConfiguration("myPartition", user);
    var realm = await Realm.GetInstanceAsync(existingConfig);
    // Create a RealmConfiguration for the *copy*
    // Be sure the partition name matches the original
    var bundledConfig = new PartitionSyncConfiguration("myPartition", user, "bundled.realm");
    // Make sure the file doesn't already exist
    Realm.DeleteRealm(bundledConfig);
    // IMPORTANT: When copying a Synced realm, you must ensure
    // that there are no pending Sync operations. You do this
    // by calling WaitForUploadAsync() and WaitForDownloadAsync():
    var session = realm.SyncSession;
    await session.WaitForUploadAsync();
    await session.WaitForDownloadAsync();
    // Copy the realm
    realm.WriteCopy(bundledConfig);
    // Want to know where the copy is?
    var locationOfCopy = existingConfig.DatabasePath;

    Observação

    Somente sincronização do mesmo tipo

    Esse método oferece suporte apenas à cópia de uma configuração de Partition-Based Sync para outro usuário de Partition-Based Sync ou uma configuração de Flexible Sync para outro usuário de Flexible Sync. Você não pode usar esse método para converter entre um Partition-Based Sync realm e um Flexible Sync realm ou vice-versa.

Agora que você tem uma cópia do domínio com os dados "seed", é necessário empacotá-lo com seu aplicativo de produção. O processo de agrupamento depende se você está construindo um aplicativo móvel ou aplicativo Unity:

  1. Navegue até o caminho que você especificou para o novo Realm e, em seguida, arraste o Arquivo de Realm recém-criado para o projeto compartilhado Maui/Xamarin no Visual Studio.

  2. Quando solicitado, escolha Copy the file to the directory.

  3. No projeto compartilhado, clique com o botão direito do mouse no Arquivo de Realm que você acabou de adicionar, escolha Build Action e, em seguida, escolha EmbeddedResource.

  1. Abra seu projeto de produção Unity .

  2. Na aba Projeto, Realm o novo arquivo de região para a pasta Ativos . Os ativos armazenados aqui estão disponíveis para o aplicativo por meio da propriedade Application.dataPath .

Observação

Compatibilidade entre plataformas

Os Arquivo de Realm não criptografados são compatíveis com várias plataformas, e é por isso que você pode agrupar o arquivo no projeto compartilhado.

Agora que você tem uma cópia do Realm incluída em seu aplicativo, é necessário adicionar o código para usá-lo. O código adicionado depende do tipo de aplicativo:

Antes de implantar seu aplicativo com o Realm agrupado, você precisa adicionar código para extrair o Realm dos recursos incorporados, salvá-lo no local de dados do aplicativo e, em seguida, abrir esse novo Realm no aplicativo. O código a seguir mostra como você pode fazer isso durante a inicialização do aplicativo. Observe que:

  • esse código só é executado quando nenhum Arquivo de Realm é encontrado no local especificado (normalmente, apenas no uso inicial do aplicativo) e

  • como você abre o Realm depende se você está trabalhando com um Realm sincronizado ou não. Para mais informações, consulte Abrir um Realm sem Sincronização.

// If you are using a local realm
var config = RealmConfiguration.DefaultConfiguration;
// If the realm file is a synced realm
var app = App.Create(Config.AppId);
var user = await app.LogInAsync(Credentials.Anonymous());
config = new PartitionSyncConfiguration("myPartition", user);
// Extract and copy the realm
if (!File.Exists(config.DatabasePath))
{
using var bundledDbStream = Assembly.GetExecutingAssembly()
.GetManifestResourceStream("bundled.realm");
using var databaseFile = File.Create(config.DatabasePath);
bundledDbStream!.CopyTo(databaseFile);
}
// Open the Realm:
var realm = Realm.GetInstance(config);

O realm incorporado é inicializado como qualquer outro realm em um projeto do Unity:

// After copying the above created file to the project folder,
// we can access it in Application.dataPath
// If you are using a local realm
var config = RealmConfiguration.DefaultConfiguration;
// If the realm is synced realm
var app = App.Create("myRealmAppId");
var user = await app.LogInAsync(Credentials.Anonymous());
config = new PartitionSyncConfiguration("myPartition", user);
if (!File.Exists(config.DatabasePath))
FileUtil.CopyFileOrDirectory(Path.Combine(Application.dataPath,
"bundled.realm"), config.DatabasePath);
}
var realm = Realm.GetInstance(config);

Voltar

Excluir um realm