{"id":1923,"date":"2015-04-26T09:00:41","date_gmt":"2015-04-26T16:00:41","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=1923"},"modified":"2024-09-12T01:40:19","modified_gmt":"2024-09-12T08:40:19","slug":"tutorial-implement-android-push-notifications-in-your-couchbase-mobile-app","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/pt\/tutorial-implement-android-push-notifications-in-your-couchbase-mobile-app\/","title":{"rendered":"Tutorial: Implementar notifica\u00e7\u00f5es push do Android em seu aplicativo Couchbase Mobile"},"content":{"rendered":"<p><script src=\"\/webfiles\/1484262819972\/js\/thirdparty\/vendor\/prism.js\"><\/script><\/p>\n<p>Ao desenvolver um aplicativo, \u00e9 muito \u00fatil usar a replica\u00e7\u00e3o push e pull no modo cont\u00ednuo. Tudo \u00e9 tratado pelos replicadores para garantir que seu aplicativo e o Sync Gateway sempre tenham os documentos mais recentes sincronizados.<\/p>\n<p>No entanto, uma replica\u00e7\u00e3o pull cont\u00ednua significa que o Couchbase Lite usar\u00e1 t\u00e9cnicas como polling longo ou soquetes da Web para verificar se h\u00e1 novos dados a serem obtidos do Sync Gateway. Isso pode afetar a dura\u00e7\u00e3o da bateria e, consequentemente, a experi\u00eancia do usu\u00e1rio.<\/p>\n<p>Nesta postagem, exploraremos uma alternativa \u00e0 replica\u00e7\u00e3o pull cont\u00ednua usando o Google Cloud Messaging, o servi\u00e7o de notifica\u00e7\u00e3o por push do Android.<\/p>\n<p>Voc\u00ea pode dar uma olhada em <a href=\"https:\/\/github.com\/couchbaselabs\/ToDoLite-Android\">exemplo de trabalho<\/a>\u00a0no ToDoLite Android. Vamos ver como voc\u00ea pode incluir a sincroniza\u00e7\u00e3o do GCM em seu aplicativo!<\/p>\n<h2>Habilitando o GCM em seu aplicativo<\/h2>\n<p>Primeiro, vamos configurar o ToDoLite Android para se registrar no Google Cloud Messaging. Criaremos um novo projeto de API do Google no diret\u00f3rio <a href=\"https:\/\/developer.google.com\/console\">console do desenvolvedor<\/a>. Siga este <a href=\"https:\/\/developer.android.com\/google\/gcm\/gs.html\">guia<\/a>\u00a0para configur\u00e1-lo. Voc\u00ea deve ter um n\u00famero de projeto e uma chave de API. Agora podemos atualizar a se\u00e7\u00e3o <strong>AndroidManifest.xml<\/strong> com as permiss\u00f5es, o filtro de inten\u00e7\u00e3o e o servi\u00e7o necess\u00e1rios. Ele deve ter a seguinte apar\u00eancia:<\/p>\n<pre><code class=\"language-markup\">\r\n \/\/ ...\r\n\r\n\u00a0\u00a0\u00a0\u00a0\r\n\u00a0\u00a0\u00a0\u00a0\r\n\u00a0\u00a0\u00a0\u00a0\r\n\u00a0\u00a0\u00a0\u00a0\r\n\r\n\u00a0\u00a0\u00a0\u00a0\r\n\u00a0\u00a0\u00a0\u00a0\r\n\r\n\u00a0\u00a0\u00a0\u00a0 \/\/ ...\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/* ... activities ... *\/\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\r\n\u00a0\u00a0\u00a0\u00a0\r\n\r\n\r\n<\/code><\/pre>\n<p><strong>Observa\u00e7\u00e3o:<\/strong> Confira o <a href=\"https:\/\/developer.android.com\/google\/gcm\/client.html#manifest\">exemplo<\/a>\u00a0do site do desenvolvedor do Android tamb\u00e9m.<\/p>\n<p>Se o projeto estiver configurado corretamente, poderemos recuperar o token do dispositivo com o n\u00famero do projeto que obtivemos ao criar o aplicativo no console do desenvolvedor do Google. Adicione um m\u00e9todo na atividade principal para recuperar o token do dispositivo do GCM e salv\u00e1-lo no documento do perfil do usu\u00e1rio, por exemplo:<\/p>\n<pre class=\"line-numbers\"><code class=\"language-java\">void getDeviceToken() {\r\n        new AsyncTask() {\r\n            @Override\r\n            protected String doInBackground(Void... params) {\r\n\r\n                GoogleCloudMessaging gcm = GoogleCloudMessaging.getInstance(getApplicationContext());\r\n\r\n                String deviceToken = gcm.register(\"632113338862\");\r\n                Log.i(\"GCM\", \"Device token : \" + deviceToken);\r\n\r\n                \/\/ update user profile document\r\n\r\n                return null;\r\n            }\r\n        }.execute(null, null, null);\r\n}<\/code><\/pre>\n<p><strong>Observa\u00e7\u00e3o:<\/strong> Os tokens de dispositivo no Android sempre come\u00e7am com APA91, portanto, fique atento a eles no LogCat ;)<\/p>\n<p>Em seguida, temos de adicionar algum c\u00f3digo para tratar uma notifica\u00e7\u00e3o recebida. Fizemos uma subclasse da classe WakefulBroadcastReceiver, na qual o m\u00e9todo onReceive \u00e9 chamado toda vez que recebemos uma notifica\u00e7\u00e3o.<\/p>\n<pre class=\"line-numbers\"><code class=\"language-java\">public class GcmBroadcastReceiver extends WakefulBroadcastReceiver {\r\n\r\n    @Override\r\n    public void onReceive(Context context, Intent intent) {\r\n        \/\/ Explicitly specify that GcmMessageHandler will handle the intent.\r\n        ComponentName component = new ComponentName(context.getPackageName(),\r\n                GcmMessageHandler.class.getName());\r\n\r\n        \/\/ Start the service, keeping the device awake while it is launching.\r\n        startWakefulService(context, (intent.setComponent(component)));\r\n        setResultCode(Activity.RESULT_OK);\r\n    }\r\n\r\n}<\/code><\/pre>\n<p>A partir da\u00ed, o servi\u00e7o em vig\u00edlia inicia a classe GcmMessageHandler e executa uma replica\u00e7\u00e3o pull de uma s\u00f3 vez. O servi\u00e7o de vig\u00edlia \u00e9 executado mesmo que seu aplicativo esteja em execu\u00e7\u00e3o em segundo plano. Assim, seu aplicativo mostraria os novos dados de acordo com a abertura do aplicativo.<\/p>\n<pre class=\"line-numbers\"><code class=\"language-java\">\r\npublic class GcmMessageHandler extends IntentService {\r\n    \r\n    \/* ... *\/\r\n    \r\n    @Override\r\n    protected void onHandleIntent(Intent intent) {\r\n        mIntent = intent;\r\n        showToast();\r\n        Application application = (Application) getApplication();\r\n\r\n        try {\r\n            URL url = new URL(BuildConfig.SYNC_URL_HTTP);\r\n            Replication pull = application.getDatabase().createPullReplication(url);\r\n            pull.addChangeListener(getReplicationListener());\r\n            pull.start();\r\n        } catch (MalformedURLException e) {\r\n            e.printStackTrace();\r\n        }\r\n\r\n    }\r\n\r\n    private Replication.ChangeListener getReplicationListener() {\r\n        return new Replication.ChangeListener() {\r\n            @Override\r\n            public void changed(Replication.ChangeEvent event) {\r\n                Log.i(\"GCM\", \"replication status is : \" + event.getSource().getStatus());\r\n                if (event.getSource().getStatus() == Replication.ReplicationStatus.REPLICATION_STOPPED) {\r\n                    GcmBroadcastReceiver.completeWakefulIntent(mIntent);\r\n                }\r\n            }\r\n        };\r\n    }\r\n\r\n    \/* ... *\/\r\n\r\n}\r\n<\/code><\/pre>\n<p>Observe que estamos usando o ouvinte de altera\u00e7\u00e3o de replica\u00e7\u00e3o para sermos notificados quando ela for conclu\u00edda e para encerrar o servi\u00e7o wakeful.<\/p>\n<p>Isso \u00e9 tudo o que precisamos fazer no lado do Android para lidar com a notifica\u00e7\u00e3o de sincroniza\u00e7\u00e3o.<\/p>\n<h2>Salvando os tokens do dispositivo<\/h2>\n<p>Agora podemos armazenar o token do dispositivo no documento do perfil do usu\u00e1rio. Cada usu\u00e1rio pode estar conectado a mais de um dispositivo ao mesmo tempo, portanto, devemos armazenar cada um deles. O documento do usu\u00e1rio ter\u00e1 a seguinte apar\u00eancia:<\/p>\n<pre><code class=\"language-javascript\">{\r\n \"_id\": \"profile:johnny@couchbase.com\",\r\n ...\r\n \"device_tokens\": [\"APA91K...\", \"APA91O...\"]\r\n}<\/code><\/pre>\n<p>Na pr\u00f3xima se\u00e7\u00e3o, falaremos sobre a adi\u00e7\u00e3o de l\u00f3gica de aplicativo adicional ao Sync Gateway usando o Changes Feed.<\/p>\n<h2>O Gateway de sincroniza\u00e7\u00e3o altera o feed<\/h2>\n<p>O <strong>\/database\/changes<\/strong> retorna uma lista ordenada das altera\u00e7\u00f5es feitas nos documentos do banco de dados. Esse ponto de extremidade faz parte do CouchDB <a href=\"https:\/\/docs.couchdb.org\/en\/latest\/api\/database\/changes.html\">especifica\u00e7\u00e3o<\/a>\u00a0e tanto o Couchbase Lite Listener quanto o Sync Gateway o implementam.<\/p>\n<p>\u00c9 muito f\u00e1cil se conectar ao Changes Feed do Sync Gateway para adicionar l\u00f3gica extra ao back-end, como, no nosso caso, enviar notifica\u00e7\u00f5es push.<\/p>\n<p>Voc\u00ea pode usar qualquer biblioteca que implemente a API de feed de altera\u00e7\u00f5es:<\/p>\n<ul>\n<li>NodeJS: <a href=\"https:\/\/github.com\/djc\/couchdb-python\">https:\/\/github.com\/iriscouch\/follow<\/a><\/li>\n<li>Ir: <a href=\"https:\/\/github.com\/djc\/couchdb-python\">https:\/\/github.com\/fjl\/go-couchdb<\/a><\/li>\n<li>Python: <a href=\"https:\/\/github.com\/djc\/couchdb-python\">https:\/\/github.com\/djc\/couchdb-python<\/a><\/li>\n<li>Java: <a href=\"https:\/\/github.com\/djc\/couchdb-python\">https:\/\/github.com\/helun\/Ektorp<\/a><\/li>\n<\/ul>\n<p>De todos os <a href=\"https:\/\/docs.couchdb.org\/en\/latest\/api\/database\/changes.html\">par\u00e2metros dispon\u00edveis<\/a> na string de consulta, os mais importantes em nosso caso s\u00e3o:<\/p>\n<ul>\n<li>feed=continuous para garantir que recebamos as altera\u00e7\u00f5es imediatamente<\/li>\n<li>since=now para obter as altera\u00e7\u00f5es da hora atual; caso contr\u00e1rio, ele registrar\u00e1 todas as altera\u00e7\u00f5es desde que o banco de dados foi criado!<\/li>\n<\/ul>\n<p>Por fim, vamos nos concentrar na \u00faltima pe\u00e7a do quebra-cabe\u00e7a: dada uma altera\u00e7\u00e3o de documento do feed de altera\u00e7\u00f5es, precisamos obter os documentos do perfil do usu\u00e1rio \"<em>interessado\"<\/em> nessa mudan\u00e7a porque eles det\u00eam os tokens de dispositivo.<\/p>\n<h2>Altera\u00e7\u00f5es no Feed \u2192 GCM<\/h2>\n<p>No ToDoLite, h\u00e1 tr\u00eas tipos de documentos: um perfil, uma lista e uma tarefa. O documento de tarefa cont\u00e9m uma refer\u00eancia \u00e0 lista \u00e0 qual pertence e uma lista tem um propriet\u00e1rio e uma matriz de membros.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/cl.ly\/image\/1J3O1D1s131U\/Model.png\" \/><\/p>\n<p>Quando um documento de tarefa ou um documento de lista \u00e9 alterado, gostar\u00edamos de notificar o propriet\u00e1rio e os membros dessa lista. H\u00e1 dois tipos de eventos que gostar\u00edamos de tratar:<\/p>\n<p>1. Um evento de modifica\u00e7\u00e3o de documento de lista:<\/p>\n<ul>\n<li style=\"margin-left: 40px;\">obter o documento de perfil do propriet\u00e1rio<\/li>\n<li style=\"margin-left: 40px;\">obter o documento de perfil de cada membro<\/li>\n<\/ul>\n<p>2. Um evento de modifica\u00e7\u00e3o de documento de tarefa:<\/p>\n<ul>\n<li style=\"margin-left: 40px;\">obter o documento da lista ao qual pertence<\/li>\n<li style=\"margin-left: 40px;\">siga as mesmas etapas de 1)<\/li>\n<\/ul>\n<p>Com os tokens de dispositivo recuperados, a \u00faltima etapa \u00e9 enviar uma solicita\u00e7\u00e3o aos servidores do Google Cloud Messaging com nossa chave de API e carga \u00fatil de notifica\u00e7\u00e3o. Voc\u00ea tamb\u00e9m pode encontrar muitas bibliotecas no GitHub que simplificam a intera\u00e7\u00e3o com os servidores GCM:<\/p>\n<ul>\n<li>NodeJS: <a href=\"https:\/\/github.com\/ToothlessGear\/node-gcm\">https:\/\/github.com\/ToothlessGear\/node-gcm<\/a><\/li>\n<li>Ir: <a href=\"https:\/\/github.com\/alexjlockwood\/gcm\">https:\/\/github.com\/alexjlockwood\/gcm<\/a><\/li>\n<li>Python: <a href=\"https:\/\/github.com\/geeknam\/python-gcm\">https:\/\/github.com\/geeknam\/python-gcm<\/a><\/li>\n<li>Java: <a href=\"https:\/\/github.com\/inloop\/easygcm\">https:\/\/github.com\/inloop\/easygcm<\/a><\/li>\n<\/ul>\n<h2>Encerramento<\/h2>\n<p>O uso do Google Cloud Messaging para acionar a busca de dados no lado do servidor pode proporcionar uma excelente experi\u00eancia ao usu\u00e1rio sem nenhuma sobrecarga adicional de uso da bateria e da rede.<\/p>\n<p>Siga a <a href=\"https:\/\/github.com\/couchbaselabs\/ToDoLite-Android#syncing-with-google-cloud-messaging\">leia-me<\/a>\u00a0instru\u00e7\u00f5es para executar a demonstra\u00e7\u00e3o do ToDoLite.<\/p>\n<p>Gostaria muito de saber como voc\u00ea est\u00e1 usando as notifica\u00e7\u00f5es do Google Cloud Messaging em seu aplicativo. Deixe sua opini\u00e3o nos coment\u00e1rios abaixo!<\/p>\n<p>Mais leituras:<\/p>\n<ul>\n<li>Dicas sobre como configurar o GCM em seu aplicativo: <a href=\"https:\/\/blog.pushbullet.com\/2014\/02\/12\/keeping-google-cloud-messaging-for-android-working-reliably-techincal-post\/\">https:\/\/blog.pushbullet.com\/2014\/02\/12\/keeping-google-cloud-messaging-for-android-working-reliably-techincal-post\/<\/a><\/li>\n<li>Sincroniza\u00e7\u00e3o de dados no aplicativo Google I\/O: <a href=\"https:\/\/android-developers.blogspot.co.uk\/2014\/09\/conference-data-sync-gcm-google-io.html\">https:\/\/android-developers.blogspot.co.uk\/2014\/09\/conference-data-sync-gcm-google-io.html<\/a><\/li>\n<\/ul>","protected":false},"excerpt":{"rendered":"<p>When developing an application, it\u2019s very helpful to use the push and pull replication in continuous mode. Everything is handled by the replicators to make sure your app and Sync Gateway always have the latest documents synced. However, a continuous [&hellip;]<\/p>","protected":false},"author":51,"featured_media":13873,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1],"tags":[],"ppma_author":[9028],"class_list":["post-1923","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.4 (Yoast SEO v26.4) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Tutorial: Implement Android Push Notifications in your Couchbase Mobile app - The Couchbase Blog<\/title>\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\/tutorial-implement-android-push-notifications-in-your-couchbase-mobile-app\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Tutorial: Implement Android Push Notifications in your Couchbase Mobile app\" \/>\n<meta property=\"og:description\" content=\"When developing an application, it\u2019s very helpful to use the push and pull replication in continuous mode. Everything is handled by the replicators to make sure your app and Sync Gateway always have the latest documents synced. However, a continuous [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/pt\/tutorial-implement-android-push-notifications-in-your-couchbase-mobile-app\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2015-04-26T16:00:41+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-09-12T08:40:19+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/cl.ly\/image\/1J3O1D1s131U\/Model.png\" \/>\n<meta name=\"author\" content=\"James Nocentini, Technical Writer, Mobile, 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=\"James Nocentini, Technical Writer, Mobile, Couchbase\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/tutorial-implement-android-push-notifications-in-your-couchbase-mobile-app\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/tutorial-implement-android-push-notifications-in-your-couchbase-mobile-app\/\"},\"author\":{\"name\":\"James Nocentini, Technical Writer, Mobile, Couchbase\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/ec4dfbd349cb4a321fb6a92b71a9a7f6\"},\"headline\":\"Tutorial: Implement Android Push Notifications in your Couchbase Mobile app\",\"datePublished\":\"2015-04-26T16:00:41+00:00\",\"dateModified\":\"2024-09-12T08:40:19+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/tutorial-implement-android-push-notifications-in-your-couchbase-mobile-app\/\"},\"wordCount\":909,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/tutorial-implement-android-push-notifications-in-your-couchbase-mobile-app\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"articleSection\":[\"Uncategorized\"],\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/tutorial-implement-android-push-notifications-in-your-couchbase-mobile-app\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/tutorial-implement-android-push-notifications-in-your-couchbase-mobile-app\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/tutorial-implement-android-push-notifications-in-your-couchbase-mobile-app\/\",\"name\":\"Tutorial: Implement Android Push Notifications in your Couchbase Mobile app - The Couchbase Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/tutorial-implement-android-push-notifications-in-your-couchbase-mobile-app\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/tutorial-implement-android-push-notifications-in-your-couchbase-mobile-app\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"datePublished\":\"2015-04-26T16:00:41+00:00\",\"dateModified\":\"2024-09-12T08:40:19+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/tutorial-implement-android-push-notifications-in-your-couchbase-mobile-app\/#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/tutorial-implement-android-push-notifications-in-your-couchbase-mobile-app\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/tutorial-implement-android-push-notifications-in-your-couchbase-mobile-app\/#primaryimage\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"width\":1800,\"height\":630},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/tutorial-implement-android-push-notifications-in-your-couchbase-mobile-app\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Tutorial: Implement Android Push Notifications in your Couchbase Mobile app\"}]},{\"@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\/ec4dfbd349cb4a321fb6a92b71a9a7f6\",\"name\":\"James Nocentini, Technical Writer, Mobile, Couchbase\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/09977bdd14473dc23a125f2f74c3e816\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/0aa80108e5c81e282d705199edae5a25f8ef92abf15cd64f8ff19837abcee09a?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/0aa80108e5c81e282d705199edae5a25f8ef92abf15cd64f8ff19837abcee09a?s=96&d=mm&r=g\",\"caption\":\"James Nocentini, Technical Writer, Mobile, Couchbase\"},\"description\":\"James Nocentini is the Technical Writer in charge of the documentation for Couchbase Mobile. Previously, he worked as a Developer Advocate and before that as a front-end developer for HouseTrip. He also enjoys writing Android tutorials for raywenderlich.com in his spare time.\",\"url\":\"https:\/\/www.couchbase.com\/blog\/pt\/author\/james-nocentini\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Tutorial: Implement Android Push Notifications in your Couchbase Mobile app - The Couchbase Blog","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\/tutorial-implement-android-push-notifications-in-your-couchbase-mobile-app\/","og_locale":"pt_BR","og_type":"article","og_title":"Tutorial: Implement Android Push Notifications in your Couchbase Mobile app","og_description":"When developing an application, it\u2019s very helpful to use the push and pull replication in continuous mode. Everything is handled by the replicators to make sure your app and Sync Gateway always have the latest documents synced. However, a continuous [&hellip;]","og_url":"https:\/\/www.couchbase.com\/blog\/pt\/tutorial-implement-android-push-notifications-in-your-couchbase-mobile-app\/","og_site_name":"The Couchbase Blog","article_published_time":"2015-04-26T16:00:41+00:00","article_modified_time":"2024-09-12T08:40:19+00:00","og_image":[{"url":"https:\/\/cl.ly\/image\/1J3O1D1s131U\/Model.png","type":"","width":"","height":""}],"author":"James Nocentini, Technical Writer, Mobile, Couchbase","twitter_card":"summary_large_image","twitter_misc":{"Written by":"James Nocentini, Technical Writer, Mobile, Couchbase","Est. reading time":"4 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/tutorial-implement-android-push-notifications-in-your-couchbase-mobile-app\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/tutorial-implement-android-push-notifications-in-your-couchbase-mobile-app\/"},"author":{"name":"James Nocentini, Technical Writer, Mobile, Couchbase","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/ec4dfbd349cb4a321fb6a92b71a9a7f6"},"headline":"Tutorial: Implement Android Push Notifications in your Couchbase Mobile app","datePublished":"2015-04-26T16:00:41+00:00","dateModified":"2024-09-12T08:40:19+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/tutorial-implement-android-push-notifications-in-your-couchbase-mobile-app\/"},"wordCount":909,"commentCount":0,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/tutorial-implement-android-push-notifications-in-your-couchbase-mobile-app\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","articleSection":["Uncategorized"],"inLanguage":"pt-BR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/tutorial-implement-android-push-notifications-in-your-couchbase-mobile-app\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/tutorial-implement-android-push-notifications-in-your-couchbase-mobile-app\/","url":"https:\/\/www.couchbase.com\/blog\/tutorial-implement-android-push-notifications-in-your-couchbase-mobile-app\/","name":"Tutorial: Implement Android Push Notifications in your Couchbase Mobile app - The Couchbase Blog","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/tutorial-implement-android-push-notifications-in-your-couchbase-mobile-app\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/tutorial-implement-android-push-notifications-in-your-couchbase-mobile-app\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","datePublished":"2015-04-26T16:00:41+00:00","dateModified":"2024-09-12T08:40:19+00:00","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/tutorial-implement-android-push-notifications-in-your-couchbase-mobile-app\/#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/tutorial-implement-android-push-notifications-in-your-couchbase-mobile-app\/"]}]},{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.couchbase.com\/blog\/tutorial-implement-android-push-notifications-in-your-couchbase-mobile-app\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","width":1800,"height":630},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/tutorial-implement-android-push-notifications-in-your-couchbase-mobile-app\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Tutorial: Implement Android Push Notifications in your Couchbase Mobile app"}]},{"@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\/ec4dfbd349cb4a321fb6a92b71a9a7f6","name":"James Nocentini, redator t\u00e9cnico, celular, Couchbase","image":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/09977bdd14473dc23a125f2f74c3e816","url":"https:\/\/secure.gravatar.com\/avatar\/0aa80108e5c81e282d705199edae5a25f8ef92abf15cd64f8ff19837abcee09a?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/0aa80108e5c81e282d705199edae5a25f8ef92abf15cd64f8ff19837abcee09a?s=96&d=mm&r=g","caption":"James Nocentini, Technical Writer, Mobile, Couchbase"},"description":"James Nocentini \u00e9 o redator t\u00e9cnico respons\u00e1vel pela documenta\u00e7\u00e3o do Couchbase Mobile. Anteriormente, ele trabalhou como Developer Advocate e, antes disso, como desenvolvedor front-end da HouseTrip. Ele tamb\u00e9m gosta de escrever tutoriais sobre Android para raywenderlich.com em seu tempo livre.","url":"https:\/\/www.couchbase.com\/blog\/pt\/author\/james-nocentini\/"}]}},"authors":[{"term_id":9028,"user_id":51,"is_guest":0,"slug":"james-nocentini","display_name":"James Nocentini, Technical Writer, Mobile, Couchbase","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/0aa80108e5c81e282d705199edae5a25f8ef92abf15cd64f8ff19837abcee09a?s=96&d=mm&r=g","author_category":"","last_name":"Nocentini","first_name":"James","job_title":"","user_url":"","description":"James Nocentini \u00e9 o redator t\u00e9cnico respons\u00e1vel pela documenta\u00e7\u00e3o do Couchbase Mobile. Anteriormente, ele trabalhou como Developer Advocate e, antes disso, como desenvolvedor front-end da HouseTrip. Ele tamb\u00e9m gosta de escrever tutoriais sobre Android para raywenderlich.com em seu tempo livre."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts\/1923","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\/51"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/comments?post=1923"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts\/1923\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/media\/13873"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/media?parent=1923"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/categories?post=1923"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/tags?post=1923"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/ppma_author?post=1923"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}