{"id":1939,"date":"2015-09-01T16:48:43","date_gmt":"2015-09-01T16:48:43","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=1939"},"modified":"2023-09-09T03:15:16","modified_gmt":"2023-09-09T10:15:16","slug":"building-beacon-apps-with-couchbase-mobile","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/pt\/building-beacon-apps-with-couchbase-mobile\/","title":{"rendered":"Cria\u00e7\u00e3o de aplicativos Beacon com o Couchbase Mobile"},"content":{"rendered":"<p style=\"text-align:center\">\u00a0<\/p>\n<p>Em 2013, a Apple Inc. introduziu uma tecnologia chamada <a href=\"https:\/\/en.wikipedia.org\/wiki\/IBeacon\">iBeacon<\/a> que \u00e9 executado sobre o protocolo Bluetooth 4.0, tamb\u00e9m conhecido como <a href=\"https:\/\/en.wikipedia.org\/wiki\/Bluetooth_low_energy\">Bluetooth Low Energy<\/a> ou BLE.  Embora os dispositivos habilitados para Bluetooth possam se identificar, o processo geralmente \u00e9 de 1 para 1 com o emparelhamento de um host com um dispositivo, como o emparelhamento de um smartphone com um fone de ouvido Bluetooth.  O iBeacon \u00e9 simplesmente um servi\u00e7o de transmiss\u00e3o que envia algumas informa\u00e7\u00f5es pr\u00e9-configuradas e pode ser executado em paralelo com outros servi\u00e7os Bluetooth.  Para discuss\u00e3o, os quatro par\u00e2metros de interesse ao criar aplicativos de beacon a partir de solu\u00e7\u00f5es como <a href=\"https:\/\/estimote.com\/\">Estimote<\/a> ou de <a href=\"https:\/\/www.gimbal.com\/\">Gimbal<\/a> s\u00e3o a cadeia de caracteres UUID, um n\u00famero maior de 16 bits, um n\u00famero menor de 16 bits e um valor de intensidade de sinal.<\/p>\n<p style=\"text-align:justify\">No iOS7, a Apple Inc. fornece funcionalidades de biblioteca para trabalhar com iBeacons e, embora existam 3<sup>rd<\/sup> bibliotecas de terceiros para outras plataformas, o blog aqui se concentrar\u00e1 no iOS.  Combinando as tecnologias do Couchbase Mobile, Ed Arenberg e a equipe do <a href=\"https:\/\/arenberg@epage.com\">Equipe EPage<\/a> est\u00e1 desenvolvendo um servi\u00e7o que faz uso intenso do iBeacon e utiliza o Couchbase Lite para armazenamento local enquanto sincroniza dados entre v\u00e1rios dispositivos usando o Couchbase Sync Gateway.<\/p>\n<p style=\"text-align:justify\">Vamos agora explorar os tr\u00eas principais componentes desse servi\u00e7o iBeacon e como implementar esses recursos principais usando as tecnologias do Couchbase Mobile. Observe que todo o c\u00f3digo foi escrito em Swift 1.2.<\/p>\n<h3><strong>Salvando dados localmente no dispositivo para o Couchbase Lite<\/strong><\/h3>\n<p>O servi\u00e7o primeiro coletar\u00e1 informa\u00e7\u00f5es de beacons pr\u00f3ximos e registrar\u00e1 as informa\u00e7\u00f5es do dispositivo no banco de dados.  Para sua explora\u00e7\u00e3o, a Apple tem uma boa quantidade de <a href=\"https:\/\/developer.apple.com\/library\/ios\/documentation\/UserExperience\/Conceptual\/LocationAwarenessPG\/RegionMonitoring\/RegionMonitoring.html\">documenta\u00e7\u00e3o<\/a> sobre como localizar e alcan\u00e7ar iBeacons pr\u00f3ximos.  Para integrar o Couchbase Lite ao seu aplicativo m\u00f3vel, voc\u00ea pode consultar o <a href=\"https:\/\/www.couchbase.com\/blog\/pt\/developers\/mobile\/\">Portal do desenvolvedor do Couchbase Mobile<\/a> para obter um c\u00f3digo de exemplo de refer\u00eancia.\u00a0<\/p>\n<h3><strong>Implementa\u00e7\u00e3o do ORM<\/strong><\/h3>\n<p>Faremos com que o aplicativo mantenha objetos em classes nativas e implementaremos um ORM para mapear de e para a representa\u00e7\u00e3o do Couchbase.  Quando o aplicativo localizar um grupo de iBeacons, seus objetos de classe ser\u00e3o gerados.  A classe inclui c\u00f3digo para salvar o objeto no Couchbase e para carreg\u00e1-lo do Couchbase.  Aqui est\u00e1 a classe para manter um iBeacon:<\/p>\n<pre>\r\n<code class=\"language-swift\">\r\n\r\nclass Beacon : EntityDocument {\r\n\r\n    var proximityID = \u201cXXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\"\r\n    var major : Int? = 0\r\n    var minor : Int? = 0\r\n\r\n    override func save() {\r\n        let dict = NSMutableDictionary()\r\n        dict[\"type\"] = \"gbeacon\"\r\n        dict[\"proximityID\"] = proximityID\r\n        dict[\"major\"] = major ?? 0\r\n        dict[\"minor\"] = minor ?? 0\r\n        super.save(dict)\r\n    }\r\n\r\n    override func load(document: CBLDocument) {\r\n        super.load(document)\r\n        proximityID = document.properties[\"proximityID\"] as! String\r\n        major = document.properties[\"major\"] as? Int\r\n        minor = document.properties[\"minor\"] as? Int\r\n    }\r\n}\r\n\r\n\/\/EntityDocument is a base class for various objects:\r\nclass EntityDocument {\r\n    var document : CBLDocument?\r\n    init () {}\r\n    func save(dict: NSDictionary) {\r\n        if document == nil {\r\n            document = Database.sharedDatabase.createDocument(dict, object:self)\r\n        } else {\r\n            var error: NSError?\r\n            var properties = NSMutableDictionary(dictionary: document!.properties)\r\n            properties.addEntriesFromDictionary(dict as [NSObject : AnyObject])\r\n            if document!.putProperties(properties as [NSObject : AnyObject], error: &amp;error) == nil {\r\n                NSLog(\"%@\", error!)\r\n            }\r\n        }\r\n    }\r\n    func load(document: CBLDocument) {\r\n        self.document = document\r\n    }\r\n    func delete() {\r\n        var error : NSError?\r\n        if let doc = document {\r\n            if !doc.deleteDocument(&amp;error) {\r\n                \/\/ Handle Error\r\n            }\r\n        }\r\n    }\r\n}\r\n\r\n\/\/Now can create Beacon object from a discovered 'foundBeacon'(CLBeacon iOS object) and save it simply with:\r\nlet beacon = Beacon()\r\nbeacon.proximityID = foundBeacon.proximityUUID\r\nbeacon.major = foundBeacon.major\r\nbeacon.minor = foundBeacon.minor\r\nbeacon.save()\r\n}\r\n<\/code><\/pre>\n<p>\u00a0<\/p>\n<h3><strong>Sincroniza\u00e7\u00e3o de dados de beacon<\/strong><\/h3>\n<p>Quando voc\u00ea estiver conectado a uma rede, o Couchbase Mobile sincronizar\u00e1 os dados usando <a href=\"https:\/\/bit.ly\/MobileCBSync\">Gateway de sincroniza\u00e7\u00e3o do Couchbase<\/a>.  Isso \u00e9 tratado automaticamente quando configuramos nossas replica\u00e7\u00f5es push e pull, o que facilita muito manter o sistema coordenado.  Podemos adicionar um m\u00e9todo de observador para ouvir o estado das opera\u00e7\u00f5es push e pull.  No entanto, cada dispositivo precisa ouvir as altera\u00e7\u00f5es no banco de dados para as quais ele precisa agir, portanto, podemos adicionar um observador para uma notifica\u00e7\u00e3o de altera\u00e7\u00e3o do banco de dados.  Quando o banco de dados \u00e9 alterado, atualizamos nossos objetos nativos locais.  Para gerenciar a intera\u00e7\u00e3o com o Couchbase, crie um objeto Database que instancie um singleton.  Os principais conceitos est\u00e3o delineados no c\u00f3digo abaixo:<\/p>\n<pre>\r\n<code class=\"language-swift\">\r\n\r\nprivate let _DatabaseSharedInstance = Database()\r\n\r\nclass Database {\r\n    var manager: CBLManager = CBLManager.sharedInstance()\r\n    var db: CBLDatabase\r\n    var my_push: CBLReplication\r\n    var my_pull: CBLReplication\r\n\r\n    class var sharedDatabase: Database {\r\n        return _DatabaseSharedInstance\r\n    }\r\n    init() {\r\n        var replication_url = NSURL(string: REPLICATION_URL)\r\n        var error :NSError?\r\n        db = manager.databaseNamed(DATABASE_NAME, error: &amp;error)\r\n\r\n        let push = db.createPushReplication(replication_url)\r\n        let pull = db.createPullReplication(replication_url)\r\n        push?.continuous = true\r\n        pull?.continuous = true\r\n\r\n        my_push = push\r\n        my_pull = pull\r\n\r\n        push.start()\r\n        pull.start()\r\n        \r\n        NSNotificationCenter.defaultCenter().addObserver(self, selector: \"replicationChanged:\", name: kCBLReplicationChangeNotification, object: push)\r\n        NSNotificationCenter.defaultCenter().addObserver(self, selector: \"replicationChanged:\", name: kCBLReplicationChangeNotification, object: pull)\r\n        NSNotificationCenter.defaultCenter().addObserver(self, selector: \"databaseChanged:\", name: kCBLDatabaseChangeNotification, object: db)\r\n    }\r\n\r\n    @objc func databaseChanged(notification: NSNotification) {\r\n        if let changes = notification.userInfo![\"changes\"] as? [CBLDatabaseChange] {\r\n            for change in changes {\r\n                NSLog(\"%@ changed\", change.documentID)\r\n                updateObject(change.documentID)\r\n            }\r\n        }\r\n    }\r\n    @objc func replicationChanged(notification: NSNotification) {\r\n        let active = my_pull.status == CBLReplicationStatus.Active || my_push.status == CBLReplicationStatus.Active\r\n        NSLog(\"%@ in replication changed: %@\", notification.object!.description, active)\r\n        \/\/ Now show a progress indicator:\r\n        if active {\r\n            var progress = 0.0\r\n            let total = my_push.changesCount + my_pull.changesCount\r\n            let completed = my_push.completedChangesCount + my_pull.completedChangesCount\r\n            if total &gt; 0 {\r\n                progress = Double(completed) \/ Double(total);\r\n                NSLog(\"progress: %f\", progress)\r\n            }\r\n        }\r\n    }\r\n}\r\n\r\n<\/code><\/pre>\n<p>Essas s\u00e3o as pe\u00e7as principais que permitem que o aplicativo m\u00f3vel execute atividades locais, como o monitoramento de beacons pr\u00f3ximos, salvando seu estado local e configurando servi\u00e7os de sincroniza\u00e7\u00e3o para coordenar a consist\u00eancia das informa\u00e7\u00f5es entre as inst\u00e2ncias do aplicativo.  A partir disso, voc\u00ea pode desenvolver mais funcionalidades e criar servi\u00e7os sofisticados que possam sincronizar o estado em uma rede de aplicativos. No pr\u00f3ximo blog, exploraremos o uso de beacon e <a href=\"https:\/\/www.couchbase.com\/blog\/pt\/developers\/mobile\/\">Couchbase Mobile<\/a> para oferecer aplicativos com reconhecimento de localiza\u00e7\u00e3o que funcionam sem conex\u00e3o de rede.<\/p>","protected":false},"excerpt":{"rendered":"<p>\u00a0 In 2013 Apple Inc. introduced a technology called iBeacon that runs on top of Bluetooth 4.0 protocol which is also known as Bluetooth Low Energy or BLE. \u00a0While Bluetooth enabled devices can identify themselves, the process is generally 1 [&hellip;]<\/p>","protected":false},"author":30,"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":[8983],"class_list":["post-1939","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.1 (Yoast SEO v26.1.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Building Beacon Apps with Couchbase Mobile - 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\/building-beacon-apps-with-couchbase-mobile\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Building Beacon Apps with Couchbase Mobile\" \/>\n<meta property=\"og:description\" content=\"\u00a0 In 2013 Apple Inc. introduced a technology called iBeacon that runs on top of Bluetooth 4.0 protocol which is also known as Bluetooth Low Energy or BLE. \u00a0While Bluetooth enabled devices can identify themselves, the process is generally 1 [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/pt\/building-beacon-apps-with-couchbase-mobile\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2015-09-01T16:48:43+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-09-09T10:15:16+00:00\" \/>\n<meta name=\"author\" content=\"William Hoang, Mobile Developer Advocate, 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=\"William Hoang, Mobile Developer Advocate, Couchbase\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 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-beacon-apps-with-couchbase-mobile\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/building-beacon-apps-with-couchbase-mobile\/\"},\"author\":{\"name\":\"William Hoang, Mobile Developer Advocate, Couchbase\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/425717456c198fdf9aaa5d7a6d42ad32\"},\"headline\":\"Building Beacon Apps with Couchbase Mobile\",\"datePublished\":\"2015-09-01T16:48:43+00:00\",\"dateModified\":\"2023-09-09T10:15:16+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/building-beacon-apps-with-couchbase-mobile\/\"},\"wordCount\":550,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/building-beacon-apps-with-couchbase-mobile\/#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\/building-beacon-apps-with-couchbase-mobile\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/building-beacon-apps-with-couchbase-mobile\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/building-beacon-apps-with-couchbase-mobile\/\",\"name\":\"Building Beacon Apps with Couchbase Mobile - The Couchbase Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/building-beacon-apps-with-couchbase-mobile\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/building-beacon-apps-with-couchbase-mobile\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"datePublished\":\"2015-09-01T16:48:43+00:00\",\"dateModified\":\"2023-09-09T10:15:16+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/building-beacon-apps-with-couchbase-mobile\/#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/building-beacon-apps-with-couchbase-mobile\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/building-beacon-apps-with-couchbase-mobile\/#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\/building-beacon-apps-with-couchbase-mobile\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Building Beacon Apps with Couchbase Mobile\"}]},{\"@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\/425717456c198fdf9aaa5d7a6d42ad32\",\"name\":\"William Hoang, Mobile Developer Advocate, Couchbase\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/650445f1ea30314c4f3555dd680154f5\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/b912c9a97568a859697ee195432d0bd7cc3ed67d720ae2e6588b67313fa49e08?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/b912c9a97568a859697ee195432d0bd7cc3ed67d720ae2e6588b67313fa49e08?s=96&d=mm&r=g\",\"caption\":\"William Hoang, Mobile Developer Advocate, Couchbase\"},\"description\":\"William was a Developer Advocate on the Mobile Engineering\/Developer Experience team at Couchbase. His love for coffee and code has transcended him into the world of mobile while appreciating the offline in-person experiences. Prior, William worked on the Developer Relations team over at Twitter, BlackBerry, and Microsoft while also having been a Software Embedded GPS engineer at Research In Motion. William graduated from McGill University in Electrical Software Engineering\",\"url\":\"https:\/\/www.couchbase.com\/blog\/pt\/author\/william-hoang\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Building Beacon Apps with Couchbase Mobile - 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\/building-beacon-apps-with-couchbase-mobile\/","og_locale":"pt_BR","og_type":"article","og_title":"Building Beacon Apps with Couchbase Mobile","og_description":"\u00a0 In 2013 Apple Inc. introduced a technology called iBeacon that runs on top of Bluetooth 4.0 protocol which is also known as Bluetooth Low Energy or BLE. \u00a0While Bluetooth enabled devices can identify themselves, the process is generally 1 [&hellip;]","og_url":"https:\/\/www.couchbase.com\/blog\/pt\/building-beacon-apps-with-couchbase-mobile\/","og_site_name":"The Couchbase Blog","article_published_time":"2015-09-01T16:48:43+00:00","article_modified_time":"2023-09-09T10:15:16+00:00","author":"William Hoang, Mobile Developer Advocate, Couchbase","twitter_card":"summary_large_image","twitter_misc":{"Written by":"William Hoang, Mobile Developer Advocate, Couchbase","Est. reading time":"3 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/building-beacon-apps-with-couchbase-mobile\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/building-beacon-apps-with-couchbase-mobile\/"},"author":{"name":"William Hoang, Mobile Developer Advocate, Couchbase","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/425717456c198fdf9aaa5d7a6d42ad32"},"headline":"Building Beacon Apps with Couchbase Mobile","datePublished":"2015-09-01T16:48:43+00:00","dateModified":"2023-09-09T10:15:16+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/building-beacon-apps-with-couchbase-mobile\/"},"wordCount":550,"commentCount":0,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/building-beacon-apps-with-couchbase-mobile\/#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\/building-beacon-apps-with-couchbase-mobile\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/building-beacon-apps-with-couchbase-mobile\/","url":"https:\/\/www.couchbase.com\/blog\/building-beacon-apps-with-couchbase-mobile\/","name":"Building Beacon Apps with Couchbase Mobile - The Couchbase Blog","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/building-beacon-apps-with-couchbase-mobile\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/building-beacon-apps-with-couchbase-mobile\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","datePublished":"2015-09-01T16:48:43+00:00","dateModified":"2023-09-09T10:15:16+00:00","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/building-beacon-apps-with-couchbase-mobile\/#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/building-beacon-apps-with-couchbase-mobile\/"]}]},{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.couchbase.com\/blog\/building-beacon-apps-with-couchbase-mobile\/#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\/building-beacon-apps-with-couchbase-mobile\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Building Beacon Apps with Couchbase Mobile"}]},{"@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\/425717456c198fdf9aaa5d7a6d42ad32","name":"William Hoang, defensor do desenvolvedor m\u00f3vel, Couchbase","image":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/650445f1ea30314c4f3555dd680154f5","url":"https:\/\/secure.gravatar.com\/avatar\/b912c9a97568a859697ee195432d0bd7cc3ed67d720ae2e6588b67313fa49e08?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/b912c9a97568a859697ee195432d0bd7cc3ed67d720ae2e6588b67313fa49e08?s=96&d=mm&r=g","caption":"William Hoang, Mobile Developer Advocate, Couchbase"},"description":"William foi um defensor do desenvolvedor na equipe de engenharia m\u00f3vel\/experi\u00eancia do desenvolvedor na Couchbase. Seu amor por caf\u00e9 e c\u00f3digo o levou ao mundo dos dispositivos m\u00f3veis, ao mesmo tempo em que apreciava as experi\u00eancias presenciais off-line. Antes disso, William trabalhou na equipe de rela\u00e7\u00f5es com desenvolvedores do Twitter, BlackBerry e Microsoft, al\u00e9m de ter sido engenheiro de GPS incorporado a software na Research In Motion. William se formou na McGill University em Engenharia El\u00e9trica de Software","url":"https:\/\/www.couchbase.com\/blog\/pt\/author\/william-hoang\/"}]}},"authors":[{"term_id":8983,"user_id":30,"is_guest":0,"slug":"william-hoang","display_name":"William Hoang, Mobile Developer Advocate, Couchbase","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/b912c9a97568a859697ee195432d0bd7cc3ed67d720ae2e6588b67313fa49e08?s=96&d=mm&r=g","author_category":"","last_name":"Hoang","first_name":"William","job_title":"","user_url":"","description":"William foi um defensor do desenvolvedor na equipe de engenharia m\u00f3vel\/experi\u00eancia do desenvolvedor na Couchbase. Seu amor por caf\u00e9 e c\u00f3digo o levou ao mundo dos dispositivos m\u00f3veis, ao mesmo tempo em que apreciava as experi\u00eancias presenciais off-line. Antes disso, William trabalhou na equipe de rela\u00e7\u00f5es com desenvolvedores do Twitter, BlackBerry e Microsoft, al\u00e9m de ter sido engenheiro de GPS incorporado a software na Research In Motion. William se formou na McGill University em Engenharia El\u00e9trica de Software"}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts\/1939","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\/30"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/comments?post=1939"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts\/1939\/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=1939"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/categories?post=1939"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/tags?post=1939"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/ppma_author?post=1939"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}