Capacitor: from PWA to native app in 5 minutes

A presentation at Devoxx France in April 2019 in Paris, France by Horacio Gonzalez

Slide 1

Slide 1

Capacitor : from PWA to native app in 5 minutes Horacio Gonzalez @LostInBrittany 1 @LostInBrittany #Capacitor @LostInBrittany #Capacitor#DevoxxFr #DevoxxFr

Slide 2

Slide 2

Who am I? Introducing myself and introducing OVH @LostInBrittany #Capacitor @LostInBrittany #Capacitor#DevoxxFr #DevoxxFr

Slide 3

Slide 3

Horacio Gonzalez @LostInBrittany Spaniard lost in Brittany, developer, dreamer and all-around geek Flutter @LostInBrittany #Capacitor #DevoxxFr

Slide 4

Slide 4

OVH : Key Figures 1.3M Customers worldwide in 138 Countries 1.5 Billions euros investment over five years 30 Datacenters (growing) 350k Dedicated Servers 200k Private cloud VMs running 650k Public cloud Instances created in a month 15TB bandwidth capacity 35 Points of presence 4TB Anti DDoS capacity Hosting capacity : 1.3M Physical Servers @LostInBrittany #Capacitor #DevoxxFr

  • 2 500 Employees in 19 countries 20 Years of Innovation

Slide 5

Slide 5

OVH: A Global Leader on Cloud 200k Private cloud VMs running 1 Dedicated IaaS Europe 2018 27 Datacenters Own 15 Tbps Hosting capacity : 1.3M Physical Servers 360k Servers already deployed @LostInBrittany #Capacitor #DevoxxFr Network with 35 PoPs

1.3M Customers in 138 Countries 2020 50 Datacenters

Slide 6

Slide 6

Ranking & Recognition 1st European Cloud Provider* 1st Hosting provider in Europe 1st Provider Microsoft Exchange Certified vCloud Datacenter Certified Kubernetes platform (CNCF) Vmware Global Service Provider 2013-2016 Veeam Best Cloud Partner of the year (2018) * Netcraft 2017 - @LostInBrittany #Capacitor #DevoxxFr

Slide 7

Slide 7

OVH: Our solutions Cloud Web Hosting Mobile Hosting Telecom VPS Containers ▪ Dedicated Server Domain names VoIP Public Cloud Compute ▪ Data Storage Email SMS/Fax Private Cloud ▪ Network and Database CDN Virtual desktop Serveur dédié Security Object Storage Web hosting Cloud HubiC Over theBox ▪ Licences Cloud Desktop Securities MS Office Hybrid Cloud Messaging MS solutions @LostInBrittany #Capacitor #DevoxxFr

Slide 8

Slide 8

Capacitor The Native Bridge for Cross-Platform Web Apps @LostInBrittany #Capacitor @LostInBrittany #Capacitor#DevoxxFr #DevoxxFr

Slide 9

Slide 9

What’s Capacitor? Cross-platform app runtime making it easy to build web apps that run natively on iOS, Android and web @LostInBrittany #Capacitor #DevoxxFr

Slide 10

Slide 10

Spiritual heir to Apache Cordova Evolution, not revolution @LostInBrittany #Capacitor #DevoxxFr

Slide 11

Slide 11

Spiritual heir to Apache Cordova Support for many Cordova plugins @LostInBrittany #Capacitor #DevoxxFr

Slide 12

Slide 12

Extensible and evolutif ● Close to web-standards ● Plugin API ○ Swift on iOS ○ Java on Android ○ JavaScript for the web @LostInBrittany #Capacitor #DevoxxFr

Slide 13

Slide 13

Developer Friendly Easy to get started Works on any framework @LostInBrittany #Capacitor #DevoxxFr

Slide 14

Slide 14

You still need the platform tools Android Studio and/or Xcode to build the native packages @LostInBrittany #Capacitor #DevoxxFr

Slide 15

Slide 15

Weren’t you a PWA advocate? And you are also championing Flutter! Where is the coherence, guy? @LostInBrittany #Capacitor @LostInBrittany #Capacitor#DevoxxFr #DevoxxFr

Slide 16

Slide 16

Well, I am a PWA advocate indeed I rooted for PWA before it was fancy… @LostInBrittany #Capacitor #DevoxxFr

Slide 17

Slide 17

And I know the numbers… Apps drive engagement, web drive visitors… @LostInBrittany #Capacitor #DevoxxFr 20 biggest apps account for 80% of user time

Slide 18

Slide 18

An engineer role is to choose The right tool for the right problem @LostInBrittany #Capacitor #DevoxxFr

Slide 19

Slide 19

If you need super fancy UX 60 FPS, slick animations, an experience more than an app Then go full native And BTW, do it in Flutter @LostInBrittany #Capacitor #DevoxxFr

Slide 20

Slide 20

For more normal needs A well done PWA is simply enough @LostInBrittany #Capacitor #DevoxxFr

Slide 21

Slide 21

But if you need to be in the store? For many reasons, not all objective… @LostInBrittany #Capacitor #DevoxxFr

Slide 22

Slide 22

Hybrid PWA apps The best of two worlds @LostInBrittany #Capacitor #DevoxxFr

Slide 23

Slide 23

Capacitor take your PWA to the store In a simple, quick and painless way @LostInBrittany #Capacitor #DevoxxFr

Slide 24

Slide 24

First steps testing Capacitor Adding Capacitor to an existing app @LostInBrittany #Capacitor @LostInBrittany #Capacitor#DevoxxFr #DevoxxFr

Slide 25

Slide 25

From web to native Giving superpowers to you webapp @LostInBrittany #Capacitor #DevoxxFr

Slide 26

Slide 26

Testing with a real webapp Warp 10 Photon - IDE for Warp 10 @LostInBrittany #Capacitor #DevoxxFr

Slide 27

Slide 27

Step 1 - Add Capacitor to the app ● Install Capacitor cd my-app npm install —save @capacitor/core @capacitor/cli ● Init Capacitor npx c ● Add Android and/or iOS and/or Electron support npx cap add android @LostInBrittany #Capacitor #DevoxxFr

Slide 28

Slide 28

Step 2 - Copy to Android ● Edit capacitor.config.json to choose the built folder ● Copy the built resources to Android npx cap copy ● Launch Android Studio npx cap open android @LostInBrittany #Capacitor #DevoxxFr

Slide 29

Slide 29

Step 3 - Test And our webapp is now a native app @LostInBrittany #Capacitor #DevoxxFr

Slide 30

Slide 30

First test: successful! Capacitor 1 - Scepticism 0 @LostInBrittany #Capacitor #DevoxxFr

Slide 31

Slide 31

The Capacitor example app Nice to explore Capacitor @LostInBrittany #Capacitor @LostInBrittany #Capacitor#DevoxxFr #DevoxxFr

Slide 32

Slide 32

Made by the Ionic team To replace Cordova in Ionic 4 @LostInBrittany #Capacitor #DevoxxFr

Slide 33

Slide 33

Official example built on Ionic Showcasing Ionic 4 @LostInBrittany #Capacitor #DevoxxFr

Slide 34

Slide 34

Let’s try the official example @LostInBrittany #Capacitor #DevoxxFr

Slide 35

Slide 35

Using directly the Capacitor repository Custom built project, not a production app @capacitor/core and native libs loaded from local directory @LostInBrittany #Capacitor #DevoxxFr

Slide 36

Slide 36

Let’s build the Android version Some pre-building and building needed… @LostInBrittany #Capacitor #DevoxxFr

Slide 37

Slide 37

We now have an Android project @LostInBrittany #Capacitor #DevoxxFr

Slide 38

Slide 38

Easy and painless Android app @LostInBrittany #Capacitor #DevoxxFr

Slide 39

Slide 39

And in PWA mode? Some elements haven’t web implementation (yet?) @LostInBrittany #Capacitor #DevoxxFr

Slide 40

Slide 40

But it still works! It fails gracefully for unsupported plugins @LostInBrittany #Capacitor #DevoxxFr

Slide 41

Slide 41

Second test: successful! Capacitor 2 - Scepticism 0 @LostInBrittany #Capacitor #DevoxxFr

Slide 42

Slide 42

Let’s try something harder Stencil & capacitor @LostInBrittany #Capacitor @LostInBrittany #Capacitor#DevoxxFr #DevoxxFr

Slide 43

Slide 43

Capacitor without Ionic I want to use it Capacitor with my own toolset @LostInBrittany #Capacitor #DevoxxFr

Slide 44

Slide 44

I’m a Web Components guy And I speak a lot about Polymer @LostInBrittany #Capacitor #DevoxxFr

Slide 45

Slide 45

But Polymer is in a transition phase Polymer 2.x : bower based Polymer 3: npm based but recommended only for legacy LitElement: the new, lightweight, blazing fast library by Polymer team @LostInBrittany #Capacitor #DevoxxFr

Slide 46

Slide 46

So what to use? Stencil, of course! The magical, reusable web component compiler @LostInBrittany #Capacitor #DevoxxFr

Slide 47

Slide 47

Let’s begin with a simple example A Camera app, working well on web mode Using standard Media Capture and Streams API @LostInBrittany #Capacitor #DevoxxFr

Slide 48

Slide 48

Let’s charge it with Capacitor We want the same behavior But now in Android, iOS, Electron AND web @LostInBrittany #Capacitor #DevoxxFr

Slide 49

Slide 49

And does it work? Yes it does… in native mode only! @LostInBrittany #Capacitor #DevoxxFr

Slide 50

Slide 50

But not in PWA mode :( And a big question: why? @LostInBrittany #Capacitor #DevoxxFr

Slide 51

Slide 51

Well, let’s spot the differences… Searching on the example code hmmmm, @ionic/pwa-elements, what’s that? @LostInBrittany #Capacitor #DevoxxFr

Slide 52

Slide 52

@ionic/pwa-elements Web-based alternatives for some Capacitor plugins @LostInBrittany #Capacitor #DevoxxFr

Slide 53

Slide 53

Adding @ionic/pwa-elements Simply install them: npm install @ionic/pwa-elements And then import them: import ‘@ionic/pwa-elements’; @LostInBrittany #Capacitor #DevoxxFr

Slide 54

Slide 54

And then… It’s a kind of magic! @LostInBrittany #Capacitor #DevoxxFr

Slide 55

Slide 55

On Android and Web @LostInBrittany #Capacitor #DevoxxFr

Slide 56

Slide 56

Second test: successful! Capacitor 3 - Scepticism 0 @LostInBrittany #Capacitor #DevoxxFr

Slide 57

Slide 57

And in Real Life? Because examples are examples… @LostInBrittany #Capacitor @LostInBrittany #Capacitor#DevoxxFr #DevoxxFr

Slide 58

Slide 58

Use case 1: Putting PWA into store It simply works, easy and painless! @LostInBrittany #Capacitor #DevoxxFr

Slide 59

Slide 59

Use case 2: Progressive enhancing Giving your PWA an extra P when going native @LostInBrittany #Capacitor #DevoxxFr

Slide 60

Slide 60

And Capacitor already works A true winner @LostInBrittany #Capacitor #DevoxxFr

Slide 61

Slide 61

Conclusions Capacitor or not? @LostInBrittany #Capacitor @LostInBrittany #Capacitor#DevoxxFr #DevoxxFr

Slide 62

Slide 62

Still fairly recent There are small glitches Doc could be more detailed, with more examples @LostInBrittany #Capacitor #DevoxxFr

Slide 63

Slide 63

Easy to use Friendlier than Cordova @LostInBrittany #Capacitor #DevoxxFr

Slide 64

Slide 64

Yet extensible You can use existing Cordova plugins @LostInBrittany #Capacitor #DevoxxFr

Slide 65

Slide 65

Not opinionated Easy to use in any framework Easy to integrate in any dev toolchain @LostInBrittany #Capacitor #DevoxxFr

Slide 66

Slide 66

Thank you! @LostInBrittany #Capacitor #DevoxxFr