ionic(cordova)でのプラグイン開発のながれメモ
開発のながれ
1. 新規プロジェクト作成(既存のプロジェクトに追加する場合は不要)
2. プラグインの開発
必要なディレクトリとファイルを作成
$ tree plugins-dev/
plugins-dev/
└── plugin-sample
├── plugin.xml
├── src
│ ├── android
│ │ └── Sample.java
│ └── ios
│ └── Sample.swift
└── www
└── sample.js3. 上記のファイルを編集してプラグイン開発
4. 作成したプラグインをプロジェクトに追加
5. プログラム(js)からプラグインを呼び出すようにしたり
プラグインの修正は以下を繰り返す
・プラグインを修正
・プラグインを削除して追加
・動作確認(自分の場合は、xcodeまたはandroid studioでビルドしてる)
実装 - iOS
新規プロジェクト作成
$ ionic start SamplePlugin blank
必要なフォルダを作成
# プラグイン開発用フォルダ $ mkdir plugins-dev # 開発するプラグイン用のフォルダ $ mkdir plugins-dev/plugin-sample # ネイティブのコード用のフォルダ $ mkdir plugins-dev/plugin-sample/src $ mkdir plugins-dev/plugin-sample/src/ios # Javascript用のフォルダ $ mkdir plugins-dev/plugin-sample/www
必要なファイルを作成
plugin-dev/plugin-sample/plugin.xml
<?xml version="1.0" encoding="UTF-8"?>
<plugin xmlns="http://apache.org/cordova/ns/plugins/1.0"
id="plugin-sample"
version="0.1">
<name>Sample</name>
<description>Sample Plugin</description>
<js-module src="www/sample.js">
<!-- 呼び出す時の名前 -->
<clobbers target="sample" />
</js-module>
<!-- iOS -->
<platform name="ios">
<config-file target="config.xml" parent="/*">
<feature name="Sample">
<param name="ios-package" value="Sample" />
</feature>
</config-file>
<source-file src="src/ios/Sample.swift" />
</platform>
</plugin>plugins-dev/plugin-sample/www/sample.js
'use strict';
var exec = require('cordova/exec');
var Sample = {
initialize: function(param, onSuccess, onFail) {
return exec(onSuccess, onFail, 'Sample', 'initialize', [param]);
}
};
module.exports = Sample;plugins-dev/plugin-sample/src/ios/Sample.swift
import Foundation
@objc(Sample) class Sample : CDVPlugin {
func initialize(_ command: CDVInvokedUrlCommand) {
// パラメータの取得
//command.arguments
// 正常
let result = CDVPluginResult(status: CDVCommandStatus_OK)
commandDelegate.send(result, callbackId:command.callbackId)
}
}
プラグインをプロジェクトに追加
# 追加 $ ionic plugin add plugins-dev/plugin-sample # 確認 $ ionic plugin ls ・・・ cordova-plugin-console 1.0.6 "Console" cordova-plugin-device 1.1.5 "Device" cordova-plugin-splashscreen 4.0.2 "Splashscreen" cordova-plugin-statusbar 2.2.2 "StatusBar" cordova-plugin-whitelist 1.3.2 "Whitelist" ionic-plugin-keyboard 2.2.1 "Keyboard" plugin-sample 0.1 "Sample" # ★今回追加したプラグイン
プラグインを呼び出す部分の実装
www/js/app.js
angular.module('starter', ['ionic'])
.run(function($ionicPlatform) {
$ionicPlatform.ready(function() {
・・・
// プラグイン呼び出し
sample.initialize({
api_key: "1234567890"
});
});
})
動作確認
$ ionic prepare # platforms/ios以下に反映されるのでSamplePlugin.xcodeprojファイルを開いてビルド
実装 - android
プロジェクトにandroidを追加
$ ionic platform add android # 確認 $ ionic platform ls ・・・ Installed platforms: android 6.1.2 ios 4.1.1 Available platforms: ・・・
android用のプラグインを開発
plugin-dev/plugin-sample/plugin.xml
<?xml version="1.0" encoding="UTF-8"?>
<plugin xmlns="http://apache.org/cordova/ns/plugins/1.0"
id="plugin-sample"
version="0.1">
・・・
<!-- Android -->
<platform name="android">
<config-file target="res/xml/config.xml" parent="/*">
<feature name="Sample">
<param name="android-package" value="plugin.sample.Sample"/>
</feature>
</config-file>
<source-file src="src/android/Sample.java" target-dir="src/plugin/sample" />
</platform>
</plugin>plugins-dev/plugin-sample/src/android/Sample.java
package plugin.sample;
import org.apache.cordova.*;
import org.json.JSONArray;
import org.json.JSONException;
public class Sample extends CordovaPlugin {
@Override
public boolean execute(String action, JSONArray data, CallbackContext callbackContext) throws JSONException {
if (action.equals("initialize")) {
// パラメータ
//data.getString
// 正常
callbackContext.success();
return true;
} else {
return false;
}
}
}
プラグインの修正をプロジェクトへ反映
# 1度削除 $ ionic plugin rm plugin-sample # 再度入れ直す $ ionic plugin add plugins-dev/plugin-sample
動作確認
$ ionic prepare # platforms/androidに反映されるのでこれをAndroid Stduioから開いてビルド
おわりに
とりあえず基本的な流れだけまとめた。実際にはネイティブ向けに公開されているSDKのプラグインを開発することになると思うので、SDKの組み込みとかが入ってくると思うので次回まとめてみる。
参考URL
http://kinsentansa.blogspot.jp/2015/09/swiftcordovaionicplugin.html
http://qiita.com/betchi/items/f9efc82c1bc051a2f518