[Adobe AIR Advent Calendar 2013 14日目] ローカル通知のANEを使ってみよう

投稿者: | 2013/12/19

この記事は「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の詳細は公式サイトとドキュメントをご参照くださいませ。

以上です。お疲れ様でした。