Transmitir Dados para o Atlas - Swift SDK
Nesta página
Visão geral
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.
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 por escrito 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.