Need help upgrading to Ionic Framework 4.0? Get assistance with our Enterprise Migration Services EXPLORE NOW

Using Native Plugins in the Browser

Ionic Native comes with over 130 mobile Native SDK plugins that make it possible to build powerful Ionic apps that take full advantage of Native mobile SDKs on iOS, Android, and beyond.

Historically, it was difficult to test native functionality in the browser, requiring Ionic developers to test on a physical device or emulator, a rather slow process.

Ionic Native 3.0 now allows developers to mock and use native plugins in the browser through a simple override mechanic, making it easy to provide testing data from a sensor, or to access a native-only API such as HealthKit.

This means that a large majority of an Ionic app can now be built entirely in the browser without deploying to device or emulator. A level of development speed unheard of in mobile.

Mocking Plugins

To use an Ionic Native plugin in the browser and ionic serve session, you just need to extend the original plugin class and override the methods you’d like to mock.

Let’s try mocking the Camera plugin to return an image instead of using the native Camera which may not be available outside of a device context.

First import the Camera class in our src/app/app.module.ts file:

import { Camera } from '@ionic-native/camera';

Then create a new class that extends the Camera class with a mock implementation:

class CameraMock extends Camera {
  getPicture(options) {
    return new Promise((resolve, reject) => {
      resolve("BASE_64_ENCODED_DATA_GOES_HERE");
    })
  }
}

Finally, override the previous Camera class in our providers for this module:

providers: [
  { provide: Camera, useClass: CameraMock }
]

Here’s the full example:

import { NgModule, ErrorHandler } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { IonicApp, IonicModule, IonicErrorHandler } from 'ionic-angular';
import { MyApp } from './app.component';
import { HomePage } from '../pages/home/home';

import { Camera } from '@ionic-native/camera';

class CameraMock extends Camera {
  getPicture(options) {
    return new Promise((resolve, reject) => {
      resolve("BASE_64_ENCODED_DATA_GOES_HERE");
    })
  }
}

@NgModule({
  declarations: [
    MyApp,
    HomePage
  ],
  imports: [
    BrowserModule,
    IonicModule.forRoot(MyApp)
  ],
  bootstrap: [IonicApp],
  entryComponents: [
    MyApp,
    HomePage
  ],
  providers: [
    {provide: ErrorHandler, useClass: IonicErrorHandler},
    { provide: Camera, useClass: CameraMock }
  ]
})
export class AppModule {}

Where to go from here

The Camera example above shows the pattern for overriding and mocking plugins. Pick any plugin available in Ionic Native 3.0 or above, import it, then provide a custom overriding provider which will be called instead of the native implementation.

In this provider, custom data can be provided for quick testing. Some ideas include returning test barcode data from BarcodeScanner.scan(), implementing a fake connection and data transfer system for a device using BluetoothSerial, or implement a finger print scanning flow for iOS and Android by overriding TouchID and AndroidFingerprintAuth.

API

Native

General