質問: MonacaクラウドIDEにてiBeaconサンプルを試すべく cordova-plugin-ibeaconをダウンロードの上、Monacaの「cordovaプラグインの管理」にてインポートしました。 ここまでは以下のAsial BLOGを参考にしています。 Galaxy S4(Android 4.4.2) にインストールして実行したところ、iBeaconサンプルのページにある1から6までのアイコンは正常に表示されたのですが、Monacaのコンソールに以下のようなエラーが出力され、iBeaconを認識していないようです。 > > CreateBeacon err:TypeError: Cannot read property 'locationManager' of undefined > > Delegate err: TypeError: Cannot read property 'locationManager' of undefined > > > Beaconは Aplix社のものを用意し、同社の提供サンプルアプリにて正しく認識され、電波強度表示、測距ができています。 MonacaのiBeaconサンプルのページ cordova-plugin-ibeaconは、MonacaクラウドIDEのplugins フォルダ以下に正しく展開されているようですが、サンプル記事にはそこまでの画像/記述がないため正しく展開・設定されているのかどうかを確認できていません。 サンプルコードはいじっていません。 cordova-plugin-ibeaconをアプリに認識させるための何かがたりないのだと思うのですが、ネット上を一日探してもそれらしい情報に行き当たりませんでした。 iBeacon対応アプリはiOS向けに開発されている方が多いと思いますが、 サンプルコードはAndroidでは動かないのでしょうか?
回答: 同じエラーに遭遇し、正しくdeviceready後に実行されるようにしたら解決した、という例を見つけました。 で、 を参考にされたとのことですが、載っているコードをそのまま貼り付けたのでしょうか。 > > DeviceReadyになってから実行してください。 > > > と書かれていますが、この点は問題ありませんか? サンプルプロジェクトのことを忘れていました。確かに、deviceready内に書かれていますね。。 > > ちょっとでもコードが正しく解釈されない場合、推測不能な今回のようなエラーが発生するのでは > > > 前述のIssueの場合、 `onDeviceReady` という関数を渡すつもりが、 `onDeviceReady()` をその場で実行した結果を渡してしまったために、deviceready時に実行したかった処理がすぐさま実行され、実行時エラーになったということです。エラーを直訳すると「undefined の 'locationManager' プロパティを読み取れない」なので、 `cordova.plugins` が undefined (未定義のプロパティを参照したときの値)だったということになります。 なので、私はこれと同じように「何らかの間違いでdevicereadyを待たずに実行している」ことを疑ったのですが、そうでなければ確かに「プラグインを読み込めていない」のかもしれません。