{"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>In 2013 Apple Inc. introduced a technology called <a href=\"https:\/\/en.wikipedia.org\/wiki\/IBeacon\">iBeacon<\/a> that runs on top of Bluetooth 4.0 protocol which is also known as <a href=\"https:\/\/en.wikipedia.org\/wiki\/Bluetooth_low_energy\">Bluetooth Low Energy<\/a> or BLE. \u00a0While Bluetooth enabled devices can identify themselves, the process is generally 1 to 1 with a host pairing with a device, such as a smart phone pairing with a Bluetooth headset.\u00a0 The iBeacon is simply a broadcast service that sends out a few pre-configured pieces of information and can run in parallel with other Bluetooth services.\u00a0 For discussion, the four parameters of interest when creating beacon applications from solutions like <a href=\"https:\/\/estimote.com\/\">Estimote<\/a> or from <a href=\"https:\/\/www.gimbal.com\/\">Gimbal<\/a> are the UUID String, a major 16-bit number, a minor 16-bit number, and a signal strength value.<\/p>\n<p style=\"text-align:justify\">On iOS7, Apple Inc. provides library functionalities for working with iBeacons and\u00a0while there are 3<sup>rd<\/sup> party libraries for other platforms, the blog here will be focused on iOS.\u00a0 Combining Couchbase Mobile technologies, Ed Arenberg and the <a href=\"https:\/\/arenberg@epage.com\">EPage team<\/a> is developing a service that makes heavy use of iBeacon and utilizes Couchbase Lite for local storage while synchronizing data among numberous devices by using Couchbase Sync Gateway.<\/p>\n<p style=\"text-align:justify\">Let us now explore the 3 key components of this iBeacon service and how to implement these core features using Couchbase Mobile technologies. Note all of the code is written in Swift 1.2.<\/p>\n<h3><strong>Saving data locally on the device to Couchbase Lite<\/strong><\/h3>\n<p>The service will first collect information from nearby beacons and log device informations to the database. \u00a0For your exploration, Apple has a good amount of <a href=\"https:\/\/developer.apple.com\/library\/ios\/documentation\/UserExperience\/Conceptual\/LocationAwarenessPG\/RegionMonitoring\/RegionMonitoring.html\">documentation<\/a> on how to locate and range nearby iBeacons.\u00a0 For integrating Couchbase Lite into your mobile app, you may look at the <a href=\"https:\/\/www.couchbase.com\/developers\/mobile\/\">Couchbase Mobile developer portal<\/a> for reference sample code.\u00a0<\/p>\n<h3><strong>ORM Implementation<\/strong><\/h3>\n<p>We will have the app keep objects in native classes and will implement an ORM to map to and from the Couchbase representation. \u00a0When the app locates a group of iBeacons, their class objects will be generated. \u00a0The class includes code for saving the object to Couchbase and for loading it from Couchbase. \u00a0Here is the class for holding an 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>Syncing Beacon Data<\/strong><\/h3>\n<p>When you are connected to a network, Couchbase Mobile will sync out data using <a href=\"https:\/\/bit.ly\/MobileCBSync\">Couchbase Sync Gateway<\/a>. \u00a0This is handled automatically once we set up our push and pull replications, which makes it very easy to keep the system coordinated. \u00a0We can add an observer method to listen for the state of the push and pull operations. \u00a0However, each device needs to listen for changes in the database for which it needs to take action, so we can add an observer for a database change notification. \u00a0When the database changes, we update our local native objects. \u00a0To manage the Couchbase interaction, create a Database object that instantiates a singleton. \u00a0The main concepts are delineated in the code below:<\/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>These are the main pieces that allow the mobile app to run local activities such as monitoring for nearby beacons, saving its local state, and set up sync services to coordinate information consistency amongst app instances. \u00a0From this you can build up more functionality and create sophisticated services that can synchronize state across a network of apps. In the next blog we will explore the use of beacon and <a href=\"https:\/\/www.couchbase.com\/developers\/mobile\/\">Couchbase Mobile<\/a> technologies together to deliver location aware apps that work without a network connection.<\/p>\n","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>\n","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"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.3 (Yoast SEO v27.3) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\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:\\\/\\\/secure.gravatar.com\\\/avatar\\\/b912c9a97568a859697ee195432d0bd7cc3ed67d720ae2e6588b67313fa49e08?s=96&d=mm&r=g650445f1ea30314c4f3555dd680154f5\",\"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:\/\/secure.gravatar.com\/avatar\/b912c9a97568a859697ee195432d0bd7cc3ed67d720ae2e6588b67313fa49e08?s=96&d=mm&r=g650445f1ea30314c4f3555dd680154f5","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\/"}]}},"acf":[],"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","0":null,"1":"","2":"","3":"","4":"","5":"","6":"","7":"","8":""}],"_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}]}}