Transmitir Dados para o Atlas - Swift SDK
Nesta página
Visão geral
Novidades na versão 10,29,0.
Você pode usar aingestão de dados para transmitir dados do aplicação cliente para um Atlas App Services habilitado para Flexible Sync .
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.
Sincronizar dados unidirecionalmente a partir de um aplicativo do cliente
Definir um objeto assimétrico
Você pode sincronizar dados unidirecionalmente quando esse objeto é um AsymmetricObject
. Defina um AsymmetricObject derivando do AsymmetricObject:
class WeatherSensor: AsymmetricObject { true) var _id: ObjectId (primaryKey: var deviceId: String var temperatureInFahrenheit: Float var barometricPressureInHg: Float var windSpeedInMph: Int }
Para obter mais informações sobre como definir um AsymmetricObject
, consulte: Definir um AsymmetricObject.
Conecte-se e autentique-se com um App Services App
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.
Abrir um Realm
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.
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.
Criar objetos assimétricos
Depois de abrir o Realm, você pode criar um AsymmetricObject
dentro de uma transação de gravação usando create (_ type:, value:).
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.