Firefox OS 1.5 の新機能 Find My Device を見てみた
以前から気になっていた機能の Where is my Fox? (WMF) が Find My Device と名前を改めて Firefox OS 1.5 に入っていました。
Where's My Fox... 気になる。。。 / “Firefox OS Advent Calendar 2013 – 12/10 | Mozilla Developer Street (modest)” http://t.co/XHDKXTKcFh
— ひらとり (flatbirdH) (@flatbirdH) 2013, 12月 10
iPhone でいうところの Find My iPhone や Android の Android Device Manager にあたる機能です。
Firefox OS の設定に "Find My iPhone" が追加されています。早速アカウントにサインインして機能を有効にしてみました。
・・・が、このポータルサイト FindMyDevice.com (http://findmydevice.mozilla.com) がまだオープンしておらず、残念ながらまだ利用できないようです。
ちなみに、この URL はこのあたりにハードコードされています。また、こちらの設定にはテスト用のサーバの URL らしきものもあります。
MozillaWiki によると、リモートロック ("lock")、位置探索 ("track")、着信音を鳴らす ("ring")、リモートワイプ ("erase") といったコマンドが利用できるようです。
Find My Device アプリ
App Manager で Firefox OS 1.5 のシミュレータを見てみると、アプリ一覧に "Find My Device" が見つかりました。アイコンがありませんね。
マニフェストファイルを見てみると以下のようになっていました。
- アイコン ("icons") が設定されていない。
- 認定アプリ ("type": "certified") である。
- システムアプリ ("role": "system") で、ホーム画面に表示されない。
- パーミッションの使用:
- alarms
- device-storage ('sdcard', 'pictures', 'videos', 'music', 'apps')
- geolocation
- power
- permissions
- push
- settings
- systemXHR
- system アプリと Inter-App Communication API で通信する。(参考: 関西FirefoxOS勉強会6thGiG「アプリ間通信)
UI は設定画面(=Settings アプリ) のみで、サーバからの Push を受けて SystemXHR でコマンドを取得、Geolocation で位置情報を取得し、Device Storage を消去する、といった挙動が見えてきます。
各コマンドの処理
各コマンドに対して行う処理をコードで見てみました。
位置探索 (track)
- track のコード:
- Geolocation.watchPosition() で位置情報を監視して随時サーバに投げる。
- パラメータ duration (継続時間) の値が 0 ならトラッキングを停止する。それ以外の値は現在の実装では単に無視している。
リモートワイプ (erase)
- erase のコード:
- DeviceStorage API で 'apps', 'pictures', 'sdcard', 'videos', 'music' の全ファイルをワイプする。
- DeviceStorage.enumerate() で各ファイルを DeviceStorage.delete() する。
- 最後に PowerManager (navigator.mozPower) の PowerManager.factoryReset() (要 certified) でファクトリーリセットを行う。
リモートロック (lock)
- lock のコード:
- ロック画面へのメッセージ表示やリモートでのパスコードの設定もサポート。
- Settings API で lockscreen 設定を以下の値に変更。
var settings = {
'lockscreen.enabled': true,
'lockscreen.notifications-preview.enabled': false,
'lockscreen.passcode-lock.enabled': true,
'lockscreen.lock-immediately': true
};
着信音を鳴らす (ring)
- ring のコード:
- 設定の "dialer.ringtone" にセットされている音声ファイルを Audio API でループで流す。
- "audio.volume.content" で音声はマックスに変更!
以上です。