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

Transmitir Dados para o Atlas - Swift SDK

Nesta página

  • Visão geral
  • Sincronizar dados unidirecionalmente a partir de um aplicativo do cliente
  • Definir um objeto assimétrico
  • Conecte-se e autentique-se com um App Services App
  • Abrir um Realm
  • Criar objetos assimétricos

Novidades na versão 10,29,0.

You can use Data Ingest to stream data from the client application to a Flexible Sync-enabled Atlas App Services App.

Talvez você queira sincronizar dados unidirecionalmente em aplicativos IoT, como um sensor meteorológico que envia dados para a nuvem. O arquivo de dados também é útil para gravar outros tipos de dados imutáveis em que você não exige a resolução de conflitos, como criar faturas a partir de uma aplicação de varejo ou registrar evento de aplicação.

A ingestão de dados é otimizada para fornecer melhorias de desempenho para volumes de trabalho pesados somente de inserção no lado do cliente.

1

Você pode sincronizar dados unidirecionalmente quando esse objeto é um AsymmetricObject. Defina um AsymmetricObject derivando do AsymmetricObject:

class WeatherSensor: AsymmetricObject {
@Persisted(primaryKey: true) var _id: ObjectId
@Persisted var deviceId: String
@Persisted var temperatureInFahrenheit: Float
@Persisted var barometricPressureInHg: Float
@Persisted var windSpeedInMph: Int
}

Para obter mais informações sobre como definir um AsymmetricObject, consulte: Definir um AsymmetricObject.

2

Para transmitir dados do cliente para seu aplicativo de backend, você deve conectar-se a um backend do App Services e autenticar um usuário.

let app = App(id: INSERT_APP_ID_HERE)
do {
let user = try await login()
await openSyncedRealm(user: user)
} catch {
print("Error logging in: \(error.localizedDescription)")
}
func login() async throws -> User {
let user = try await app.login(credentials: .anonymous)
return user
}

A ingestão de dados é uma funcionalidade do Flexible Sync, portanto, o aplicativo ao qual você se conecta deve usar o Flexible Sync.

3

Depois de ter um usuário autenticado, você pode abrir um domínio sincronizado usando um flexibleSyncConfiguration(). Especifique os tipos AsymmetricObject que você deseja sincronizar.

@MainActor
func openSyncedRealm(user: User) async {
do {
var asymmetricConfig = user.flexibleSyncConfiguration()
asymmetricConfig.objectTypes = [WeatherSensor.self]
let asymmetricRealm = try await Realm(configuration: asymmetricConfig)
await useRealm(asymmetricRealm, user)
} catch {
print("Error opening realm: \(error.localizedDescription)")
}
}

Ao contrário da sincronização bidirecional, o arquivo de dados não usa uma assinatura Flexible Sync.

Observação

Realms mistos sincronizados e não sincronizados em projetos

O tipo AsymmetricObject é incompatível com domínios não sincronizados. Se o seu projeto usar um domínio sincronizado e não sincronizado, você deverá passar explicitamente um subconjunto de classes na configuração do Realm para excluir o AsymmetricObject do domínio não sincronizado.

Descoberta automática de esquema significa que abrir um domínio não sincronizado sem excluir especificamente o AsymmetricObject da configuração pode gerar um erro relacionado à tentativa de usar um tipo de objeto incompatível.

4

Depois de abrir o Realm, você pode criar um AsymmetricObject dentro de uma transação por escrito usando create (_ type:, value:).

@MainActor
func useRealm(_ asymmetricRealm: Realm, _ user: User) async {
try! asymmetricRealm.write {
asymmetricRealm.create(WeatherSensor.self,
value: [ "_id": ObjectId.generate(),
"deviceId": "WX1278UIT",
"temperatureInFahrenheit": 66.7,
"barometricPressureInHg": 29.65,
"windSpeedInMph": 2
])
}
}

Você não pode ler esses objetos. Depois de criados, eles são sincronizados com o backend do App Services e o reconhecimento de data center vinculado do Atlas.

O Atlas Device Sync gerencia o ciclo de vida desses dados por completo. Ele é mantido no dispositivo até que a sincronização da ingestão de dados seja concluída e, em seguida, é removido do dispositivo.

Voltar

Registre eventos do Realm

Próximo

Sincronização baseada em partição