{"id":765,"date":"2018-01-16T09:30:34","date_gmt":"2018-01-16T17:30:34","guid":{"rendered":"https:\/\/www.kenwalger.com\/blog\/?p=765"},"modified":"2018-11-17T15:07:56","modified_gmt":"2018-11-17T23:07:56","slug":"factoring-offline-syncing-app-design","status":"publish","type":"post","link":"https:\/\/www.kenwalger.com\/blog\/mobile-development\/factoring-offline-syncing-app-design\/","title":{"rendered":"Factoring Offline Syncing into your App Design"},"content":{"rendered":"<p><span style=\"font-weight: 400;\">While most of us are connected to the Internet most of the time, there are still times when we are not online. Just because we are offline doesn\u2019t mean we won\u2019t want to use our apps. Herein lies the problem if you\u2019re developing apps that depend on the Internet to function correctly. We want to check our fitness app part way through a run in the woods, we\u2019d like to play our game apps while sitting on a bus. If your app doesn\u2019t work for everyone, all the time, then your customers will soon find an alternative app that is available offline.<\/span><\/p>\n<p><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" data-attachment-id=\"768\" data-permalink=\"https:\/\/www.kenwalger.com\/blog\/mobile-development\/factoring-offline-syncing-app-design\/attachment\/app-dev\/\" data-orig-file=\"https:\/\/i0.wp.com\/www.kenwalger.com\/blog\/wp-content\/uploads\/2018\/01\/app-dev.jpg?fit=800%2C600&amp;ssl=1\" data-orig-size=\"800,600\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"app dev\" data-image-description=\"\" data-image-caption=\"\" data-medium-file=\"https:\/\/i0.wp.com\/www.kenwalger.com\/blog\/wp-content\/uploads\/2018\/01\/app-dev.jpg?fit=300%2C225&amp;ssl=1\" data-large-file=\"https:\/\/i0.wp.com\/www.kenwalger.com\/blog\/wp-content\/uploads\/2018\/01\/app-dev.jpg?fit=800%2C600&amp;ssl=1\" class=\"aligncenter wp-image-768 size-full\" src=\"https:\/\/i0.wp.com\/www.kenwalger.com\/blog\/wp-content\/uploads\/2018\/01\/app-dev.jpg?resize=800%2C600&#038;ssl=1\" alt=\"App development\" width=\"800\" height=\"600\" srcset=\"https:\/\/i0.wp.com\/www.kenwalger.com\/blog\/wp-content\/uploads\/2018\/01\/app-dev.jpg?w=800&amp;ssl=1 800w, https:\/\/i0.wp.com\/www.kenwalger.com\/blog\/wp-content\/uploads\/2018\/01\/app-dev.jpg?resize=300%2C225&amp;ssl=1 300w, https:\/\/i0.wp.com\/www.kenwalger.com\/blog\/wp-content\/uploads\/2018\/01\/app-dev.jpg?resize=768%2C576&amp;ssl=1 768w\" sizes=\"auto, (max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 984px) 61vw, (max-width: 1362px) 45vw, 600px\" \/><\/p>\n<h2><span style=\"font-weight: 400;\">So what do you do about it?<\/span><\/h2>\n<p><span style=\"font-weight: 400;\">Database synchronization is the key. Luckily, this isn\u2019t something you\u2019re going to have to develop yourself. It\u2019s far easier to use a third-party provider such as <\/span><a href=\"https:\/\/firebase.google.com\/\"><span style=\"font-weight: 400;\">Google Firebase<\/span><\/a><span style=\"font-weight: 400;\"> or <\/span><a href=\"https:\/\/aws.amazon.com\/cognito\/\"><span style=\"font-weight: 400;\">Amazon Cognito<\/span><\/a><span style=\"font-weight: 400;\"> for your synchronization needs. <\/span><\/p>\n<h2><span style=\"font-weight: 400;\">Which provider should I go with?<\/span><\/h2>\n<h3><span style=\"font-weight: 400;\">Looking forward<\/span><\/h3>\n<p><span style=\"font-weight: 400;\">Choosing which provider to opt for will depend on your own specific requirements. It\u2019s important to think about the future. While your app may currently be aimed solely at mobile devices, will you eventually want to branch out to enable users to install your app on their desktop or laptop machines? Make the right choices now, so you won\u2019t have to make big changes in the future. You should also find an option that allows for some flexibility. While you can predict the future to some extent, it\u2019s hard to visualize what your <\/span><a href=\"https:\/\/fueled.com\/blog\/design-a-matter-of-process\/\"><span style=\"font-weight: 400;\">mobile app development<\/span><\/a><span style=\"font-weight: 400;\"> requirements will be in several years time. A provider that allows you to be flexible will help you to grow and expand without limiting you. <\/span><\/p>\n<h3><span style=\"font-weight: 400;\">Security is paramount<\/span><\/h3>\n<p><span style=\"font-weight: 400;\">You\u2019ll need your data to be encrypted, you\u2019ll also need data to be sent securely, either via SSL or TLS. Your users will presume any data they send via your app, or store within the app is secure, so you need to make sure it is or you\u2019ll have big problems later. A security breach is the quickest way to lose a good reputation.<\/span><\/p>\n<p><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" data-attachment-id=\"767\" data-permalink=\"https:\/\/www.kenwalger.com\/blog\/mobile-development\/factoring-offline-syncing-app-design\/attachment\/security\/\" data-orig-file=\"https:\/\/i0.wp.com\/www.kenwalger.com\/blog\/wp-content\/uploads\/2018\/01\/security.jpg?fit=949%2C720&amp;ssl=1\" data-orig-size=\"949,720\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"security\" data-image-description=\"\" data-image-caption=\"\" data-medium-file=\"https:\/\/i0.wp.com\/www.kenwalger.com\/blog\/wp-content\/uploads\/2018\/01\/security.jpg?fit=300%2C228&amp;ssl=1\" data-large-file=\"https:\/\/i0.wp.com\/www.kenwalger.com\/blog\/wp-content\/uploads\/2018\/01\/security.jpg?fit=840%2C637&amp;ssl=1\" class=\"aligncenter wp-image-767 size-full\" src=\"https:\/\/i0.wp.com\/www.kenwalger.com\/blog\/wp-content\/uploads\/2018\/01\/security.jpg?resize=840%2C637&#038;ssl=1\" alt=\"Security\" width=\"840\" height=\"637\" srcset=\"https:\/\/i0.wp.com\/www.kenwalger.com\/blog\/wp-content\/uploads\/2018\/01\/security.jpg?w=949&amp;ssl=1 949w, https:\/\/i0.wp.com\/www.kenwalger.com\/blog\/wp-content\/uploads\/2018\/01\/security.jpg?resize=300%2C228&amp;ssl=1 300w, https:\/\/i0.wp.com\/www.kenwalger.com\/blog\/wp-content\/uploads\/2018\/01\/security.jpg?resize=768%2C583&amp;ssl=1 768w\" sizes=\"auto, (max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 1362px) 62vw, 840px\" \/><\/p>\n<h3><span style=\"font-weight: 400;\">Synchronization conflicts need to be addressed<\/span><\/h3>\n<p><span style=\"font-weight: 400;\">When you\u2019re synchronizing data, there is always the risk of conflicts. For instance, a user has the app open on both their phone and their tablet. How do you deal with this? This data conflict needs to be resolved in the least noticeable way for the user. Check out the providers and do your research. Whose approach will best suit your own needs for conflict resolution?<\/span><\/p>\n<h3><span style=\"font-weight: 400;\">It\u2019s all about timing<\/span><\/h3>\n<p><span style=\"font-weight: 400;\">Your users won\u2019t thank you if your app is syncing when they\u2019ve got their mobile data on, racking up a big bill and draining their battery. It\u2019s important to find a provider that makes sensible presumptions and gives options for the timing of synchronization. For instance, you may well want your app to synchronize only when the user is on a wifi connection and not to sync when their mobile device is low on battery. <\/span><\/p>\n<a class=\"synved-social-button synved-social-button-share synved-social-size-48 synved-social-resolution-single synved-social-provider-facebook nolightbox\" data-provider=\"facebook\" target=\"_blank\" rel=\"nofollow\" title=\"Share on Facebook\" href=\"https:\/\/www.facebook.com\/sharer.php?u=https%3A%2F%2Fwww.kenwalger.com%2Fblog%2Fwp-json%2Fwp%2Fv2%2Fposts%2F765&#038;t=Factoring%20Offline%20Syncing%20into%20your%20App%20Design&#038;s=100&#038;p&#091;url&#093;=https%3A%2F%2Fwww.kenwalger.com%2Fblog%2Fwp-json%2Fwp%2Fv2%2Fposts%2F765&#038;p&#091;images&#093;&#091;0&#093;=https%3A%2F%2Fwww.kenwalger.com%2Fblog%2Fwp-content%2Fuploads%2F2018%2F01%2Fapp-dev.jpg&#038;p&#091;title&#093;=Factoring%20Offline%20Syncing%20into%20your%20App%20Design\" style=\"font-size: 0px;width:48px;height:48px;margin:0;margin-bottom:5px;margin-right:5px\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" alt=\"Facebook\" title=\"Share on Facebook\" class=\"synved-share-image synved-social-image synved-social-image-share\" width=\"48\" height=\"48\" style=\"display: inline;width:48px;height:48px;margin: 0;padding: 0;border: none;box-shadow: none\" src=\"https:\/\/i0.wp.com\/www.kenwalger.com\/blog\/wp-content\/plugins\/social-media-feather\/synved-social\/image\/social\/regular\/96x96\/facebook.png?resize=48%2C48&#038;ssl=1\" \/><\/a><a class=\"synved-social-button synved-social-button-share synved-social-size-48 synved-social-resolution-single synved-social-provider-twitter nolightbox\" data-provider=\"twitter\" target=\"_blank\" rel=\"nofollow\" title=\"Share on Twitter\" href=\"https:\/\/twitter.com\/intent\/tweet?url=https%3A%2F%2Fwww.kenwalger.com%2Fblog%2Fwp-json%2Fwp%2Fv2%2Fposts%2F765&#038;text=Hey%20check%20this%20out\" style=\"font-size: 0px;width:48px;height:48px;margin:0;margin-bottom:5px;margin-right:5px\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" alt=\"twitter\" title=\"Share on Twitter\" class=\"synved-share-image synved-social-image synved-social-image-share\" width=\"48\" height=\"48\" style=\"display: inline;width:48px;height:48px;margin: 0;padding: 0;border: none;box-shadow: none\" src=\"https:\/\/i0.wp.com\/www.kenwalger.com\/blog\/wp-content\/plugins\/social-media-feather\/synved-social\/image\/social\/regular\/96x96\/twitter.png?resize=48%2C48&#038;ssl=1\" \/><\/a><a class=\"synved-social-button synved-social-button-share synved-social-size-48 synved-social-resolution-single synved-social-provider-reddit nolightbox\" data-provider=\"reddit\" target=\"_blank\" rel=\"nofollow\" title=\"Share on Reddit\" href=\"https:\/\/www.reddit.com\/submit?url=https%3A%2F%2Fwww.kenwalger.com%2Fblog%2Fwp-json%2Fwp%2Fv2%2Fposts%2F765&#038;title=Factoring%20Offline%20Syncing%20into%20your%20App%20Design\" style=\"font-size: 0px;width:48px;height:48px;margin:0;margin-bottom:5px;margin-right:5px\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" alt=\"reddit\" title=\"Share on Reddit\" class=\"synved-share-image synved-social-image synved-social-image-share\" width=\"48\" height=\"48\" style=\"display: inline;width:48px;height:48px;margin: 0;padding: 0;border: none;box-shadow: none\" src=\"https:\/\/i0.wp.com\/www.kenwalger.com\/blog\/wp-content\/plugins\/social-media-feather\/synved-social\/image\/social\/regular\/96x96\/reddit.png?resize=48%2C48&#038;ssl=1\" \/><\/a><a class=\"synved-social-button synved-social-button-share synved-social-size-48 synved-social-resolution-single synved-social-provider-linkedin nolightbox\" data-provider=\"linkedin\" target=\"_blank\" rel=\"nofollow\" title=\"Share on Linkedin\" href=\"https:\/\/www.linkedin.com\/shareArticle?mini=true&#038;url=https%3A%2F%2Fwww.kenwalger.com%2Fblog%2Fwp-json%2Fwp%2Fv2%2Fposts%2F765&#038;title=Factoring%20Offline%20Syncing%20into%20your%20App%20Design\" style=\"font-size: 0px;width:48px;height:48px;margin:0;margin-bottom:5px;margin-right:5px\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" alt=\"linkedin\" title=\"Share on Linkedin\" class=\"synved-share-image synved-social-image synved-social-image-share\" width=\"48\" height=\"48\" style=\"display: inline;width:48px;height:48px;margin: 0;padding: 0;border: none;box-shadow: none\" src=\"https:\/\/i0.wp.com\/www.kenwalger.com\/blog\/wp-content\/plugins\/social-media-feather\/synved-social\/image\/social\/regular\/96x96\/linkedin.png?resize=48%2C48&#038;ssl=1\" \/><\/a><a class=\"synved-social-button synved-social-button-share synved-social-size-48 synved-social-resolution-single synved-social-provider-mail nolightbox\" data-provider=\"mail\" rel=\"nofollow\" title=\"Share by email\" href=\"mailto:?subject=Factoring%20Offline%20Syncing%20into%20your%20App%20Design&#038;body=Hey%20check%20this%20out:%20https%3A%2F%2Fwww.kenwalger.com%2Fblog%2Fwp-json%2Fwp%2Fv2%2Fposts%2F765\" style=\"font-size: 0px;width:48px;height:48px;margin:0;margin-bottom:5px\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" alt=\"mail\" title=\"Share by email\" class=\"synved-share-image synved-social-image synved-social-image-share\" width=\"48\" height=\"48\" style=\"display: inline;width:48px;height:48px;margin: 0;padding: 0;border: none;box-shadow: none\" src=\"https:\/\/i0.wp.com\/www.kenwalger.com\/blog\/wp-content\/plugins\/social-media-feather\/synved-social\/image\/social\/regular\/96x96\/mail.png?resize=48%2C48&#038;ssl=1\" \/><\/a>","protected":false},"excerpt":{"rendered":"<p>While most of us are connected to the Internet most of the time, there are still times when we are not online. Just because we are offline doesn\u2019t mean we won\u2019t want to use our apps. Herein lies the problem if you\u2019re developing apps that depend on the Internet to function correctly. We want to &hellip; <a href=\"https:\/\/www.kenwalger.com\/blog\/mobile-development\/factoring-offline-syncing-app-design\/\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &#8220;Factoring Offline Syncing into your App Design&#8221;<\/span><\/a><\/p>\n","protected":false},"author":5,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"pmpro_default_level":"","_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[1225],"tags":[1226,69],"yst_prominent_words":[268,1209,1208,1218,1223,1222,99,1217,1214,1215,1210,1213,1211,1212,1220,424,1219,967,230,1216],"class_list":["post-765","post","type-post","status-publish","format-standard","hentry","category-mobile-development","tag-database-synchronization","tag-security","pmpro-has-access"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p8lx70-cl","jetpack-related-posts":[],"_links":{"self":[{"href":"https:\/\/www.kenwalger.com\/blog\/wp-json\/wp\/v2\/posts\/765","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.kenwalger.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.kenwalger.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.kenwalger.com\/blog\/wp-json\/wp\/v2\/users\/5"}],"replies":[{"embeddable":true,"href":"https:\/\/www.kenwalger.com\/blog\/wp-json\/wp\/v2\/comments?post=765"}],"version-history":[{"count":3,"href":"https:\/\/www.kenwalger.com\/blog\/wp-json\/wp\/v2\/posts\/765\/revisions"}],"predecessor-version":[{"id":770,"href":"https:\/\/www.kenwalger.com\/blog\/wp-json\/wp\/v2\/posts\/765\/revisions\/770"}],"wp:attachment":[{"href":"https:\/\/www.kenwalger.com\/blog\/wp-json\/wp\/v2\/media?parent=765"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.kenwalger.com\/blog\/wp-json\/wp\/v2\/categories?post=765"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.kenwalger.com\/blog\/wp-json\/wp\/v2\/tags?post=765"},{"taxonomy":"yst_prominent_words","embeddable":true,"href":"https:\/\/www.kenwalger.com\/blog\/wp-json\/wp\/v2\/yst_prominent_words?post=765"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}