LoginSignup
0
0

More than 1 year has passed since last update.

[OutSystems]PWAにおけるプラグインの仕組み

Posted at

OutSystemsのモバイルアプリケーションにおいて、プラグインとは、Cordova Pluginをラップしてハードウェアにアクセスする機能を提供するもの。

特定のプラグインは、PWAでも動作するように作られています。

PWAもモバイルアプリケーションとして開発するわけですが、実質WebアプリケーションであるPWA内でどのようにして同じプラグインが動作するのか、実装を追って確認してみました。

現時点(2021/8/6)のプラグイン実装からの確認なので、あとで公式のガイドが出たら、別の作り方が推奨されるかも。

対象は、2021/8/6時点で、公式(PWAでプラグインを使用する)でPWAに対応しているCamera Plugin。

確認環境

Personal Environment(Version 11.12.0 (Build 30002))
Service Studio (Version 11.11.11)
Camera Plugin (Version 7.0.7)

Check Actionの書き方

プラグインを作るときには、そのプラグインを使えるかどうかを判定するためのCheckプラグイン名 Actionを提供することになっています。

実装は以下の通り。PWAのときは黄色に塗ったフローを通ります。
image.png

この例を見ると、

  1. CommonPluginに含まれるIsCordovaDefinedでCordovaが有効(=つまりネイティブ環境で動くモバイルアプリケーション)かを判定する
  2. Cordovaが定義されていないときは常にIsAvailable=Trueを返す
  3. 定義されているときは、これまで通りネイテイブ環境のモバイルアプリケーションに必要な動作をする

という仕組み。

PWAでもネイテイブでも動作させる処理(TakePicture)

実装は以下の通り。PWAのときは黄色に塗ったフローを通ります。
image.png

Cordovaが定義されている(=ネイティブアプリ環境)かどうかで処理を分岐しています。

Cordovaが定義されている(=ネイティブアプリ環境の)場合

従来のプラグイン向けのロジックを「Native_処理名」を名前とするActionに切り出す。
例:TakePictureのネイティブ向け処理はNative_TakePicture Actionへ

image.png

Cordovaが定義されていない(=PWAの)場合

「Web_処理名」を名前とするActionに切り出す。
例:TakePictureのPWA向け処理はWeb_TakePicture Actionへ

PWAではプラグインの機能をWeb APIを利用して実現するため、以下のようにJavaScriptで呼び出すWeb APIが処理の本体となる。

image.png

ここでは、Camera Plugin自体の詳細は書きませんが、大まかに言うと以下のような処理。

  1. 非表示のinputタグを作る(accepts=image/*、capture=camera、type=file)
  2. inputタグをクリックしたら、window.focusでvideoElementを削除する処理を走らせるリスナーを追加する
  3. reactContainer配下のDOMに追加
  4. 追加したvideoElementをclickする(iOSならdispatchEventで)

PWAでは動作しなくてよい or できない処理(ChooseGalleryPicture)

IsCordovaDefinedの結果がFalseであれば何もせずに終了させる。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0