iosのcentralの対応について書きたいと思います。

androidのperipheralcentral
Blutoothの必要な基礎知識はこちら

CoreBluetooth FrameWorkを追加する

iosでBluetoothLowEnergyを使用する場合CoreBluetoothFrameWorkが必要になりますので、
そちらLibraryとして追加してください

ios_corebluetooth_xcode

必要なクラスをプロパティへと追加する

CoreBluetoothをインポートし、
必要なクラスをプロパティとして持ちます。

CBCentralMangerの初期化とdelegateの登録

peripheral端末のscan

scanを開始するためにscanForPeripheralsWithServices関数を呼んでいます。
第1引数に検索対象となるserviceのuuidを渡しますが、nilにすると全てのサービスが対象になります。

第2引数はoptionとなり今回は重複したキーを許可を設定する
CBCentralManagerScanOptionAllowDuplicatesKeyに@NOを入れています。

今回のサンプルでは、トリガーとなっているボタンを押すとscanNewDevice関数を呼び、
scanを開始する流れになっています。

対象のPeripehral端末が見つかると、delegate methodである
centralManager:didDiscoverPeripheral:advertisementData:RSSI:が呼ばれます。

peripheralに接続を試みる

対象のperipehralが見つかったら接続試みます。

接続するためにはCBCentralMangerクラスのconnectPeripheralを呼びます。
今回第2引数のoptionにはnilを設定しています。

接続に成功すると、delegate methodであるcentralManager:didConnectPeripheral:
関数が呼ばれます。

delegateを登録し、サービスを探索する

didConnectPeripheral関数で、delegateを登録し、サービスを探索します。
サービスを探索するには、discoverServices関数を呼び出します。
引数にはserviceのuuidを指定しますが、nilにすると全てのサービスを検索します。

サービスを発見すると、delegate関数であるperipheral:didDiscoverServices:
が呼ばれます。

サービスの検出、Characteristicの探索

サービスが検出されたら、今度はCharacteristicを検索します。
Characteristicを探索するために、discovercharacteristics関数を呼びます。

第1引数にnilを入れると、全てのcharacteristicを検索します。

Characteristicを発見すると、
delegate関数 peripheral:didDiscoverCharacteristicsForService:error:
が呼ばれます。

Peripehralからの更新通知を受け取るようにする

対象のcharacteristicが見つかったらperipheral側がcharacteristicの値を更新したら、
central側に通知が届くように設定します。

その通知をするのがsetNotifyValue関数です。

Peripheral側がcharacteristicを変えて通知を出すと、
delegate関数didUpdateValueForCharacteristicが呼ばれますので、この関数内で
Peripheralの値を受け取ることができます。

ここでは、NSString型のstrGotValueにPeripheral側でセットされたCharacteristicの値を代入しています。

Peripehralにデータを送信する

続いて、Periperal側にデータを送信する箇所をみていきたいと思います。

送りたいデータが文字列型の場合NSMutableDataに変換し,
writeValue:forCharacteristic:type:関数を呼び出します。

書き込みに成功し、Peripheral側に送られたかどうかの結果は、
delegate関数であるdidWriteValueForCharacteristicで受け取ることができます。

また、didWriteValueForCharacteristicが呼ばれるためには、Android端末のPeripheral側では、
onCharacteristicWriteRequest callback関数内で、BluetoothGattServerクラスのsendResponse関数を呼ぶ必要があります。

Peripheralから切断されたことを検知する

Peripheralから切断されるとdelegate関数didDisconnectPeripheral関数が呼ばれます。

サンプルでは、再度Peripheral用の検索関数を読んでいます。

以上で、Peripheralの検索・接続と値の更新の受け取りと値の送信が完了しました。

UIは省略していますので、全体のコードはgithubを参照してください。
iosandroid

参考サイト

https://developer.apple.com/jp/documentation/CoreBluetoothPG.pdf

Pocket