Docs Menu
Docs Home
/ /
Atlas Device SDK
/ /

Realm 파일 번들 - .NET SDK

이 페이지의 내용

  • 번들링을 위한 Realm 파일 만들기
  • 프로덕션 애플리케이션에 Realm 파일 번들
  • 번들 Realm 파일에서 Realm 열기

앱을 처음 실행할 때 사용자가 사용할 수 있는 일부 초기 데이터를 모바일 앱에 시드할 수 있습니다. 이렇게 하려면 다음을 수행합니다.

  • 임시 Realm 앱 빌드

  • 기존 영역의 복사본을 만들고(묶고 싶은 데이터만 포함)

  • 앱의 공유 프로젝트에 Realm 파일 을 번들로 제공합니다.

프로덕션 앱(처음 로드할 때 이 번들 영역을 사용하는 앱)에서 몇 줄의 코드를 추가하여 영역을 추출하고 앱 데이터에 저장합니다. 다음 섹션에서 이러한 단계에 대한 자세한 내용을 확인할 수 있습니다.

중요

동기화된 Realm 번들

백엔드 애플리케이션 에서 Flexible Sync 를 사용하는 경우 사용자가 번들 영역 파일 을 처음 열 때 클라이언트 재설정 을 경험할 수 있습니다. 이는 클라이언트 최대 오프라인 시간 이 활성화된 경우(클라이언트 최대 오프라인 시간은 기본값 활성화되어 있음) 발생할 수 있습니다. 사용자가 처음 동기화하기 전에 번들 영역 파일 이 클라이언트 최대 오프라인 시간 설정에 지정된 일수보다 오래 생성된 경우 사용자는 클라이언트 재설정 을 경험하게 됩니다.

클라이언트 재설정을 수행하는 애플리케이션은 애플리케이션 백엔드에서 영역의 전체 상태를 다운로드합니다. 이렇게 하면 Realm 파일을 번들로 제공할 때 얻을 수 있는 이점이 무효화됩니다. 클라이언트 재설정을 방지하고 Realm 파일 번들의 이점을 보존하려면 다음을 수행합니다.

  • 동기화된 영역을 번들로 제공하는 애플리케이션에서는 클라이언트 최대 오프라인 시간을 사용하지 않도록 합니다.

  • 애플리케이션에서 클라이언트 최대 오프라인 시간을 사용하는 경우 애플리케이션 다운로드에 항상 최근에 동기화된 Realm 파일이 포함되어 있는지 확인하세요. 각 애플리케이션 버전마다 새 파일을 생성하고 클라이언트 최대 오프라인 시간 (일)을 초과하는 버전이 최신 상태로 유지되지 않도록 합니다.

  1. 프로덕션 앱과 동일한 Realm 데이터 모델을 사용하여 새 프로젝트를 생성합니다. 번들로 만들 데이터가 있는 기존 Realm을 열거나 새 Realm을 만듭니다.

  2. WriteCopy() 메서드를 사용하여 영역 의 복사본을 새 위치 및/또는 이름으로 만듭니다. 다음 코드는 이를 보여줍니다.

    // 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;

    중요

    동기화된 Realm 복사

    동기화된 영역 을 복사할 때는 보류 중인 동기화 프로세스가 없는지 확인해야 합니다. WaitForUploadAsyncWaitForDownloadAsync를 호출하면 됩니다.

    // 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;

    참고

    동일 유형 동기화만 가능

    이 방법은 다른 파티션 기반 동기화 사용자를 위한 파티션 기반 동기화 구성 복사 또는 다른 Flexible Sync 사용자를 위한 Flexible Sync 구성 복사만 지원합니다. 이 방법을 사용하여 파티션 기반 동기화 영역과 Flexible Sync 영역 간에 또는 그 반대로 변환할 수 없습니다.

이제 '시드' 데이터가 포함된 영역의 복사본이 있으므로 이를 프로덕션 애플리케이션과 번들로 묶어야 합니다. 번들 프로세스는 모바일 앱을 빌드하는지, 아니면 Unity 앱을 빌드하는지에 따라 다릅니다.

  1. 새 영역에 지정한 경로로 이동한 다음, 새로 만든 Realm 파일을 Visual Studio의 공유 Maui/Xamarin 프로젝트로 끌어옵니다.

  2. 메시지가 표시되면 Copy the file to the directory 을 선택합니다.

  3. 공유 프로젝트에서 방금 추가한 Realm 파일을 마우스 오른쪽 버튼으로 클릭하고 Build Action 을 선택한 다음 EmbeddedResource 을 선택합니다.

  1. 프로덕션 Unity 프로젝트 를 엽니다.

  2. 프로젝트 탭 에서 새 영역 파일 을 자산 폴더에 복사합니다. 여기에 저장된 자산은 Application.dataPath 속성 을 통해 앱 에서 사용할 수 있습니다.

참고

크로스 플랫폼 호환성

암호화되지 않은 영역 파일은 크로스 플랫폼과 호환되므로 공유 프로젝트에서 파일을 번들로 사용할 수 있습니다.

이제 앱에 포함된 영역의 복사본이 있으므로 이를 사용하려면 코드를 추가해야 합니다. 추가하는 코드는 앱 유형에 따라 다릅니다.

번들 영역으로 앱을 배포하기 전에 임베디드 리소스에서 영역을 추출하는 코드를 추가하고 앱의 데이터 위치에 저장한 다음 앱에서 이 새 영역을 열어야 합니다. 다음 코드는 앱을 시작하는 동안 이 작업을 수행하는 방법을 보여줍니다. 참고 사항:

  • 이 코드는 지정된 위치에서 영역 파일을 찾을 수 없는 경우에만 실행됩니다(일반적으로 앱을 처음 사용할 때만 해당).

  • 영역을 여는 방법은 동기화된 영역으로 작업하는지 여부에 따라 달라집니다. 자세한 내용은 동기화 없이 Realm 열기를 참조하세요.

// 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);

임베디드 Realm은 Unity 프로젝트의 다른 Realm과 마찬가지로 초기화됩니다.

// 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);

돌아가기

Realm 삭제