Progressive Web Apps

Last week I had a pleasant acquaintance with Adam Giemza, head of solution architecture and security at DB Schenker AG. He asked me about Progressive web and my opinion to it. Frankly speaking, I had no opinion at all, because I’m specialized more on native apps for iOS and Android. Of course, hybrid apps, mobile first approach, responsive design are the things I heard of and had even a bit experience with them. But what are Progressive web apps? I began to read about it.

The term “progressive web” appeared 2015  to describe web apps taking advantage of features supported by modern browsers, including Service Workers and Web App Manifests. Progressive web apps are:

  • Progressive – Work for every user, regardless of browser choice because they’re built with progressive enhancement as a core tenet.
  • Responsive – Fit any form factor: desktop, mobile, tablet, or forms yet to emerge.
  • Connectivity independent – Service workers allow work offline, or on low quality networks.
  • App-like – Feel like an app to the user with app-style interactions and navigation.
  • Fresh – Always up-to-date thanks to the service worker update process.
  • Safe – Served via HTTPS to prevent snooping and ensure content hasn’t been tampered with.
  • Discoverable – Are identifiable as “applications” thanks to W3C manifests and service worker registration scope allowing search engines to find them.
  • Re-engageable – Make re-engagement easy through features like push notifications.
  • Installable – Allow users to “keep” apps they find most useful on their home screen without the hassle of an app store.
  • Linkable – Easily shared via a URL and do not require complex installation.

As far as I understand the main difference to the hybrid apps, e.g. based on Cordova is that progressive web apps are not wrapped into some mobile application, but are more like a website. It is the web browser features, i.e. service worker and manifest which make these web application look and feel like native apps. And in opposite, the difference to a responsive web site is that progressive web apps can be used offline and look more “native”.

The concept of progressive web apps is very interesting. It is on one hand the next step towards cross platform development. On the other hand it is the step towards app distribution without app stores. I can think of many use cases where a progressive app has more advantages over native implementation for multiple platforms. Some examples of progressive web apps can be found here.

 

Google Analytics for iOS

Once I reported about my experience with HockeyApp a tracking tool for iOS, Android and Windows Apps. Today I tested the abilities of Google Analytics for iOS. Without going deep in details here is the overview of the evaluation results:

  • There are SDKs only for iOS and Android. Tracking of the Windows Apps is not supported.
  • Tracking of the fatal and non fatal exceptions is possible
  • Screen tracking. If desired, the tracking method can be called for example in viewWillAppear. In the dashboard of Google Analytics there is the overview of the called Views.
  • Support for custom events
  • Real time screen end events tracking
  • Dashboard of the App Analytics looks almost same as the dashboard for tracking websites
  • If tracking private user data, be sure to learn about privacy policy and the proper use of the Google Analytics in your app

Multipeer Connectivity

The Multipeer Connectivity APIs, introduced by Apple in iOS 7 is an easy way to start building apps requiring peer-to-peer communication. Nearby devices communicate over infrastructure Wi-Fi networks, peer-to-peer Wi-Fi, and Bluetooth personal area networks. Connected peers are able securely transmit messages, streams, or file resources to other devices.

Evaluation of different aspects of Multipeer Connectivity with iPad Air 2 devices shows surprising results. Discovery and communication between iPad devices works mostly well. However, some shortcomings are to be mentioned here.

  • Establishing connection between peers always requires user interaction. The user has to confirm a connection to other device. There is no way to work with certificates or white lists of devices.
  • The other issue is that the framework does not always repair the broken ad-hoc network correctly. If a peer suddenly leaves the network, it often stays broken. Discovery must be restarted manually.
  • Multipeer Connectivity framework is only available for iOS, macOS and tvOS devices. So if the app has to run also on Android or Windows devices, this framework cannot be used.

To read more about Multipeer Connectivity refer to nshipster and apple’s doc.

HockeyApp in a praxis

hockeyapp_logoHockeyApp is a solution for collecting app crash reports, get feedback from users and distribute your betas. It can be integrated with apps for iOS, Android and Windows. This week I had an opportunity to evaluate it and now want to deal with my experience.

 

 

 

  • Integration into an iOS app is really easy. Using Cocoapods it’s just one entry in your podfile:
    pod 'HockeySDK', :subspecs => ['AllFeaturesLib']

    Be sure to enable AllFeaturesLib if you need a feedback functionality.

  • To start using HockeyApp in your project, you first need to register the app under your HockeyApp account. After doing that, you get an identifier for your app. This one you’ll need in your project
  • With these lines of code you initialize HockeyApp and get it running:
    [[BITHockeyManager sharedHockeyManager] configureWithIdentifier:@"yourHockeyAppAppId";
    //you can add the following line before calling startManager to disable the In-App-Update feature
    [[BITHockeyManager sharedHockeyManager] setDisableUpdateManager:YES];
    // Do some additional configuration if needed here
    [[BITHockeyManager sharedHockeyManager] startManager];
    [[BITHockeyManager sharedHockeyManager].authenticator authenticateInstallation]; // This line is obsolete in the crash only builds
    
  • From now on all crash reports appear  automatically at the backend side
  • To integrate a feedback form  just build in two buttons into your app with corresponding handlers:
    - (IBAction)composeFeedbackAction:(id)sender
    {
        [[BITHockeyManager sharedHockeyManager].feedbackManager showFeedbackComposeView];
    }
    
    - (IBAction)feedbackListAction:(id)sender
    {
        [[BITHockeyManager sharedHockeyManager].feedbackManager showFeedbackListView];
    }
    
  • At the backend the administrator can view user feedbacks and reply them. In the app the user gets automatically notified about new replies.
  • Integration with Jenkins is also a matter of a few minutes. There is a plugin for uploading .ipa files to the HockeyApp. Depending on your needs, this Jenkins-plugin can release the app version immediately into a download area of the HockeyApp. The download area can be accessed then by beta-testers or if you define also by a public.

All in all HockeyApp is a pretty helpful tool. Maybe it’s not a suitable solution for individual developers because of the pricing model, but for companies it can be an attractive alternative.

 

PolterApp ist im App-Store

PolterAppPolterApp steht ab heute bei iTunes zum Download bereit!

Endlich können nicht nur die großen Betriebe, sondern auch die kleinen Unternehmen vom Einsatz elektronischer Medien im Wald profitieren. PolterApp ist die erste App im App-Store die zu einem günstig ist. Alle Funktionen stehen ohne Einschränkungen dauerhaft umsonst zur Verfügung. Zum anderen bietet die PolterApp Flexibilität und Stärken einer Enterprise-App, welche mühelos in bestehende Infrastrukturen integriert werden kann.

Version 1.0 der PolterApp hat sicherlich noch den BETA-Charakter. Asketisches Design, ein oder anderer Schreibfehler ist das was in kürze nachgeholt wird. Viel wichtiger ist, dass die App in unmittelbarer Kommunikation mit Nutzern entsteht und alle Besonderheiten des Einsatzgebiets berücksichtigt. Das war auch der Grund, mit der PolterApp früh genug an den Start zu gehen, um möglichst viel Feedback während laufender Entwicklung zu sammeln.

In der ersten Version bietet PolterApp folgende Funktionen an:
– Übersicht über alle erfassten Polter
– Angabe der Polterbasis Daten, wie etwa Walbesitzer, Förster, Preis etc.
– Sektionsvermessung
– Unbeschränkte Anzahl an Polter-Photos
– Speichern der GPS-Koordinate mit einem Polter. Einsicht des Polters auf Google-Maps

Die Weiterentwicklung der PolterApp läuft kontinuierlich weiter. Ich freue mich auf Euer Feedback und Kommentare!