CordovaCallNumberPlugin を使って電話発信と連動処理

CordovaCallNumberPlugin を使うと、Cordova アプリから電話発信ができ、さらに電話発信後に任意のコールバック関数を実行することができる。

プラグインを使わない電話発信の方法

その前に、プラグインを使わなくても電話発信だけは可能なことを紹介しておく。

一つは、数字の羅列を電場番号と見なして自動的にリンク化させる方法。この場合はページ中に直接「0120999999」のような電場番号の文字列を書いておくだけで、自動的にリンクになり、電話発信が可能になる。もしくは以下のように meta 要素を明示的に指定しても良い。

<meta name="format-detection" content="telephone=yes">

ただし、このやり方だとどのタイミングで電話番号と見なしてもらえるのか分かりづらく、逆に電話番号ではない文字列まで誤認識されるケースも多いため、通常は telephone=no として自動リンクを防ぐ方が主流。

もう一つは、tel: スキームを使ってリンクを明示的に貼る方法。

<a href="tel:0120999999">フリーダイヤルに電話する</a>

これは電話番号の自動リンクを無効にしていても動くので問題ない。

これらのやり方でも電話発信を促すことはできるが、電話発信に絡めて任意の処理を行う、といったトリガーが作りづらい。そこで CallNumber プラグインを使う。

CallNumber プラグインを使う

まずはプラグインを以下のようにインストール。

$ cordova plugin add https://github.com/Rohfosho/CordovaCallNumberPlugin.git

次に、以下のような関数を作ることで電話発信と電話発信後のコールバックが実行できる。

window.plugins.CallNumber.callNumber(function(result) {
  console.log('成功', result);
}, function(error) {
  console.log('失敗', error);
}, '0120999999', true);

第1引数の関数が、電話発信に成功した時に実行されるコールバック。「電話発信に成功」といっても、Cordova アプリから「電話」アプリに移動したら成功と見なされるだけなので、相手が電話に出なかったとか、応答前に自分から電話を切ったりした場合でも成功扱いになる。

第2引数はエラー時の関数。例えば機内モードにした状態でこの API が実行されると、機内モードをオフにするかのダイアログが表示され、この後に電話アプリに遷移しないため、エラー扱いとなる。

第3引数がかけたい電話番号。数字のみだが文字列で渡すこと。

第4引数は bypassAppChooser といって、電話をかけるアプリの選択ダイアログを無視するオプションで、Android 向けのオプション。iOS の場合のネイティブコードは第4引数を受け取ってもいないので未指定でも大丈夫。


電話番号はテキストボックスから入力してもらうだとか、データ一覧から動的に追加するとかして、任意の電話番号に発信をちゃんと行ったら「この人はちゃんと電話をかけようとしました」的な作業ログを残す、といった業務アプリを作ったりできそう。

成功時のコールバック関数が実行される条件にやや難があるが、こんなもんだろう。