わふうの人が書いてます。

iOSアプリケーション開発、BLEのファームウェアとハードウェア試作のフリーランスエンジニア。

Apple Notification Center Serviceの解説

Apple Notification Center Service とは

Appleは、Bluetooth LEにいち早く対応し、またその利用領域を毎年拡大しています。

2011年に世界で初めてBluetooth Low Energyに対応したiPhone4sと同時に公開されたiOS5は、CoreBluetoothフレームワークで一般アプリ開発者に、Bluetooth LE周辺機器との接続を開放しました。翌年のiOS6は、セントラル・ロールに加えて、ペリフェラル・ロールが追加されました。

iOS5とiOS6は、個別のアプリケーションとBluetooth LE機器との接続だけでしたが、iOS7からは、iOS自体がBluetooth LE機器およびBluetooth LEを利用したサービスに対応しはじめました。

iOS7から提供されたiOSが担当するBluetooth LEの機能は:

  • Apple Notification Center Service (ANCS)
  • iBeacon
  • Gameコントローラ (MFi)
  • HID over BLE(キーボードなどの入力装置)

です。今回はこのうちの、ANCSについて解説します。

Appleのドキュメントに詳細があります: https://developer.apple.com/library/ios/documentation/CoreBluetooth/Reference/AppleNotificationCenterServiceSpecification/

Apple Notification Center Serviceの目的

The Apple Notification Center Service (ANCS)の目的は、Bluetooth LEでiOSデバイスに接続するBluetoothアクセサリーに、iOSが出力する様々な通知(メールやFacebookなどの新着、電話着信など)にアクセスする簡便な方法を提供することです。

ANCSの設計原則は、Simplicity, Efficienty そして Scalabilityの3つです。LEDが光るだけの簡単なアクセサリから、液晶表示器がある強力な周辺機器まで、様々な周辺デバイスにサービスを提供します。

ANCSは、Bluetooth LEの規格にあるGATTを使います。特定の、閉じた技術は使っていません。GATTクライアントとして振る舞う周辺機器は、iOSデバイスが提供するANCSを通して、通知サービスの発見と接続そしてアクセスができます。

具体的になにができるのか

iOSの通知の取得と、その通知の詳細情報の取得ができます。いま定義されているイベントには:

  • 電話着信
  • 不在着信
  • 音声メール
  • ソーシャル
  • スケジュール
  • 電子メール
  • ニュース
  • 健康とフィットネス
  • ビジネスとファイナンス
  • 位置
  • エンターテイメント

があります。また、特定のアプリケーションを指定して、詳細情報を取り出す仕組みがあります。

最も簡単なアクセサリは、電話やメール着信でLEDが光るアクセサリでしょう。昔、携帯電話の電波信号で光るLEDアクセサリがありました。電波の周波数が様々になった現代では実現できないアクセサリになっていましたが、ANCSを使うことで、あの当時にあったアクセサリを現代でもう一度実現できます。

そして腕時計型などのウェアブル機器との連携に不可欠な機能です。単体で3G網に接続できない機器は、スマートフォンをハブとします。スマートフォンからの通知の仕組みとしてANCSは、いかなるアプリケーションにも柔軟に対応できる仕組みとなっています。

サンプルコード

詳しくはサンプルコード: https://github.com/reinforce-lab/CoreBluetooth_samples/tree/master/ANCS/ を参照してください。

このサンプルを試すには、iOS6の端末と、iOS7の端末が必要です。アプリをインストールしたら、まずiOS6の端末で、右のNCというタブを選択して、Connectボタンを押します。そしてiOS7の端末で、左のNPのタブを選択して、Advertisingボタンを押します。しばらくすれば、iOS6の端末で接続が完了するでしょう。デバッグコンソールに、通知情報などが表示されます。

iOS7でのCoreBluetoothは、ANCSをフィルタしてアプリに通知しません。このためNCはiOS6の端末でのみ、実装できます。iOS7のANCSに接続するには、まずiOS7側でアドバタイジングを開始します。このとき、なにもサービスを指定する必要はありません。iOS7の端末に接続できれば、ANCSのサービスが検索できます。

あとは、Appleのドキュメント通りです。

モジュールでANCSのクライアントを開発するには

Nordic semiconductor社のnRF51822の開発SDKに、experimentalですが、ANCSのサンプルコードがあります。nRF Goの開発ボード用で表示周りがLCDを利用するコードになっています。PCA10001で使う場合は、simple_uart.c などでメッセージ出力部分を置換するかします。
SDK5.2以降、ソフトウェアデバイスver6以降を使います。半導体はROM256kB、RAM16kBの品番では、Packet: QF AA, Revison: FA, HWID: 002A 以降のものを使います。

参考情報

購入できる製品では、PebbleとGerminのFenixが、ANCSに対応している、らしい。