0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Monacaクイックビューアで開発する際の注意点

Last updated at Posted at 2023-01-18

iOS版Monacaデバッガー配信停止に伴って、新しくMonacaでリリースされたのが「Monacaクイックビューア」です。

一見するとUIはMonacaデバッガーと同じように見えますが、幾つかの違いがあります。本記事ではその相違点について紹介しつつ、開発時の回避策を解説します。

Cordovaプラグインは使えません

Monacaデバッガーでは、以下のプラグインがデフォルトで組み込まれています。

  • バーコードスキャナー
  • バッテリー
  • カメラ
  • キャプチャー
  • デバイス
  • デバイスモーション
  • デバイスオリエンテーション
  • ファイル
  • ジオロケーション
  • アプリ内ブラウザ
  • メディア
  • ネットワーク情報
  • ローカル通知
  • バイブレーション

これらの機能の幾つかについてはHTML APIで代替処理ができます(位置情報、カメラなど)。ただ、Cordovaプラグインとは動作が異なる可能性があるので注意してください。

Monacaアプリとしてビルドしている場合と、Monacaクイックビューアで動作している際の違いは、 window.cordova 変数の有無をチェックするのが良いでしょう。

if (window.cordova) {
  // Monacaアプリ、カスタムデバッガービルドとして動作している
  // Cordovaプラグインが使える
} else {
  // Monacaクイックビューア、Web IDEのプレビューとして動作している
  // Cordovaプラグインは使えない
} 

HTML APIで代替できるものについては、この判定を使って処理分けしたり、Monacaクイックビューアでは動作させないと言った仕組みにする必要があります。

例えばNCMBのプッシュ通知プラグインもMonacaクイックビューアでは利用できませんので、 window.NCMB.monaca.setDeviceToken のような関数へのアクセスはエラーになってしまいます。

利用開始できるイベントが異なります

Monacaアプリの場合、画面のDOM構築に加えてCordovaプラグインの準備完了を待ちます。そのイベントが deviceready です。対してMonacaクイックビューアの場合はDOM構築のみになるので、 DOMContentLoaded イベントのみになります。Monacaクイックビューアで deviceready を待ってもイベントが呼ばれないので注意してください。

お勧めの方法としては、 window.cordova の有無でイベントを変えることです。

const event = window.cordova ? 'deviceready' : 'DOMContentLoaded';
document.addEventListener(event, e => {
  // 処理を記述
});

なお、Onsen UIなどを使っている場合には ons.ready などあらかじめ指定されているものを利用すれば問題ありません。

SafariとwkWebViewでは利用できる機能に差異があります

MonacaクイックビューアをSafariで開いて利用する方は多いかと思います。それに対して、MonacaアプリはレンダリングエンジンにwkWebViewを使います。この時の機能差は意識して開発を行う必要があります。

具体的にどこが違うのか判定が難しいのですが、例えばSafariはフルスクリーン表示ができますが、wkWebViewを使ったブラウザ(Chromeなど)ではできません。Safariは動画のインライン再生ができますが、Chromeでは最大表示になってしまいます。

ChromeはwkWebViewを使っているはずなので、MonacaクイックビューアはChromeで利用するのがお勧めです。Safariで利用できている機能がMonacaアプリで使えないと言った動作齟齬を極力なくした方が、開発しやすいでしょう。

CORS制限/CSPには注意してください

Webアプリケーションが常に気にしなければならないのがCORS制限です。fetch関数では外部サイトへのPOSTであったり、任意のコンテンツをGETで取得するのに制限があります。

Cordovaプラグインであれば cordova-plugin-advanced-httpcordova-plugin-fetch が利用できますが、Monacaクイックビューアでは使えないので問題になります。これの解決策はMonacaカスタムデバッガービルドを使うほかないでしょう。

また、WebアプリではCSP(Content Security Policy)も問題になります。HTTPSでは使える機能が、MonacaアプリのURLスキーマでは使えない場合があります。これも分かりやすい一覧などがある訳ではないので、実際にやってみないと分からないのですが…なるべく早い段階でカスタムデバッガービルドを使った方が動作差異をなくせます。

まとめ

Monacaクイックビューアは簡易的な動作確認用ツール、くらいに考えておく方が良いでしょう。iOSアプリをちゃんと開発するならば、早めにカスタムデバッガービルドを使うのがお勧めです。

なお、NCMBのプッシュ通知プラグインはカスタムデバッガービルドでは正しく動作しない(プッシュ通知受信時に期待したハンドリングができない)のでご注意ください(参考: ニフクラ mobile backendを使ってAndroidへプッシュ通知を送る手順を一から紹介 – モナカプレス)。

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?