{"id":13102,"date":"2022-04-21T12:03:56","date_gmt":"2022-04-21T19:03:56","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=13102"},"modified":"2023-05-22T08:04:40","modified_gmt":"2023-05-22T15:04:40","slug":"building-a-mobile-application-with-couchbase-part-3","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/pt\/building-a-mobile-application-with-couchbase-part-3\/","title":{"rendered":"Cria\u00e7\u00e3o de um aplicativo m\u00f3vel com o Couchbase - Parte 3"},"content":{"rendered":"<h2><span style=\"font-weight: 400\">Parte 3: Adicionando a funcionalidade de sincroniza\u00e7\u00e3o a um servidor centralizado<\/span><\/h2>\n<p><span style=\"font-weight: 400\">Este blog com v\u00e1rias partes ajudar\u00e1 o leitor a criar um aplicativo m\u00f3vel de ponta a ponta usando os recursos l\u00edderes do setor do Couchbase Lite.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400\">Um aplicativo de \u00faltima gera\u00e7\u00e3o, de ponta a ponta, dimension\u00e1vel e de n\u00edvel de produ\u00e7\u00e3o deve incluir os seguintes recursos:<\/span><\/p>\n<ol>\n<li style=\"list-style-type: none\">\n<ul>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Um banco de dados incorporado para armazenar dados localmente no dispositivo e reduzir as viagens de rede para um banco de dados centralizado para cada atividade. Isso contribui muito para melhorar a experi\u00eancia do usu\u00e1rio.<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Realizar pesquisa de texto completo no dispositivo.<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Sincroniza\u00e7\u00e3o com dispositivos m\u00f3veis semelhantes e um servidor centralizado.<\/span><\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<p><span style=\"font-weight: 400\">Esta s\u00e9rie de posts do blog est\u00e1 dividida em quatro partes:<\/span><\/p>\n<ul>\n<li style=\"list-style-type: none\">\n<ul>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\"><a href=\"https:\/\/www.couchbase.com\/blog\/pt\/building-a-mobile-application-with-couchbase-part-1\/\" target=\"_blank\" rel=\"noopener\">Parte 1<\/a> apresenta o processo de cria\u00e7\u00e3o de um aplicativo m\u00f3vel que aproveita o CB Lite e o usa como um banco de dados incorporado para armazenar dados.<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\"><a href=\"https:\/\/www.couchbase.com\/blog\/pt\/building-a-mobile-application-with-couchbase-part-2\/\" target=\"_blank\" rel=\"noopener\">Parte 2<\/a> mostra como executar o Full Text Search (FTS) no dispositivo.<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">A Parte 3 apresenta a sincroniza\u00e7\u00e3o com um servidor Couchbase centralizado a partir de dispositivos de borda.<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">A Parte 4 demonstrar\u00e1 a sincroniza\u00e7\u00e3o ponto a ponto entre dispositivos.<\/span><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p><span style=\"font-weight: 400\">Estamos desenvolvendo este aplicativo com base em <em>Servidor Couchbase<\/em> e com <em>Couchbase Mobile<\/em> usados no dispositivo e para o gerenciamento de sincroniza\u00e7\u00e3o.<\/span><\/p>\n<p><span style=\"font-weight: 400\">O Couchbase \u00e9 um banco de dados em nuvem NoSQL distribu\u00eddo e premiado. Ele oferece versatilidade, desempenho, escalabilidade e valor financeiro inigual\u00e1veis em implanta\u00e7\u00f5es na nuvem, no local, h\u00edbridas, distribu\u00eddas e de computa\u00e7\u00e3o de borda.<\/span><\/p>\n<p><span style=\"font-weight: 400\">O <strong>Couchbase Mobile<\/strong> O portf\u00f3lio inclui:<\/span><\/p>\n<ul>\n<li style=\"list-style-type: none\">\n<ul>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Um banco de dados incorporado para dispositivos de borda.<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Um Sync Gateway de alto desempenho que oferece recursos de sincroniza\u00e7\u00e3o ponto a ponto e de servidor centralizado.<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Datacenters de borda com tecnologia do Couchbase Server que podem ser implantados na nuvem, no local ou localmente.<\/span><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h3 style=\"margin-bottom: 53.1386px\"><span><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-13103\" style=\"color: #333333;font-family: 'Open Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif;font-size: 19px\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2022\/04\/image1-2-1024x667.png\" alt=\"Diagram of the Couchbase Mobile portfolio\" width=\"900\" height=\"586\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/04\/image1-2-1024x667.png 1024w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/04\/image1-2-300x195.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/04\/image1-2-768x500.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/04\/image1-2-20x13.png 20w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/04\/image1-2.png 1225w\" sizes=\"auto, (max-width: 900px) 100vw, 900px\" \/><\/span><\/h3>\n<h2><span style=\"font-weight: 400\">Adi\u00e7\u00e3o da funcionalidade Sync<\/span><\/h2>\n<p><span style=\"font-weight: 400\">O c\u00f3digo para este tutorial est\u00e1 dispon\u00edvel em <\/span><a href=\"https:\/\/github.com\/sandykris123\/couchbasemobile\"><span style=\"font-weight: 400\">meu <\/span><i><span style=\"font-weight: 400\">sof\u00e1-base m\u00f3vel<\/span><\/i><span style=\"font-weight: 400\"> Reposit\u00f3rio do GitHub<\/span><\/a><span style=\"font-weight: 400\">. Estamos trabalhando com o <em>RateIt<\/em> que faz parte do arquivo Rateit.zip, extraia seus arquivos para uma pasta local.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Como alternativa, voc\u00ea pode seguir as instru\u00e7\u00f5es desta s\u00e9rie do blog para criar o aplicativo do zero.<\/span><\/p>\n<p><span style=\"font-weight: 400\">A funcionalidade do aplicativo \u00e9 dividida em tr\u00eas partes:<\/span><\/p>\n<ol>\n<li style=\"list-style-type: none\">\n<ol>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">envio de solicita\u00e7\u00f5es<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">receber solicita\u00e7\u00f5es de outras pessoas<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">visualizar a solicita\u00e7\u00e3o que voc\u00ea enviou<\/span><\/li>\n<\/ol>\n<\/li>\n<\/ol>\n<h3><span style=\"font-weight: 400\">Enviar solicita\u00e7\u00f5es de classifica\u00e7\u00e3o<\/span><\/h3>\n<p><span style=\"font-weight: 400\">O aplicativo que criamos neste tutorial permitir\u00e1 que os usu\u00e1rios enviem uma solicita\u00e7\u00e3o de classifica\u00e7\u00e3o de t\u00f3pico a uma pessoa e recebam as respostas.<\/span><\/p>\n<p><span style=\"font-weight: 400\">A <\/span><i><span style=\"font-weight: 400\">ENVIAR PARA<\/span><\/i><span style=\"font-weight: 400\"> indica o n\u00famero de telefone da pessoa para quem voc\u00ea deseja enviar a solicita\u00e7\u00e3o.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400\">O <\/span><i><span style=\"font-weight: 400\">Mensagem<\/span><\/i><span style=\"font-weight: 400\"> indica o que voc\u00ea deseja que eles fa\u00e7am com ela. Nesse caso, como se trata de uma solicita\u00e7\u00e3o de classifica\u00e7\u00e3o, tenho uma mensagem predefinida de: \"Rate 1-5\" (Classifique de 1 a 5) - indicando que eles precisam fornecer uma classifica\u00e7\u00e3o quando enviarem a solicita\u00e7\u00e3o de volta.<\/span><\/p>\n<p><span style=\"font-weight: 400\">O <\/span><i><span style=\"font-weight: 400\">Assunto<\/span><\/i><span style=\"font-weight: 400\"> indica qualquer t\u00f3pico sobre o qual voc\u00ea deseja obter uma classifica\u00e7\u00e3o, por exemplo, pode ser apenas uma palavra ou frase como:<\/span><\/p>\n<ul>\n<li style=\"list-style-type: none\">\n<ul>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Ator: Chris Hemsworth<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Livro: Orgulho e Preconceito<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">www.google.com<\/span><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p><span style=\"font-weight: 400\">N\u00e3o h\u00e1 nenhuma valida\u00e7\u00e3o rigorosa de entrada nos campos, mas isso \u00e9 algo que voc\u00ea faria em um aplicativo m\u00f3vel de n\u00edvel de produ\u00e7\u00e3o.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Quando voc\u00ea clica em <strong>ENVIAR<\/strong>Uma solicita\u00e7\u00e3o \u00e9 enviada para a pessoa-alvo.<\/span><\/p>\n<h3><span style=\"font-weight: 400\">Pr\u00e9-requisitos do software<\/span><\/h3>\n<p><span style=\"font-weight: 400\">Nesta parte do blog, exigimos que o software a seguir seja instalado em um desktop ou servidor que ser\u00e1 acessado pelo seu aplicativo m\u00f3vel.<\/span><\/p>\n<p><span style=\"font-weight: 400\"><strong>Servidor Couchbase<\/strong> - Instale uma vers\u00e3o em seu laptop ou servidor local usando <\/span><a href=\"https:\/\/www.couchbase.com\/blog\/pt\/downloads\/\"><span style=\"font-weight: 400\">este link de download gratuito<\/span><\/a><span style=\"font-weight: 400\">. <\/span><span style=\"font-weight: 400\">Ap\u00f3s a instala\u00e7\u00e3o bem-sucedida, voc\u00ea poder\u00e1 acessar o console do Couchbase no seu navegador em <\/span><a href=\"https:\/\/localhost:8091\"><i><span style=\"font-weight: 400\">https:\/\/localhost:8091<\/span><\/i><\/a><span style=\"font-weight: 400\">.<\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-13105\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2022\/04\/image3-1-1024x583.png\" alt=\"Couchbase Server download page\" width=\"900\" height=\"512\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/04\/image3-1-1024x583.png 1024w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/04\/image3-1-300x171.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/04\/image3-1-768x437.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/04\/image3-1-20x11.png 20w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/04\/image3-1-1320x752.png 1320w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/04\/image3-1.png 1431w\" sizes=\"auto, (max-width: 900px) 100vw, 900px\" \/><\/p>\n<p><span style=\"font-weight: 400\"><strong>Servidor Sync Gateway<\/strong> - Ele pode estar na mesma m\u00e1quina de desenvolvimento que o Couchbase Server. <\/span><a href=\"https:\/\/www.couchbase.com\/blog\/pt\/downloads\/\"><span style=\"font-weight: 400\">Fa\u00e7a o download do Sync Gateway aqui<\/span><\/a><span style=\"font-weight: 400\"> e revisar o <\/span><a href=\"https:\/\/docs.couchbase.com\/sync-gateway\/current\/introduction.html\"><span style=\"font-weight: 400\">documenta\u00e7\u00e3o aqui<\/span><\/a><span style=\"font-weight: 400\">. <\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-13104\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2022\/04\/image2-2-1024x561.png\" alt=\"Couchbase Mobile Sync Gateway download page\" width=\"900\" height=\"493\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/04\/image2-2-1024x561.png 1024w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/04\/image2-2-300x164.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/04\/image2-2-768x421.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/04\/image2-2-20x11.png 20w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/04\/image2-2-1320x724.png 1320w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/04\/image2-2.png 1432w\" sizes=\"auto, (max-width: 900px) 100vw, 900px\" \/><\/p>\n<p><span style=\"font-weight: 400\">Siga todos os <em>Comece aqui!<\/em> etapas da documenta\u00e7\u00e3o, destacadas aqui em verde.<\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-13116\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2022\/04\/image_2022-04-21_114356367-1024x546.png\" alt=\"Couchbase Sync Gateway setup docs\" width=\"900\" height=\"480\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/04\/image_2022-04-21_114356367-1024x546.png 1024w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/04\/image_2022-04-21_114356367-300x160.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/04\/image_2022-04-21_114356367-768x409.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/04\/image_2022-04-21_114356367-20x11.png 20w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/04\/image_2022-04-21_114356367.png 1266w\" sizes=\"auto, (max-width: 900px) 100vw, 900px\" \/><\/p>\n<p><span style=\"font-weight: 400\">Para come\u00e7ar, fa\u00e7a o seguinte:<\/span><\/p>\n<ul>\n<li style=\"list-style-type: none\">\n<ul>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Inicie o Sync Gateway em seu laptop.<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Conclua todas as etapas da se\u00e7\u00e3o de verifica\u00e7\u00e3o.<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">D\u00ea ao usu\u00e1rio acesso a todos os canais com esta instru\u00e7\u00e3o curl:<\/span><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<pre class=\"decode-attributes:false lang:default decode:true\">curl --location --request PUT 'https:\/\/127.0.0.1:4985\/rateit\/_user\/sgwuser1' \\ \r\n  --header 'Authorization: Basic c3luY19nYXRld2F5OnBhc3N3b3Jk' \\\r\n  --header 'Content-Type: application\/json' \\\r\n  --data-raw '{ \"name\": \"sgwuser1\", \"roles\": [\"stdrole\"] ,\"admin_channels\": [\"*\"]}'<\/pre>\n<p>&nbsp;<\/p>\n<h2><span style=\"font-weight: 400\">Apresentando o aplicativo m\u00f3vel RateIt<\/span><\/h2>\n<p><span style=\"font-weight: 400\">Conforme mostrado nas postagens anteriores, a p\u00e1gina principal do aplicativo tem tr\u00eas bot\u00f5es:<\/span><\/p>\n<ul>\n<li style=\"list-style-type: none\">\n<ul>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">CLIQUE PARA ENVIAR SOLICITA\u00c7\u00c3O DE CLASSIFICA\u00c7\u00c3O<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">SOLICITA\u00c7\u00d5ES DE CLASSIFICA\u00c7\u00c3O RECEBIDAS<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">SOLICITA\u00c7\u00d5ES DE CLASSIFICA\u00c7\u00c3O RECEBIDAS<\/span><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p><span style=\"font-weight: 400\">Adicionaremos componentes de interface do usu\u00e1rio para permitir que voc\u00ea ative e desative a sincroniza\u00e7\u00e3o, al\u00e9m de fornecer uma entrada de texto para que os usu\u00e1rios se identifiquem.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Os arquivos de c\u00f3digo que manipularemos s\u00e3o <\/span><i><span style=\"font-weight: 400\">mainactivity.java <\/span><\/i><span style=\"font-weight: 400\">e <\/span><i><span style=\"font-weight: 400\">activity_main.xml<\/span><\/i><span style=\"font-weight: 400\">.<\/span><\/p>\n<p><span style=\"font-weight: 400\">A sincroniza\u00e7\u00e3o do dispositivo m\u00f3vel com o servidor centralizado \u00e9 para aplicativos que precisam atualizar constantemente um servidor centralizado com quaisquer altera\u00e7\u00f5es feitas nos dispositivos port\u00e1teis. Essa sincroniza\u00e7\u00e3o aplicar\u00e1 essas altera\u00e7\u00f5es a outros dispositivos se eles tamb\u00e9m compartilharem o mesmo aplicativo e a mesma conex\u00e3o de banco de dados centralizado.<\/span><\/p>\n<p>&nbsp;<\/p>\n<h2><span style=\"font-weight: 400\">Revis\u00e3o do c\u00f3digo de sincroniza\u00e7\u00e3o do servidor<\/span><\/h2>\n<p><span style=\"font-weight: 400\">Adicione o seguinte c\u00f3digo a <\/span><b>activity_main.xml<\/b><span style=\"font-weight: 400\"> para incorporar o <\/span><i><span style=\"font-weight: 400\">sincroniza\u00e7\u00e3o <\/span><\/i><span style=\"font-weight: 400\">interruptor. \u00c9 uma chave liga\/desliga que permite que o usu\u00e1rio decida quando ativar a sincroniza\u00e7\u00e3o.<\/span><\/p>\n<pre class=\"decode-attributes:false lang:xhtml decode:true\">&lt;Switch\r\n\u00a0 \u00a0 android:id=\"@+id\/switch1\"\r\n\u00a0 \u00a0 android:layout_width=\"158dp\"\r\n\u00a0 \u00a0 android:layout_height=\"38dp\"\r\n\u00a0 \u00a0 android:layout_marginStart=\"2dp\"\r\n\u00a0 \u00a0 android:layout_marginTop=\"8dp\"\r\n\u00a0 \u00a0 android:layout_marginEnd=\"2dp\"\r\n\u00a0 \u00a0 android:layout_marginBottom=\"8dp\"\r\n\u00a0 \u00a0 android:background=\"#F44336\"\r\n\u00a0 \u00a0 android:backgroundTint=\"#F44336\"\r\n\u00a0 \u00a0 android:checked=\"false\"\r\n\u00a0 \u00a0 android:switchMinWidth=\"50dp\"\r\n\u00a0 \u00a0 android:switchTextAppearance=\"@style\/TextAppearance.AppCompat.Body2\"\r\n\u00a0 \u00a0 android:text=\"SYNC ON\/OFF\"\r\n\u00a0 \u00a0 android:textColor=\"@color\/black\"\r\n\u00a0 \u00a0 android:textOff=\"OFF\"\r\n\u00a0 \u00a0 android:textOn=\"ON\"\r\n\u00a0 \u00a0 android:textSize=\"16sp\"\r\n\u00a0 \u00a0 android:textStyle=\"bold\"\r\n\u00a0 \u00a0 android:visibility=\"visible\"\r\n\u00a0 \u00a0 app:layout_constraintBottom_toTopOf=\"@+id\/send\"\r\n\u00a0 \u00a0 app:layout_constraintEnd_toEndOf=\"parent\"\r\n\u00a0 \u00a0 app:layout_constraintHorizontal_bias=\"0.0\"\r\n\u00a0 \u00a0 app:layout_constraintStart_toStartOf=\"parent\"\r\n\u00a0 \u00a0 app:layout_constraintTop_toBottomOf=\"@+id\/textView\" \/&gt;<\/pre>\n<p><span style=\"font-weight: 400\">O seguinte trecho de XML usa o <\/span><i><span style=\"font-weight: 400\">nome de usu\u00e1rio <\/span><\/i><span style=\"font-weight: 400\">como entrada do usu\u00e1rio e tem um r\u00f3tulo associado para torn\u00e1-lo f\u00e1cil de usar.<\/span><\/p>\n<pre class=\"decode-attributes:false lang:xhtml decode:true\">&lt;TextView\r\n\u00a0 \u00a0 android:id=\"@+id\/textView5\"\r\n\u00a0 \u00a0 android:layout_width=\"51dp\"\r\n\u00a0 \u00a0 android:layout_height=\"35dp\"\r\n\u00a0 \u00a0 android:layout_marginStart=\"16dp\"\r\n\u00a0 \u00a0 android:layout_marginTop=\"8dp\"\r\n\u00a0 \u00a0 android:background=\"#2196F3\"\r\n\u00a0 \u00a0 android:gravity=\"center\"\r\n\u00a0 \u00a0 android:text=\"USER\"\r\n\u00a0 \u00a0 android:textStyle=\"bold\"\r\n\u00a0 \u00a0 app:layout_constraintStart_toEndOf=\"@+id\/switch1\"\r\n\u00a0 \u00a0 app:layout_constraintTop_toBottomOf=\"@+id\/textView\" \/&gt;\r\n\r\n&lt;EditText\r\n\u00a0 \u00a0 android:id=\"@+id\/username\"\r\n\u00a0 \u00a0 android:layout_width=\"154dp\"\r\n\u00a0 \u00a0 android:layout_height=\"35dp\"\r\n\u00a0 \u00a0 android:layout_marginStart=\"67dp\"\r\n\u00a0 \u00a0 android:layout_marginTop=\"8dp\"\r\n\u00a0 \u00a0 android:background=\"@color\/white\"\r\n\u00a0 \u00a0 android:backgroundTint=\"@color\/white\"\r\n\u00a0 \u00a0 android:ems=\"10\"\r\n\u00a0 \u00a0 android:inputType=\"textPersonName\"\r\n\u00a0 \u00a0 android:text=\"Name\"\r\n\u00a0 \u00a0 app:layout_constraintStart_toStartOf=\"@+id\/textView5\"\r\n\u00a0 \u00a0 app:layout_constraintTop_toBottomOf=\"@+id\/textView\" \/&gt;<\/pre>\n<p><span style=\"font-weight: 400\">A p\u00e1gina inicial do aplicativo agora ter\u00e1 a seguinte apar\u00eancia: observe os novos componentes na linha superior:<\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone  wp-image-13108\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2022\/04\/image6-501x1024.png\" alt=\"Couchbase Mobile app with new UI components\" width=\"280\" height=\"573\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/04\/image6-501x1024.png 501w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/04\/image6-147x300.png 147w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/04\/image6-300x613.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/04\/image6-10x20.png 10w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/04\/image6.png 574w\" sizes=\"auto, (max-width: 280px) 100vw, 280px\" \/><\/p>\n<p><span style=\"font-weight: 400\">Agora vamos atualizar <\/span><b>Mainactivity.java<\/b><span style=\"font-weight: 400\"> no <\/span><i><span style=\"font-weight: 400\">Java \u2192 com.example.rateit<\/span><\/i><span style=\"font-weight: 400\"> com essas altera\u00e7\u00f5es:<\/span><\/p>\n<ul>\n<li style=\"list-style-type: none\">\n<ul>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Adicione um c\u00f3digo que verifique se o <\/span><b>sincroniza\u00e7\u00e3o <\/b><span style=\"font-weight: 400\">precisa ser alternado.<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Adicione tamb\u00e9m um c\u00f3digo para obter a entrada do <\/span><b>usu\u00e1rio <\/b><span style=\"font-weight: 400\">campo de entrada<\/span><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<pre class=\"decode-attributes:false lang:java decode:true\">Switch toggleBtn = (Switch) findViewById(R.id.switch1);\r\nEditText userid = (EditText) findViewById(R.id.username);\r\nString username = userid.getText().toString();<\/pre>\n<p>&nbsp;<\/p>\n<p><b>\u00a0<\/b><span style=\"font-weight: 400\">Adicione um ouvinte para o <\/span><b>sincroniza\u00e7\u00e3o <\/b><span style=\"font-weight: 400\">bot\u00e3o de altern\u00e2ncia que faz o seguinte:<\/span><\/p>\n<ul>\n<li style=\"list-style-type: none\">\n<ul>\n<li style=\"list-style-type: none\">\n<ul>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Quando o bot\u00e3o de altern\u00e2ncia \u00e9 alterado de <\/span><i><span style=\"font-weight: 400\">ON <\/span><\/i><span style=\"font-weight: 400\">para <\/span><i><span style=\"font-weight: 400\">DESLIGADO<\/span><\/i><span style=\"font-weight: 400\">,<\/span> <span style=\"font-weight: 400\">ou vice-versa, ele ouvir\u00e1 e agir\u00e1 de acordo com essas altera\u00e7\u00f5es.<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Quando o bot\u00e3o \u00e9 girado <\/span><i><span style=\"font-weight: 400\">DESLIGADO<\/span><\/i><span style=\"font-weight: 400\">a replica\u00e7\u00e3o ser\u00e1 interrompida.<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Quando o bot\u00e3o est\u00e1 definido para a posi\u00e7\u00e3o <\/span><i><span style=\"font-weight: 400\">ON <\/span><\/i><span style=\"font-weight: 400\">a replica\u00e7\u00e3o ser\u00e1 iniciada.<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Quando a replica\u00e7\u00e3o \u00e9 ativada, instanciamos a configura\u00e7\u00e3o do replicador com o banco de dados local e fornecemos detalhes do banco de dados centralizado para indicar a origem e o destino das replica\u00e7\u00f5es push\/pull.<\/span><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<pre class=\"decode-attributes:false lang:java decode:true\">toggleBtn.setOnCheckedChangeListener(newCompoundButton.OnCheckedChangeListener(){\r\n@Override\r\n\u00a0 \u00a0 \u00a0 \u00a0 public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 Replicator replicator = null;\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 if(isChecked) {\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 DatabaseConfiguration config = new DatabaseConfiguration();\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 File dbFile = new File(context.getFilesDir() , \"rateitdb\");\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 config.setDirectory(context.getFilesDir().getAbsolutePath());\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 Database database = null;\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 try { database = new Database(\"rateitdb\", config); } catch (CouchbaseLiteException e) { e.printStackTrace(); }\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 URI url = null;\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 try {\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 url = new URI(String.format(\"%s\/%s\", \"ws:\/\/10.0.2.2:4984\", \"rateit\"));\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 } catch (URISyntaxException e) {\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 e.printStackTrace();\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 }\r\n\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 Query query = null;\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 CouchbaseLite.init(context);\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 ReplicatorConfiguration replconfig = new ReplicatorConfiguration(database, new URLEndpoint(url));\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 replconfig.setType(ReplicatorType.PUSH_AND_PULL);\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 replconfig.setContinuous(true);\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 replconfig.setAuthenticator(new BasicAuthenticator(\"sgwuser1\", \"password\".toCharArray()));\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 replicator = new Replicator(replconfig);\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 setRepEventMonitor(replicator);\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 replicator.start();\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 Log.i(LogDomain.REPLICATOR.name(),\"Enabled replication\");\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 } else {\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 replicator.stop();\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 Log.i(LogDomain.REPLICATOR.name(),\"Disabled replication\");\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 }\r\n\u00a0 \u00a0 \u00a0 \u00a0 }\r\n\u00a0 \u00a0 });\r\n\u00a0 \u00a0 CouchbaseLite.init(context);\r\n}<\/pre>\n<p><span style=\"font-weight: 400\">Configure o monitor de eventos para eventos de replica\u00e7\u00e3o:<\/span><\/p>\n<pre class=\"decode-attributes:false lang:java decode:true\">public void setRepEventMonitor(Replicator replicator)\r\n{\r\n\u00a0 \u00a0 ListenerToken token = replicator.addDocumentReplicationListener(replication -&gt; {\r\n\u00a0 \u00a0 \u00a0 \u00a0 for (ReplicatedDocument document : replication.getDocuments()) {\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 Log.i(TAG, \"Doc ID: \" + document.getID());\r\n\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 CouchbaseLiteException err = document.getError();\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 if (err != null) {\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \/\/There was an error\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 Log.e(TAG, \"Error replicating document: \", err);\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 return;\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 }\r\n\u00a0 \u00a0 \u00a0 \u00a0 }\r\n\u00a0 \u00a0 });\r\n}<\/pre>\n<p><span style=\"font-weight: 400\">Em <\/span><b>Mainactivity.java <\/b><span style=\"font-weight: 400\">tamb\u00e9m removemos muitos valores codificados dos registros de solicita\u00e7\u00f5es, para que possamos mostrar os registros como eles seriam para diferentes usu\u00e1rios.<\/span><\/p>\n<p><span style=\"font-weight: 400\">No <\/span><i><span style=\"font-weight: 400\">SENDDATA <\/span><\/i><span style=\"font-weight: 400\">observe como os valores codificados s\u00e3o substitu\u00eddos por campos de entrada relevantes:<\/span><\/p>\n<pre class=\"decode-attributes:false lang:java decode:true\">MutableDocument mutableDoc = new MutableDocument();\r\nmutableDoc.setString(\"type\", \"send\");\r\nmutableDoc.setString(\"sendto\", String.valueOf(sendto));\r\nmutableDoc.setString(\"from\", username);\r\nmutableDoc.setString(\"to\", sendto);\r\nmutableDoc.setString(\"URL\", String.valueOf(URLlink));\r\nmutableDoc.setString(\"rating\", String.valueOf(rating));\r\nmutableDoc.setDate(\"createdAt\", new Date());<\/pre>\n<p><span style=\"font-weight: 400\">No <\/span><i><span style=\"font-weight: 400\">DADOS RECEBIDOS <\/span><\/i><span style=\"font-weight: 400\">removemos a grava\u00e7\u00e3o extra que anteriormente emulava a obten\u00e7\u00e3o de uma solicita\u00e7\u00e3o de classifica\u00e7\u00e3o. Isso est\u00e1 obsoleto agora que adicionamos a fun\u00e7\u00e3o <\/span><i><span style=\"font-weight: 400\">USU\u00c1RIO <\/span><\/i><span style=\"font-weight: 400\">campo de entrada que nos permite obter a classifica\u00e7\u00e3o\/solicita\u00e7\u00f5es de volta para o usu\u00e1rio espec\u00edfico.<\/span><\/p>\n<pre class=\"decode-attributes:false lang:java decode:true\">SearchView search = (SearchView) findViewById(R.id.searchView);\r\nExpression searchExp = FullTextExpression.index(\"descFTSIndex\").match(String.valueOf(search.getQuery())) ;\r\nQuery query = null;\r\nif (search.getQuery().toString().trim().isEmpty()) {\r\n\u00a0 \u00a0 query = (Query) QueryBuilder.select(SelectResult.all()).from(DataSource.database(database))\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 .where(Expression.property(\"to\").equalTo(Expression.string(username))\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 .and(Expression.property(\"type\").equalTo(Expression.string(\"send\"))));\r\n\r\n} else {\r\n\u00a0 \u00a0 query = (Query) QueryBuilder.select(SelectResult.all()).from(DataSource.database(database))\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 .where(Expression.property(\"to\").equalTo(Expression.string(username))\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 .and(Expression.property(\"type\").equalTo(Expression.string(\"send\")))\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 .and(searchExp));\r\n}\r\n\r\nint numrows = query.execute().allResults().size();\r\nToast.makeText(getApplicationContext(), \"num rows:::\"+ numrows , Toast.LENGTH_LONG).show();\r\n\r\ntry {\r\n\u00a0 \u00a0 query.execute().allResults().forEach(result -&gt; {\r\n\u00a0 \u00a0 \u00a0 \u00a0 Dictionary thisDocsProps = result.getDictionary(0);\r\n\u00a0 \u00a0 \u00a0 \u00a0 String from = thisDocsProps.getString(\"from\").trim();\r\n\u00a0 \u00a0 \u00a0 \u00a0 String to = thisDocsProps.getString(\"to\").trim();\r\n\u00a0 \u00a0 \u00a0 \u00a0 String sendto = thisDocsProps.getString(\"sendto\").trim();\r\n\u00a0 \u00a0 \u00a0 \u00a0 String URL = thisDocsProps.getString(\"URL\").trim();\r\n\u00a0 \u00a0 \u00a0 \u00a0 String rating = thisDocsProps.getString(\"rating\").trim();\r\n\u00a0 \u00a0 \u00a0 \u00a0 float ratingstars = thisDocsProps.getFloat(\"ratingstars\");\r\n\u00a0 \u00a0 \u00a0 \u00a0 int stars = (int) ratingstars;\r\n\u00a0 \u00a0 \u00a0 \u00a0 rating = String.valueOf(thisDocsProps.getFloat(\"ratingstars\"));\r\n\r\n\u00a0 \u00a0 \u00a0 \u00a0 userArray.add(new User(username,from, sendto, URL, rating,ratingstars));\r\n\u00a0 \u00a0 });\r\n} catch (CouchbaseLiteException e) {\r\n\u00a0 \u00a0 e.printStackTrace();\r\n}<\/pre>\n<p><span style=\"font-weight: 400\">No <\/span><i><span style=\"font-weight: 400\">INCOMINGRATINGS <\/span><\/i><span style=\"font-weight: 400\">reduza o c\u00f3digo para obter solicita\u00e7\u00f5es com base em <\/span><i><span style=\"font-weight: 400\">nome de usu\u00e1rio<\/span><\/i><span style=\"font-weight: 400\">:<\/span><\/p>\n<pre class=\"decode-attributes:false lang:java decode:true\">Query query = (Query) QueryBuilder.select(SelectResult.all()).from(DataSource.database(database))\r\n\u00a0 \u00a0 \u00a0 \u00a0 .where(Expression.property(\"from\").equalTo(Expression.string(username))\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 .and(Expression.property(\"type\").equalTo(Expression.string(\"rated\"))));\r\nint numrows = query.execute().allResults().size();\r\nToast.makeText(getApplicationContext(), \"num rows:::\"+ numrows , Toast.LENGTH_LONG).show();\r\n\r\ntry {\r\n\u00a0 \u00a0 query.execute().allResults().forEach(result -&gt; {\r\n\u00a0 \u00a0 \u00a0 \u00a0 Dictionary thisDocsProps = result.getDictionary(0);\r\n\u00a0 \u00a0 \u00a0 \u00a0 String sendto = thisDocsProps.getString(\"sendto\").trim();\r\n\u00a0 \u00a0 \u00a0 \u00a0 String URL = thisDocsProps.getString(\"URL\").trim();\r\n\u00a0 \u00a0 \u00a0 \u00a0 String rating = thisDocsProps.getString(\"rating\").trim();\r\n\u00a0 \u00a0 \u00a0 \u00a0 float ratingstars = thisDocsProps.getFloat(\"ratingstars\");\r\n\u00a0 \u00a0 \u00a0 \u00a0 int stars = (int) ratingstars;\r\n\u00a0 \u00a0 \u00a0 \u00a0 rating = String.valueOf(thisDocsProps.getFloat(\"ratingstars\"));\r\n\u00a0 \u00a0 \u00a0 \u00a0 RatedArray.add(new Rated(sendto, URL, rating));\r\n\u00a0 \u00a0 });\r\n} catch (CouchbaseLiteException e) {\r\n\u00a0 \u00a0 e.printStackTrace();\r\n}<\/pre>\n<p>&nbsp;<\/p>\n<p><span style=\"font-weight: 400\">Algumas atualiza\u00e7\u00f5es foram feitas no <\/span><b>UserCustomAdapter.java<\/b><span style=\"font-weight: 400\"> e RatedCustomerAdapter.java tamb\u00e9m. Para essa itera\u00e7\u00e3o, removeremos muitos arquivos <\/span><i><span style=\"font-weight: 400\">DE<\/span><\/i><span style=\"font-weight: 400\"> e <\/span><i><span style=\"font-weight: 400\">PARA<\/span><\/i><span style=\"font-weight: 400\"> porque queremos mostrar o aplicativo para dois usu\u00e1rios diferentes. Isso ajuda a mostrar como funciona a sincroniza\u00e7\u00e3o bidirecional entre o aplicativo e o servidor.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Mudan\u00e7as semelhantes foram feitas para remover nomes codificados e levamos adiante o <\/span><i><span style=\"font-weight: 400\">nome de usu\u00e1rio <\/span><\/i><span style=\"font-weight: 400\">e <\/span><i><span style=\"font-weight: 400\">solicita\u00e7\u00e3o <\/span><\/i><span style=\"font-weight: 400\">detalhes na p\u00e1gina principal do aplicativo.<\/span><\/p>\n<p>&nbsp;<\/p>\n<h2><span style=\"font-weight: 400\">Compila\u00e7\u00e3o do c\u00f3digo do aplicativo m\u00f3vel\u00a0<\/span><\/h2>\n<p><span style=\"font-weight: 400\">Quando todo o c\u00f3digo tiver sido atualizado, clique em <\/span><i><span style=\"font-weight: 400\">Build \u2192 ReBuild Project<\/span><\/i><span style=\"font-weight: 400\">, ent\u00e3o <\/span><i><span style=\"font-weight: 400\">Criar \u2192 Executar <\/span><\/i><span style=\"font-weight: 400\">quando a reconstru\u00e7\u00e3o estiver conclu\u00edda.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Voc\u00ea ser\u00e1 solicitado a escolher o emulador na primeira vez que executar o aplicativo. Criei o dispositivo NEXUS 5X API 25 e o escolhi quando solicitado.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400\">Quando a execu\u00e7\u00e3o for conclu\u00edda, a p\u00e1gina principal ter\u00e1 a seguinte apar\u00eancia:<\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-13108\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2022\/04\/image6-501x1024.png\" alt=\"Couchbase Mobile app with new UI components\" width=\"501\" height=\"1024\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/04\/image6-501x1024.png 501w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/04\/image6-147x300.png 147w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/04\/image6-300x613.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/04\/image6-10x20.png 10w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/04\/image6.png 574w\" sizes=\"auto, (max-width: 501px) 100vw, 501px\" \/><\/p>\n<p><span style=\"font-weight: 400\">Agora voc\u00ea implantou com \u00eaxito o c\u00f3digo no emulador de sua escolha.<\/span><\/p>\n<h3><b>Um teste r\u00e1pido\u00a0<\/b><\/h3>\n<p><span style=\"font-weight: 400\">Vamos criar uma solicita\u00e7\u00e3o de classifica\u00e7\u00e3o seguindo estas etapas:<\/span><\/p>\n<ol>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Gire o <\/span><b>SINCRONIZA\u00c7\u00c3O<\/b><span style=\"font-weight: 400\"> ligar.<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Insira os detalhes da solicita\u00e7\u00e3o de classifica\u00e7\u00e3o (usu\u00e1rio-alvo, mensagem, assunto).<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Clique em <\/span><i><span style=\"font-weight: 400\">CLIQUE PARA ENVIAR SOLICITA\u00c7\u00c3O DE CLASSIFICA\u00c7\u00c3O<\/span><\/i><span style=\"font-weight: 400\">.<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Acesse a inst\u00e2ncia do Couchbase Server. No meu caso, \u00e9 o console da Web da minha inst\u00e2ncia local. Navegue at\u00e9 <\/span><i><span style=\"font-weight: 400\">Baldes <\/span><\/i><span style=\"font-weight: 400\">e <\/span><i><span style=\"font-weight: 400\">Documentos <\/span><\/i><span style=\"font-weight: 400\">e voc\u00ea ver\u00e1 a solicita\u00e7\u00e3o de classifica\u00e7\u00e3o criada no servidor.<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Agora insira o nome de usu\u00e1rio <\/span><i><span style=\"font-weight: 400\">AlPacino <\/span><\/i><span style=\"font-weight: 400\">e clique em <\/span><i><span style=\"font-weight: 400\">SOLICITA\u00c7\u00d5ES DE CLASSIFICA\u00c7\u00c3O RECEBIDAS<\/span><\/i><span style=\"font-weight: 400\">-Voc\u00ea dever\u00e1 ver a solicita\u00e7\u00e3o de classifica\u00e7\u00e3o na se\u00e7\u00e3o <\/span><i><span style=\"font-weight: 400\">RECEBIDO <\/span><\/i><span style=\"font-weight: 400\">se\u00e7\u00e3o pronta para ser avaliada. Avalie esta solicita\u00e7\u00e3o.<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Ao verificar o console, voc\u00ea ver\u00e1 dois documentos JSON, conforme mostrado abaixo.<\/span><\/li>\n<\/ol>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone  wp-image-13110\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2022\/04\/image8-516x1024.png\" alt=\"Updated mobile app UI\" width=\"250\" height=\"496\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/04\/image8-516x1024.png 516w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/04\/image8-151x300.png 151w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/04\/image8-300x595.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/04\/image8-10x20.png 10w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/04\/image8.png 604w\" sizes=\"auto, (max-width: 250px) 100vw, 250px\" \/><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone  wp-image-13109\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2022\/04\/image7-1024x744.png\" alt=\"\" width=\"932\" height=\"677\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/04\/image7-1024x744.png 1024w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/04\/image7-300x218.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/04\/image7-768x558.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/04\/image7-20x15.png 20w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/04\/image7-1320x959.png 1320w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/04\/image7.png 1500w\" sizes=\"auto, (max-width: 932px) 100vw, 932px\" \/><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone  wp-image-13111\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2022\/04\/image9-509x1024.png\" alt=\"\" width=\"247\" height=\"498\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/04\/image9-509x1024.png 509w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/04\/image9-149x300.png 149w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/04\/image9-300x604.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/04\/image9-10x20.png 10w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/04\/image9.png 595w\" sizes=\"auto, (max-width: 247px) 100vw, 247px\" \/><\/p>\n<p><span style=\"font-weight: 400\">Observe os dois registros no console.<\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-13112\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2022\/04\/image10-1024x336.png\" alt=\"Coucbase Server console showing JSON documents\" width=\"900\" height=\"295\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/04\/image10-1024x336.png 1024w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/04\/image10-300x99.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/04\/image10-768x252.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/04\/image10-20x7.png 20w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/04\/image10-1320x434.png 1320w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/04\/image10.png 1431w\" sizes=\"auto, (max-width: 900px) 100vw, 900px\" \/><br \/>\n<span style=\"font-weight: 400\">Agora, vamos fazer uma altera\u00e7\u00e3o na solicita\u00e7\u00e3o classificada por <\/span><i><span style=\"font-weight: 400\">AlPacino <\/span><\/i><span style=\"font-weight: 400\">e altere o n\u00famero de estrelas para <\/span><i><span style=\"font-weight: 400\">2 <\/span><\/i><span style=\"font-weight: 400\">e ver se as altera\u00e7\u00f5es chegam ao dispositivo.<\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-13114\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2022\/04\/image12-1024x348.png\" alt=\"Couchbase web console for viewing JSON document changes\" width=\"900\" height=\"306\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/04\/image12-1024x348.png 1024w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/04\/image12-300x102.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/04\/image12-768x261.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/04\/image12-20x7.png 20w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/04\/image12-1320x449.png 1320w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/04\/image12.png 1431w\" sizes=\"auto, (max-width: 900px) 100vw, 900px\" \/><\/p>\n<p><span style=\"font-weight: 400\">Execute o aplicativo e abra <\/span><i><span style=\"font-weight: 400\">SOLICITA\u00c7\u00d5ES CLASSIFICADAS RECEBIDAS <\/span><\/i><span style=\"font-weight: 400\">(parte inferior da tela)<\/span><span style=\"font-weight: 400\"> para <\/span><i><span style=\"font-weight: 400\">TomCruise <\/span><\/i><span style=\"font-weight: 400\">e voc\u00ea ver\u00e1 a altera\u00e7\u00e3o para <\/span><i><span style=\"font-weight: 400\">2 <\/span><\/i><span style=\"font-weight: 400\">estrelas.<\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone  wp-image-13115\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2022\/04\/image13-502x1024.png\" alt=\"Updated mobile app screenshot on Couchbase Mobile\" width=\"332\" height=\"677\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/04\/image13-502x1024.png 502w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/04\/image13-147x300.png 147w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/04\/image13-300x611.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/04\/image13-10x20.png 10w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/04\/image13.png 628w\" sizes=\"auto, (max-width: 332px) 100vw, 332px\" \/><\/p>\n<h2><span style=\"font-weight: 400\">Pr\u00f3ximas etapas<\/span><\/h2>\n<p><span style=\"font-weight: 400\">Esta \u00e9 a parte 3 da s\u00e9rie do blog Criando um aplicativo m\u00f3vel com o Couchbase. Esta postagem mostrou como ativar a sincroniza\u00e7\u00e3o entre dispositivos e servidores.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Na pr\u00f3xima parte da s\u00e9rie, mostraremos como ativar a sincroniza\u00e7\u00e3o de dispositivos ponto a ponto.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Continue aprendendo seguindo esses recursos:<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400\"><a href=\"https:\/\/www.couchbase.com\/blog\/pt\/building-a-mobile-application-with-couchbase-part-1\/\"><span style=\"font-weight: 400\">Parte 1 da s\u00e9rie.<\/span><\/a> <a href=\"https:\/\/www.couchbase.com\/blog\/pt\/building-a-mobile-application-with-couchbase-part-2\/\"><span style=\"font-weight: 400\">Parte 2 da s\u00e9rie<\/span><\/a><span style=\"font-weight: 400\">.<\/span><\/li>\n<li style=\"font-weight: 400\"><a href=\"https:\/\/github.com\/sandykris123\/couchbasemobile\"><span style=\"font-weight: 400\">Reposit\u00f3rio do GitHub - incluindo o c\u00f3digo do projeto do aplicativo RateIt<\/span><\/a><\/li>\n<li style=\"font-weight: 400\"><a href=\"https:\/\/www.couchbase.com\/blog\/pt\/products\/mobile\/\"><span style=\"font-weight: 400\">Couchbase Mobile - informa\u00e7\u00f5es sobre o produto<\/span><\/a><\/li>\n<li style=\"font-weight: 400\"><a href=\"https:\/\/docs.couchbase.com\/couchbase-lite\/3.0\/android\/quickstart.html\"><span style=\"font-weight: 400\">Documenta\u00e7\u00e3o do Couchbase Lite<\/span><\/a><\/li>\n<li style=\"font-weight: 400\"><a href=\"https:\/\/www.couchbase.com\/blog\/pt\/downloads\/\"><span style=\"font-weight: 400\">Download do Couchbase Server e do Sync Gateway<\/span><\/a><\/li>\n<\/ul>","protected":false},"excerpt":{"rendered":"<p>Part 3: Adding sync functionality to a centralized server This multipart blog will help the reader build an end-to-end mobile application using the industry-leading features of Couchbase Lite.\u00a0 A state of the art, end-to-end, scalable and production grade application should [&hellip;]<\/p>","protected":false},"author":66,"featured_media":13117,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[7667,1810,1816,7666,1818,2366],"tags":[9574],"ppma_author":[9038],"class_list":["post-13102","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-couchbase-lite","category-couchbase-mobile","category-couchbase-server","category-edge-computing","category-java","category-sync-gateway","tag-mobile-development"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.1 (Yoast SEO v26.1.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Building a Mobile Application with Couchbase \u2013 Part 3<\/title>\n<meta name=\"description\" content=\"Build a Java-based mobile app using Couchbase Mobile application design and embedded database. Part three showing device to server sync.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.couchbase.com\/blog\/pt\/building-a-mobile-application-with-couchbase-part-3\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Building a Mobile Application with Couchbase \u2013 Part 3\" \/>\n<meta property=\"og:description\" content=\"Build a Java-based mobile app using Couchbase Mobile application design and embedded database. Part three showing device to server sync.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/pt\/building-a-mobile-application-with-couchbase-part-3\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2022-04-21T19:03:56+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-05-22T15:04:40+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2022\/04\/couchbase_mobile_app_development-scaled.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"2560\" \/>\n\t<meta property=\"og:image:height\" content=\"1440\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Sandhya Krishnamurthy, Senior Solutions Engineer, Couchbase\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Sandhya Krishnamurthy, Senior Solutions Engineer, Couchbase\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"11 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/building-a-mobile-application-with-couchbase-part-3\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/building-a-mobile-application-with-couchbase-part-3\/\"},\"author\":{\"name\":\"Sandhya Krishnamurthy, Senior Solutions Engineer, Couchbase\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/2d421ebd7ebf63e5491a9371909ab723\"},\"headline\":\"Building a Mobile Application with Couchbase \u2013 Part 3\",\"datePublished\":\"2022-04-21T19:03:56+00:00\",\"dateModified\":\"2023-05-22T15:04:40+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/building-a-mobile-application-with-couchbase-part-3\/\"},\"wordCount\":1414,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/building-a-mobile-application-with-couchbase-part-3\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/04\/couchbase_mobile_app_development-scaled.jpg\",\"keywords\":[\"mobile development\"],\"articleSection\":[\"Couchbase Lite\",\"Couchbase Mobile\",\"Couchbase Server\",\"Edge computing\",\"Java\",\"Sync Gateway\"],\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/building-a-mobile-application-with-couchbase-part-3\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/building-a-mobile-application-with-couchbase-part-3\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/building-a-mobile-application-with-couchbase-part-3\/\",\"name\":\"Building a Mobile Application with Couchbase \u2013 Part 3\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/building-a-mobile-application-with-couchbase-part-3\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/building-a-mobile-application-with-couchbase-part-3\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/04\/couchbase_mobile_app_development-scaled.jpg\",\"datePublished\":\"2022-04-21T19:03:56+00:00\",\"dateModified\":\"2023-05-22T15:04:40+00:00\",\"description\":\"Build a Java-based mobile app using Couchbase Mobile application design and embedded database. Part three showing device to server sync.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/building-a-mobile-application-with-couchbase-part-3\/#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/building-a-mobile-application-with-couchbase-part-3\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/building-a-mobile-application-with-couchbase-part-3\/#primaryimage\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/04\/couchbase_mobile_app_development-scaled.jpg\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/04\/couchbase_mobile_app_development-scaled.jpg\",\"width\":2560,\"height\":1440,\"caption\":\"Couchbase Mobile application development\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/building-a-mobile-application-with-couchbase-part-3\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Building a Mobile Application with Couchbase \u2013 Part 3\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"name\":\"The Couchbase Blog\",\"description\":\"Couchbase, the NoSQL Database\",\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pt-BR\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\",\"name\":\"The Couchbase Blog\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"width\":218,\"height\":34,\"caption\":\"The Couchbase Blog\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/2d421ebd7ebf63e5491a9371909ab723\",\"name\":\"Sandhya Krishnamurthy, Senior Solutions Engineer, Couchbase\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/f4d7b0d0e3660d30cbd035db5621088e\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/b2f1ee16accb4f849269e443ba5b34bc512dd5d425b4399779ebbaf3d1154557?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/b2f1ee16accb4f849269e443ba5b34bc512dd5d425b4399779ebbaf3d1154557?s=96&d=mm&r=g\",\"caption\":\"Sandhya Krishnamurthy, Senior Solutions Engineer, Couchbase\"},\"description\":\"Sandhya Krishnamurthy is a technologist with a strong database development background and pre-sales experience. She is a part-time artist, part-time singer and full-time mom.\",\"url\":\"https:\/\/www.couchbase.com\/blog\/pt\/author\/sandhya-krishnamurthy\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Cria\u00e7\u00e3o de um aplicativo m\u00f3vel com o Couchbase - Parte 3","description":"Crie um aplicativo m\u00f3vel baseado em Java usando o design de aplicativo Couchbase Mobile e o banco de dados incorporado. Parte tr\u00eas mostrando a sincroniza\u00e7\u00e3o entre dispositivo e servidor.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.couchbase.com\/blog\/pt\/building-a-mobile-application-with-couchbase-part-3\/","og_locale":"pt_BR","og_type":"article","og_title":"Building a Mobile Application with Couchbase \u2013 Part 3","og_description":"Build a Java-based mobile app using Couchbase Mobile application design and embedded database. Part three showing device to server sync.","og_url":"https:\/\/www.couchbase.com\/blog\/pt\/building-a-mobile-application-with-couchbase-part-3\/","og_site_name":"The Couchbase Blog","article_published_time":"2022-04-21T19:03:56+00:00","article_modified_time":"2023-05-22T15:04:40+00:00","og_image":[{"width":2560,"height":1440,"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2022\/04\/couchbase_mobile_app_development-scaled.jpg","type":"image\/jpeg"}],"author":"Sandhya Krishnamurthy, Senior Solutions Engineer, Couchbase","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Sandhya Krishnamurthy, Senior Solutions Engineer, Couchbase","Est. reading time":"11 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/building-a-mobile-application-with-couchbase-part-3\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/building-a-mobile-application-with-couchbase-part-3\/"},"author":{"name":"Sandhya Krishnamurthy, Senior Solutions Engineer, Couchbase","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/2d421ebd7ebf63e5491a9371909ab723"},"headline":"Building a Mobile Application with Couchbase \u2013 Part 3","datePublished":"2022-04-21T19:03:56+00:00","dateModified":"2023-05-22T15:04:40+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/building-a-mobile-application-with-couchbase-part-3\/"},"wordCount":1414,"commentCount":0,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/building-a-mobile-application-with-couchbase-part-3\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/04\/couchbase_mobile_app_development-scaled.jpg","keywords":["mobile development"],"articleSection":["Couchbase Lite","Couchbase Mobile","Couchbase Server","Edge computing","Java","Sync Gateway"],"inLanguage":"pt-BR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/building-a-mobile-application-with-couchbase-part-3\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/building-a-mobile-application-with-couchbase-part-3\/","url":"https:\/\/www.couchbase.com\/blog\/building-a-mobile-application-with-couchbase-part-3\/","name":"Cria\u00e7\u00e3o de um aplicativo m\u00f3vel com o Couchbase - Parte 3","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/building-a-mobile-application-with-couchbase-part-3\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/building-a-mobile-application-with-couchbase-part-3\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/04\/couchbase_mobile_app_development-scaled.jpg","datePublished":"2022-04-21T19:03:56+00:00","dateModified":"2023-05-22T15:04:40+00:00","description":"Crie um aplicativo m\u00f3vel baseado em Java usando o design de aplicativo Couchbase Mobile e o banco de dados incorporado. Parte tr\u00eas mostrando a sincroniza\u00e7\u00e3o entre dispositivo e servidor.","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/building-a-mobile-application-with-couchbase-part-3\/#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/building-a-mobile-application-with-couchbase-part-3\/"]}]},{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.couchbase.com\/blog\/building-a-mobile-application-with-couchbase-part-3\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/04\/couchbase_mobile_app_development-scaled.jpg","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/04\/couchbase_mobile_app_development-scaled.jpg","width":2560,"height":1440,"caption":"Couchbase Mobile application development"},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/building-a-mobile-application-with-couchbase-part-3\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Building a Mobile Application with Couchbase \u2013 Part 3"}]},{"@type":"WebSite","@id":"https:\/\/www.couchbase.com\/blog\/#website","url":"https:\/\/www.couchbase.com\/blog\/","name":"Blog do Couchbase","description":"Couchbase, o banco de dados NoSQL","publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pt-BR"},{"@type":"Organization","@id":"https:\/\/www.couchbase.com\/blog\/#organization","name":"Blog do Couchbase","url":"https:\/\/www.couchbase.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","width":218,"height":34,"caption":"The Couchbase Blog"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/2d421ebd7ebf63e5491a9371909ab723","name":"Sandhya Krishnamurthy, engenheira de solu\u00e7\u00f5es s\u00eanior, Couchbase","image":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/f4d7b0d0e3660d30cbd035db5621088e","url":"https:\/\/secure.gravatar.com\/avatar\/b2f1ee16accb4f849269e443ba5b34bc512dd5d425b4399779ebbaf3d1154557?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/b2f1ee16accb4f849269e443ba5b34bc512dd5d425b4399779ebbaf3d1154557?s=96&d=mm&r=g","caption":"Sandhya Krishnamurthy, Senior Solutions Engineer, Couchbase"},"description":"Sandhya Krishnamurthy \u00e9 tecn\u00f3loga com s\u00f3lida forma\u00e7\u00e3o em desenvolvimento de banco de dados e experi\u00eancia em pr\u00e9-vendas. Ela \u00e9 artista em tempo parcial, cantora em tempo parcial e m\u00e3e em tempo integral.","url":"https:\/\/www.couchbase.com\/blog\/pt\/author\/sandhya-krishnamurthy\/"}]}},"authors":[{"term_id":9038,"user_id":66,"is_guest":0,"slug":"sandhya-krishnamurthy","display_name":"Sandhya Krishnamurthy, Senior Solutions Engineer, Couchbase","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/b155c5b9bb4bc33f88ee8b7a387044ccc4e23146d3058e66ea7c3a82dd1f51c0?s=96&d=mm&r=g","author_category":"","last_name":"Krishnamurthy","first_name":"Sandhya","job_title":"","user_url":"","description":"Sandhya Krishnamurthy \u00e9 tecn\u00f3loga com s\u00f3lida forma\u00e7\u00e3o em desenvolvimento de banco de dados e experi\u00eancia em pr\u00e9-vendas. Ela \u00e9 artista em tempo parcial, cantora em tempo parcial e m\u00e3e em tempo integral."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts\/13102","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/users\/66"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/comments?post=13102"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts\/13102\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/media\/13117"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/media?parent=13102"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/categories?post=13102"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/tags?post=13102"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/ppma_author?post=13102"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}