Docs 菜单

Docs 主页开发应用程序Atlas Device SDKs

将 Device Sync 添加到 App — .NET SDK

在此页面上

  • 连接到 App Services 后端
  • 对用户进行身份验证
  • 打开同步 Realm
  • 使用 Realm
1

传递应用的 App ID,您可以在 App Services 用户界面中找到该 ID。

app = App.Create(myRealmAppId);
2

在客户端项目中对用户进行身份验证。在这里,我们将使用匿名身份验证。

var user = await app.LogInAsync(Credentials.Anonymous());
3

要将 Realm 作为同步 Realm 打开,您可以指定同步 Realm 是否应在打开之前下载数据。 在这里,我们使用“ Flexible Sync”配置,并指定 SDK 应始终在打开域之前下载最新的更新。我们还通过初始订阅来引导域。

var config = new FlexibleSyncConfiguration(app.CurrentUser)
{
PopulateInitialSubscriptions = (realm) =>
{
var myItems = realm.All<Item>().Where(n => n.OwnerId == myUserId);
realm.Subscriptions.Add(myItems);
}
};
// The process will complete when all the user's items have been downloaded.
var realm = await Realm.GetInstanceAsync(config);

在同步 Realm 上读取写入监视变更的语法与非同步 Realm 的语法相同。当您使用本地数据时,后台线程可以高效地集成、上传和下载变更集。

以下代码演示了创建新的Task对象并将其添加到域的两种方法:

var testItem = new Item
{
Name = "Do this thing",
Status = ItemStatus.Open.ToString(),
Assignee = "Aimee"
};
await realm.WriteAsync(() =>
{
realm.Add(testItem);
});
// Or
var testItem2 =
await realm.WriteAsync(() =>
{
return realm.Add<Item>(new Item
{
Name = "Do this thing, too",
Status = ItemStatus.InProgress.ToString(),
Assignee = "Satya"
});
}
);

重要

使用同步时,避免在主线程上进行同步写入

由于 Realm 在背景线程上执行同步集成,因此如果您在主线程上对您的 Realm 进行同步写入,则您的用户界面在等待背景同步线程完成写事务(write transaction)时,很有可能会出现挂起状态。因此,在使用 Device Sync 时,最佳实践是不要在主线程上执行同步写入,而应使用带有realm.WriteAsync的异步写入。

← 在设备之间同步数据 - .NET SDK