この記事は「Adobe AIR Advent Calendar 2013」の14日目の記事です。
14日目過ぎ(ry
前回は完全にアレな記事だったので、今回はちゃんとします。はい。
ローカル通知
AIRではANEを使うことによって実装することができます。でも、自分でANEを作るのは大変ですよね。っていうことで有志の方が作ったものを使っちゃいましょう。
お勧めのANE
下記のANEが結構至れり尽くせりです。
http://juankpro.com/wordpress/2012/06/17/using-the-local-notification-ane-on-ios/
AndroidとiOS両対応で、通知をタップした際のイベントまで発信してくれます。iOSはサウンドの対応までしてくれており、とてもありがたいANEとなってます。
今回は簡単な紹介のみさせていただきます。詳しくは上記のサイトを御覧ください。
事前準備
注意:Androidの場合、binフォルダ内のANEだとうまく設定できない可能性があります。その際はsampleからaneファイルを持ってくれば大丈夫なようですが、タイムスタンプ見る限りだと最新版でない可能性があるので、ご注意ください。
ファイル一式は以下の場所に有りますので、git cloneしてください。
https://bitbucket.org/juankpro/jklocalnotifications-ane
まずは、いつもどおりaneファイルをリンクさせましょう。そして、NotificationManagerをインスタンス化します。後述するイベントを受信したい場合は、リスナーをつけておきましょう。
_notificationManager = new NotificationManager(); _notificationManager.addEventListener(NotificationEvent.NOTIFICATION_ACTION, notificationActionHandler);
Androidの場合は、必要であれば、以下の文をapp.xmlのmanifest要素内に入れてください。
<uses-permission android:name="android.permission.VIBRATE"/> <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/> <application> <service android:name="com.juankpro.ane.localnotif.LocalNotificationIntentService"/> <receiver android:name="com.juankpro.ane.localnotif.AlarmIntentService" /> <receiver android:name="com.juankpro.ane.localnotif.AlarmRestoreOnBoot" > <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED" /> </intent-filter> </receiver> </application>
ローカル通知のセット
var code:String = "hogehoge"; var fireDate:Date = new Date(); fireDate.seconds += 5; var notification:Notification = new Notification(); notification.actionData = {hoge:"hoge", moge:"moge"}; notification.body = "ほげほげ"; notification.fireDate = fireDate; _notificationManager.notifyUser(code, notification);
今から5秒後に通知が来るように設定するためのコードです。
これがだいたい最低限と考えてもらっていいですが、actionDataは後述するイベントで受け取る必要がないのであれば、別に要らないです。
注意点として、bodyに何も入れていないと、iOSでは通知が出てこないようですのでご注意ください。(音は鳴ります)
イベント通知
通知をタップすると、NotificationManagerからNotificationEventがディスパッチされます。これにはnotificationCodeとactionDataが格納されています。前者は通知をセットする際に使用したnotifyUserメソッドの第一引数の文字列、後者は上記で取り上げたnotificationインスタンスにくっつけるactionDataです。
これらを扱うことによって、通知を設定する際に判別用データを仕込んで、通知の種類などを判別したりすることができます。
カスタムサウンド(iOSのみ)
notification.soundNameでファイルのパスを指定してあげると、ローカル通知の音として鳴ってくれます。但し、30秒までの音楽ファイルで、形式はcaf,aiff,wavのみです。
ファイルパスは、ディレクトリ階層も認識してくれます。(例:assets/noticesound/notice.caf)
終わり
他にもバイブレーション機能やリピート設定とかいろいろありますが、割愛します。基本的に、ネイティブを扱うという意味で、Android、iOSのローカル通知の仕様を一読されることをお勧めします。
また、ANEの詳細は公式サイトとドキュメントをご参照くださいませ。
以上です。お疲れ様でした。