With the new plugin created, you can begin implementing functionality across a variety of platforms.
Each plugin comes with some TypeScript files that provide typing to TypeScript consumers of your plugin.
Starting with the TypeScript interface is a good way to build out the API for your plugin. For example,
here’s the default interface for our Plugin located in
src/definitions.ts
:
declare module '@capacitor/core' {
interface PluginRegistry {
Echo: EchoPlugin;
}
}
export interface EchoPlugin {
echo(options: { value: string }): Promise<{ value: string }>;
}
To implement new functionality in your plugin, begin by defining a new function in the exported interface:
export interface EchoPlugin {
echo(options: { value: string }): Promise<{ value: string }>;
openMap(location: { latitude: number; longitude: number }): Promise<void>;
}
Implement the web implementation in src/web.ts
:
async openMap(location: { latitude: number, longitude: number}): Promise<void> {
// logic here
}
To compile the plugin, navigate into the plugin directory then run:
$ npm run build
Implement
Android functionality in
android/src/main/[nested folders]/PluginName.java
:
@PluginMethod()
public void openMap(PluginCall call) {
Double latitude = call.getDouble("latitude");
Double longitude = call.getDouble("longitude");
// more logic
}
Implement
iOS functionality in
ios/Plugin/Plugin.swift
:
@objc func openMap(_ call: CAPPluginCall) {
let latitude = call.getString("latitude")
let longitude = call.getNumber("longitude")
// more logic
}
Remember to export the plugin to Capacitor (to make it aware of the plugin) on iOS and Android.
To test the plugin locally while developing it, link the plugin folder to your app project using the npm link command.
First, within the plugin folder, run:
$ npm link
Then, within the project that will test the plugin, run:
$ npm link plugin-name
$ npm install plugin-name
The project’s package.json
file now shows the plugin package link in the dependencies list:
"my-plugin": "file:my-plugin",
Finally, run npx cap sync
to make the native projects aware of your plugin. If it was detected correctly, it will print something similar to:
Found 1 Capacitor plugin for android: my-plugin (0.0.1)
Once you’re done with local testing, be sure to unlink the plugin. Otherwise, subsequent
npm install
s will install the local plugin, not the published version on npm (assuming you publish it).
First, run
npm unlink --no-save plugin-name
in the app project folder.
Next, run
npm unlink
in the plugin folder.
Whenever you are ready to publish your plugin, just use:
npm publish
This will build the JS portion of your plugin and publish the rest of your plugin files to npm.
Your package can now be installed using
npm install your-plugin
in any Capacitor app.