

MonacaクラウドIDEにてiBeaconサンプルを試すべく cordova-plugin-
ibeaconをダウンロードの上、Monacaの「cordovaプラグインの管理」にてインポートしました。

ここまでは以下のAsial BLOGを参考にしています。  
<http://blog.asial.co.jp/1343>

Galaxy S4(Android 4.4.2)
にインストールして実行したところ、iBeaconサンプルのページにある１から６までのアイコンは正常に表示されたのですが、Monacaのコンソールに以下のようなエラーが出力され、iBeaconを認識していないようです。

> CreateBeacon err:TypeError: Cannot read property 'locationManager' of
> undefined  
>  Delegate err: TypeError: Cannot read property 'locationManager' of
> undefined

Beaconは Aplix社のものを用意し、同社の提供サンプルアプリにて正しく認識され、電波強度表示、測距ができています。

MonacaのiBeaconサンプルのページ  
<http://docs.monaca.mobi/cur/ja/sampleapp/samples/ibeacon/>

cordova-plugin-ibeaconは、MonacaクラウドIDEのplugins
フォルダ以下に正しく展開されているようですが、サンプル記事にはそこまでの画像/記述がないため正しく展開・設定されているのかどうかを確認できていません。  
サンプルコードはいじっていません。

cordova-plugin-
ibeaconをアプリに認識させるための何かがたりないのだと思うのですが、ネット上を一日探してもそれらしい情報に行き当たりませんでした。

iBeacon対応アプリはiOS向けに開発されている方が多いと思いますが、  
サンプルコードはAndroidでは動かないのでしょうか？


CC BY-SA 3.0
2015-07-05T20:41:17.527
12057
2015-08-07T08:11:11.370
2015-07-08T02:22:53.623
8000
10408
question
monaca ibeacon
iBeaconのサンプルコードで Cannot read property 'locationManager'


同じエラーに遭遇し、正しくdeviceready後に実行されるようにしたら解決した、という例を見つけました。

<https://github.com/petermetz/cordova-plugin-ibeacon/issues/110>

で、 <http://blog.asial.co.jp/1343> を参考にされたとのことですが、載っているコードをそのまま貼り付けたのでしょうか。

> DeviceReadyになってから実行してください。

と書かれていますが、この点は問題ありませんか？

* * *

サンプルプロジェクトのことを忘れていました。確かに、deviceready内に書かれていますね。。

<https://github.com/monaca/project-
templates/blob/4.1_cordova/24-ibeacon/www/js/app.js#L35>

> ちょっとでもコードが正しく解釈されない場合、推測不能な今回のようなエラーが発生するのでは

前述のIssueの場合、 `onDeviceReady` という関数を渡すつもりが、 `onDeviceReady()`
をその場で実行した結果を渡してしまったために、deviceready時に実行したかった処理がすぐさま実行され、実行時エラーになったということです。エラーを直訳すると「undefined
の 'locationManager' プロパティを読み取れない」なので、 `cordova.plugins` が undefined
（未定義のプロパティを参照したときの値）だったということになります。

なので、私はこれと同じように「何らかの間違いでdevicereadyを待たずに実行している」ことを疑ったのですが、そうでなければ確かに「プラグインを読み込めていない」のかもしれません。


CC BY-SA 3.0
2015-07-08T02:33:07.880
12135
2015-07-08T07:51:26.640
2015-07-08T07:51:26.640
8000
8000
12057
answer


ご回答有難うございます。

以下、ご指摘の点についてです。

□載っているコードをそのまま貼り付けたのでしょうか。  
サンプルプロジェクトをそのまま利用していますので、全体としてコーディング上の欠陥が  
ないはずのものです。  
ご指摘のonDeviceReadyについては、コーディング上にコールバック関数として定義されています。

□参考サイトの情報  
<https://github.com/petermetz/cordova-plugin-ibeacon/issues/110>  
は、検索でヒットしていたので見ていました。  
この解決は、本来、"onDeviceReady" とすべきところを
"onDeviceReady()"としていたためのエラーで、これを修正することによって正常に機能した、という内容ではないかと。。。

上記の場合と同じ、  
CreateBeacon err:TypeError: Cannot read property 'locationManager' of
undefined  
Delegate err: TypeError: Cannot read property 'locationManager' of undefined  
が発生するのは、ちょっとでもコードが正しく解釈されない場合、推測不能な今回のようなエラーが発生するのではないかと想像しています。

※英語版のstackoverflowは、回答者と質問者のキャッチボールがそれらしく区分されているのですが、日本語版では、質問者の投稿をどのようにしていいのか不明だったため、回答欄を利用しています。  
もしかしたら、質問者を識別してくれるのかもしれません。

宜しくお願いします。


CC BY-SA 3.0
2015-07-08T06:40:51.497
12150
2015-07-08T06:40:51.497
10409
12057
answer