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

Adicionar sincronização de dispositivo a um aplicativo - Swift SDK

Nesta página

  • Pré-requisitos
  • Adicionar Device Sync a um aplicativo cliente
  • Conecte-se ao backend do Atlas App Services
  • Autenticar um usuário
  • Abrir um realm sincronizado
  • Use o Realm

Dica

Veja também:

Esta página contém informações sobre como adicionar o Device Sync a um aplicativo. Se estiver procurando informações sobre o que é e como funciona o Device Sync , consulte: Atlas App Services: Sincronizar dados.

Antes de acessar um Realm sincronizado a partir do cliente, você deve Habilitar a sincronização na interface do usuário do Atlas App Services . Durante este processo, você deve definir campos consultáveis que correspondam aos campos em seu esquema. Você também define permissões de leitura e escrita para usuários do aplicativo.

Neste exemplo, nosso modelo inclui um campo ownerId que mapeia para o user.id do usuário Flexible Sync.

class Todo: Object {
@Persisted(primaryKey: true) var _id: ObjectId
@Persisted var name: String = ""
@Persisted var ownerId: String
@Persisted var status: String = ""
convenience init(name: String, ownerId: String) {
self.init()
self.name = name
self.ownerId = ownerId
}
}
1

Passe o ID do aplicativo, que você pode encontrar na IU do Atlas App Services .

let app = App(id: FLEX_SYNC_APP_ID) // Replace FLEX_SYNC_APP_ID with your Atlas App ID
2

Autentique um usuário em seu projeto de cliente. Aqui, usaremos a autenticação anônima.

func login() async throws -> User {
// Authenticate with the instance of the app that points
// to your backend. Here, we're using anonymous login.
let user = try await app.login(credentials: Credentials.anonymous)
print("Successfully logged in user: \(user)")
return user
}
3

Abra o Realm como um Realm sincronizado. Você pode especificar se um Realm sincronizado deve baixar os dados antes de ser aberto. Aqui, usamos uma configuração de Flexible Sync e especificamos que o SDK deve sempre baixar as atualizações mais recentes antes de abrir o Realm. Inicializamos o Realm com uma assinatura inicial. Também especificamos os tipos de objeto que queremos incluir nesse Realm.

Dica

Se a sua aplicação acessar Realm em um contexto do async/await, marque o código com @MainActor para evitar falhas relacionadas a threading.

@MainActor
func openSyncedRealm(user: User) async {
do {
var config = user.flexibleSyncConfiguration(initialSubscriptions: { subs in
subs.append(
QuerySubscription<Todo> {
$0.ownerId == user.id
})
})
// Pass object types to the Flexible Sync configuration
// as a temporary workaround for not being able to add a
// complete schema for a Flexible Sync app.
config.objectTypes = [Todo.self]
let realm = try await Realm(configuration: config, downloadBeforeOpen: .always)
useRealm(realm, user)
} catch {
print("Error opening realm: \(error.localizedDescription)")
}
}

A sintaxe para ler, gravar e observar alterações em um domínio sincronizado é idêntica à sintaxe para domínios não sincronizados. Enquanto você trabalha com dados locais, um thread em segundo plano integra, carrega e baixa conjuntos de alterações de forma eficiente.

O seguinte código cria um novo objeto Task e o grava no domínio:

@MainActor
func useRealm(_ realm: Realm, _ user: User) {
// Add some tasks
let todo = Todo(name: "Do laundry", ownerId: user.id)
try! realm.write {
realm.add(todo)
}
}

Importante

Ao usar a sincronização, evite gravações no thread principal

O fato de o Realm realizar integrações de sincronização em um thread em segundo plano significa que, se você escrever em seu domínio no thread principal, há uma pequena chance de sua interface do usuário parecer travar enquanto aguarda que o thread de sincronização em segundo plano termine uma transação de escrita. Portanto, é uma prática recomendada não escrever na thread principal ao usar o Device Sync.

Cada transação de escrita para um conjunto de assinaturas tem um custo de desempenho. Se você precisar fazer várias atualizações em um objeto do Realm durante uma sessão, considere manter objetos editados na memória até que todas as alterações sejam concluídas. Isso melhora o desempenho da sincronização, gravando apenas o objeto completo e atualizado em seu domínio, em vez de cada alteração.

Voltar

Sincronizar dados