Over a million developers have joined DZone.

This Week in Mobile: Messaging Done the Right Way

DZone's Guide to

This Week in Mobile: Messaging Done the Right Way

The highlight story of the week has to be how Airbnb execute their messaging sync well. There's lessons for us all in there.

· Mobile Zone ·
Free Resource

How many of us have written messaging or chat features in our apps and failed? A lot! And that's why you should pay good attention to Airbnb Engineering's latest article on message sync. There's a bit of everything this week, from Dagger, to your options to fail in Swift.


Integrating messaging into your app is always difficult, and the team at Airbnb have had their share of problems with the feature too. Scaling Mobile Messaging at Airbnb explains how their messaging sync now works, and how they got around those initial problems that caused a less than satisfactory user experience. 

Thinking about bringing in Dagger 2 to your project? Then you should go through this complete guide, with all the references you need to get started. 

When it comes to Kotlin vs Java for Android development, Kotlin seems to win every time, hands down. Here’s the latest article in support of Kotlin for a commercial project. 

While I was playing around with RxJava this week, I found yet another great piece of advice from Dan Lew on how to Load Data from Multiple Sources with RxJava. If you’re ever stuck with something in Rx, his blog should be your first port of call. 

This nice little effect shows you How to Make a Button Morph into a Form.

Some projects worth looking at: 

  • AwesomeQRCode: An awesome QR code generator for Android.
  • AdaptableBottomNavigation: A simpler way for implementing the bottom navigation view on Android.
  • MVPArms: A common architecture for Android application based on MVP, integrating Dagger, RxJava, and Retrofit.
  • bubble-scroll: An animated scroll bar.


You’re probably using @escaping in your code, but if you’re not completely clear why, then read What in the World is an “Escaping Closure” in Swift?

Picking the Right Way of Failing in Swift takes you through some language features that handle failure, from simply returning nil to assert(), precondition() and using throws. Essential reading for API developers. 

Loading Images in iOS Without Dependencies shows how you can avoid libraries and use a few simple lines to load up remote images. It doesn’t work for every single situation, but it’s a good approach. 

Check out this useful tip about chaining closures in Swift. The article even gives you a nice Protocol you can take and implement in your own projects.

Some projects worth looking at: 

  • Komponents: React-inspired UIKit Components. 
  • XcodeColorSense2: An Xcode source editor extension that shows hex color info. 
  • LicensePlist: iOS license plists generator.
  • ShadowImageView: An Apple Music cover picture shadow style image library. 
  • Pastel: Gradient animation effect like Instagram. 


Storyboarding in UX Design is a nice way to give real context to how your app will be used by your customers. Using visuals, the whole story comes to life.

Although most app developers feel they can handle it, design is a real thing that takes lots of time. However, if you want to know enough to get by, check out How to Not Suck at Design: A 5 Minute Guide for the Non-Designer

App Builders Before They Were Famous: WhatsApp’s Jan Koum, gives the backstory behind one of the most popular apps out there. It’s a good series and shows how you have to start from somewhere before the fame and glory. 

See how one designer who got rejected for a post with the Apple Music team went and redesigned it.

Feeling stressed with a deadline but want to prevent any negativity creeping into the team, and hindering progress? Read these tips about Keeping Morale Afloat and (some of) your troubles may be over

ios ,swift ,android ,java ,mobile ,mobile app development

Opinions expressed by DZone contributors are their own.

{{ parent.title || parent.header.title}}

{{ parent.tldr }}

{{ parent.urlSource.name }}