{"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\/es\/tutorial-implement-android-push-notifications-in-your-couchbase-mobile-app\/","title":{"rendered":"Tutorial: Implementa las notificaciones push de Android en tu aplicaci\u00f3n Couchbase Mobile"},"content":{"rendered":"<p><script src=\"\/webfiles\/1484262819972\/js\/thirdparty\/vendor\/prism.js\"><\/script><\/p>\n<p>Al desarrollar una aplicaci\u00f3n, es muy \u00fatil utilizar la replicaci\u00f3n push y pull en modo continuo. Los replicadores se encargan de todo para asegurarse de que su aplicaci\u00f3n y Sync Gateway siempre tengan sincronizados los documentos m\u00e1s recientes.<\/p>\n<p>Sin embargo, una replicaci\u00f3n pull continua significa que Couchbase Lite utilizar\u00e1 t\u00e9cnicas como sondeos largos o web sockets para comprobar si hay nuevos datos que obtener de Sync Gateway. Esto puede tener un impacto en la duraci\u00f3n de la bater\u00eda y, en consecuencia, en la experiencia del usuario.<\/p>\n<p>En este post, exploraremos una alternativa a la replicaci\u00f3n pull continua utilizando Google Cloud Messaging, el servicio de notificaciones push de Android.<\/p>\n<p>Puede consultar un <a href=\"https:\/\/github.com\/couchbaselabs\/ToDoLite-Android\">ejemplo pr\u00e1ctico<\/a>\u00a0en ToDoLite Android. \u00a1Veamos c\u00f3mo puedes incluir la sincronizaci\u00f3n GCM en tu aplicaci\u00f3n!<\/p>\n<h2>Activar GCM en tu aplicaci\u00f3n<\/h2>\n<p>En primer lugar, vamos a configurar ToDoLite Android para que se registre en Google Cloud Messaging. Crearemos un nuevo proyecto Google API en el directorio <a href=\"https:\/\/developer.google.com\/console\">consola para desarrolladores<\/a>. Siga este <a href=\"https:\/\/developer.android.com\/google\/gcm\/gs.html\">gu\u00eda<\/a>\u00a0para configurarlo. Deber\u00edas tener un n\u00famero de proyecto y una clave API. Ahora podemos actualizar el proyecto de <strong>AndroidManifest.xml<\/strong> con los permisos necesarios, el filtro de intenci\u00f3n y el servicio. Deber\u00eda tener este aspecto:<\/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>Nota:<\/strong> Echa un vistazo a la <a href=\"https:\/\/developer.android.com\/google\/gcm\/client.html#manifest\">ejemplo<\/a>\u00a0desde el sitio de desarrolladores de android tambi\u00e9n.<\/p>\n<p>Si el proyecto est\u00e1 configurado correctamente, podemos recuperar el token de dispositivo con el n\u00famero de proyecto que obtuvimos al crear la app en la consola de desarrollador de google. A\u00f1ade un m\u00e9todo en la Actividad Principal para recuperar el token de dispositivo desde GCM y guardarlo en el documento de perfil de usuario, por ejemplo:<\/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>Nota:<\/strong> Los tokens de dispositivo en Android siempre empiezan por APA91, as\u00ed que no los pierdas de vista en LogCat ;)<\/p>\n<p>A continuaci\u00f3n, tenemos que a\u00f1adir algo de c\u00f3digo para manejar una notificaci\u00f3n entrante. Subclasificamos la clase WakefulBroadcastReceiver donde el m\u00e9todo onReceive es llamado cada vez que recibimos una notificaci\u00f3n.<\/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 de ah\u00ed, el servicio wakeful inicia la clase GcmMessageHandler y realiza una \u00fanica replicaci\u00f3n pull. El servicio wakeful se ejecuta incluso si tu aplicaci\u00f3n se est\u00e1 ejecutando en segundo plano. As\u00ed, tu aplicaci\u00f3n mostrar\u00e1 los nuevos datos cuando se abra.<\/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>F\u00edjate que estamos usando el escuchador de cambios de replicaci\u00f3n para que nos notifique cuando haya terminado y para apagar el servicio de vigilia.<\/p>\n<p>Eso es todo lo que tenemos que hacer en el lado de Android para manejar la notificaci\u00f3n de sincronizaci\u00f3n.<\/p>\n<h2>Guardar las fichas de los dispositivos<\/h2>\n<p>Ahora podemos almacenar el token de dispositivo en el documento de perfil de usuario. Cada usuario puede estar conectado a m\u00e1s de un dispositivo a la vez por lo que debemos almacenar cada uno de ellos. El documento de usuario tendr\u00e1 este aspecto:<\/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>En la siguiente secci\u00f3n, hablaremos sobre c\u00f3mo a\u00f1adir l\u00f3gica de aplicaci\u00f3n adicional a Sync Gateway utilizando la fuente de cambios.<\/p>\n<h2>La pasarela de sincronizaci\u00f3n cambia de fuente<\/h2>\n<p>En <strong>\/base de datos\/cambios<\/strong> devuelve una lista ordenada de los cambios realizados en los documentos de la base de datos. Este endpoint forma parte de CouchDB <a href=\"https:\/\/docs.couchdb.org\/en\/latest\/api\/database\/changes.html\">spec<\/a>\u00a0y tanto Couchbase Lite Listener como Sync Gateway lo implementan.<\/p>\n<p>Es muy f\u00e1cil conectarse a la fuente de cambios de Sync Gateway para a\u00f1adir l\u00f3gica adicional al back-end como, en nuestro caso, el env\u00edo de notificaciones push.<\/p>\n<p>Puede utilizar cualquier biblioteca que implemente la api de alimentaci\u00f3n de cambios:<\/p>\n<ul>\n<li>NodeJS: <a href=\"https:\/\/github.com\/djc\/couchdb-python\">https:\/\/github.com\/iriscouch\/follow<\/a><\/li>\n<li>Vamos: <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 los <a href=\"https:\/\/docs.couchdb.org\/en\/latest\/api\/database\/changes.html\">par\u00e1metros disponibles<\/a> en la cadena de consulta, las m\u00e1s importantes en nuestro caso son:<\/p>\n<ul>\n<li>feed=continuous para garantizar que recibimos los cambios inmediatamente<\/li>\n<li>since=ahora para obtener los cambios desde el momento actual, de lo contrario registrar\u00e1 todos los cambios desde que se cre\u00f3 la base de datos.<\/li>\n<\/ul>\n<p>Por \u00faltimo, centr\u00e9monos en la \u00faltima pieza del rompecabezas: dado un cambio de documento del feed de cambios, necesitamos obtener los documentos del perfil de usuario \"<em>interesado\"<\/em> en ese cambio porque tienen las fichas de los dispositivos.<\/p>\n<h2>Cambios Feed \u2192 GCM<\/h2>\n<p>En ToDoLite, existen 3 tipos de documentos: un perfil, una lista y una tarea. El documento de tarea contiene una referencia a la lista a la que pertenece y una lista tiene un propietario y una matriz de miembros.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/cl.ly\/image\/1J3O1D1s131U\/Model.png\" \/><\/p>\n<p>Cuando un documento de tarea o un documento de lista cambia, nos gustar\u00eda notificar al propietario y a los miembros de esa lista. Hay dos tipos de eventos que nos gustar\u00eda manejar:<\/p>\n<p>1. Un evento de cambio de documento de lista:<\/p>\n<ul>\n<li style=\"margin-left: 40px;\">obtener el documento de perfil del propietario<\/li>\n<li style=\"margin-left: 40px;\">obtener el documento de perfil de cada miembro<\/li>\n<\/ul>\n<p>2. Un evento de cambio de documento de tarea:<\/p>\n<ul>\n<li style=\"margin-left: 40px;\">obtener el documento de la lista a la que pertenece<\/li>\n<li style=\"margin-left: 40px;\">siga los mismos pasos que en 1)<\/li>\n<\/ul>\n<p>Con los tokens de dispositivo recuperados, el \u00faltimo paso es enviar una petici\u00f3n a los servidores de Google Cloud Messaging con nuestra API Key y el payload de la notificaci\u00f3n. Tambi\u00e9n puedes encontrar muchas librer\u00edas en GitHub que simplifican la interacci\u00f3n con los servidores de 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>Vamos: <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>Conclusi\u00f3n<\/h2>\n<p>El uso de Google Cloud Messaging para activar la obtenci\u00f3n de datos desde el lado del servidor puede proporcionar una gran experiencia de usuario sin ninguna sobrecarga adicional de bater\u00eda y uso de red.<\/p>\n<p>Siga las <a href=\"https:\/\/github.com\/couchbaselabs\/ToDoLite-Android#syncing-with-google-cloud-messaging\">l\u00e9ame<\/a>\u00a0instrucciones para ejecutar la demo de ToDoLite.<\/p>\n<p>Me encantar\u00eda saber c\u00f3mo utilizas las notificaciones de Google Cloud Messaging en tu aplicaci\u00f3n. H\u00e1zmelo saber en los comentarios.<\/p>\n<p>M\u00e1s lectura:<\/p>\n<ul>\n<li>Consejos para configurar GCM en tu aplicaci\u00f3n: <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>Sincronizaci\u00f3n de datos en la aplicaci\u00f3n 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.5 (Yoast SEO v26.5) - 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\/es\/tutorial-implement-android-push-notifications-in-your-couchbase-mobile-app\/\" \/>\n<meta property=\"og:locale\" content=\"es_MX\" \/>\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\/es\/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\":\"es\",\"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\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/tutorial-implement-android-push-notifications-in-your-couchbase-mobile-app\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@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\":\"es\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\",\"name\":\"The Couchbase Blog\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@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\":\"es\",\"@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\/es\/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\/es\/tutorial-implement-android-push-notifications-in-your-couchbase-mobile-app\/","og_locale":"es_MX","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\/es\/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":"es","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":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/tutorial-implement-android-push-notifications-in-your-couchbase-mobile-app\/"]}]},{"@type":"ImageObject","inLanguage":"es","@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":"El blog de Couchbase","description":"Couchbase, la base de datos 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":"es"},{"@type":"Organization","@id":"https:\/\/www.couchbase.com\/blog\/#organization","name":"El blog de Couchbase","url":"https:\/\/www.couchbase.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"es","@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, Redactor t\u00e9cnico, M\u00f3vil, Couchbase","image":{"@type":"ImageObject","inLanguage":"es","@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 es el escritor t\u00e9cnico encargado de la documentaci\u00f3n de Couchbase Mobile. Anteriormente, trabaj\u00f3 como Developer Advocate y antes de eso como desarrollador front-end para HouseTrip. Tambi\u00e9n disfruta escribiendo tutoriales de Android para raywenderlich.com en su tiempo libre.","url":"https:\/\/www.couchbase.com\/blog\/es\/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 es el escritor t\u00e9cnico encargado de la documentaci\u00f3n de Couchbase Mobile. Anteriormente, trabaj\u00f3 como Developer Advocate y antes de eso como desarrollador front-end para HouseTrip. Tambi\u00e9n disfruta escribiendo tutoriales de Android para raywenderlich.com en su tiempo libre."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts\/1923","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/users\/51"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/comments?post=1923"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts\/1923\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/media\/13873"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/media?parent=1923"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/categories?post=1923"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/tags?post=1923"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/ppma_author?post=1923"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}