【Xamarin.Forms】iBeacon 발신 앱을 크로스 플랫폼 개발한다
소스의 대부분이 공통화된 iBeacon 발신 앱을 만들자
iOS와 Android 플랫폼 모두를 위한 네이티브 앱을 개발할 때 Xamarin을 사용하면 각각의 앱을 개별적으로 개발하는 것보다 적은 수고로 개발을 진행할 수 있습니다.
특히 Xamarin.Forms에서는 플랫폼별 처리 이외의 소스를 공통화할 수 있으므로 앱 개발을 상당히 효율적으로 진행할 수 있습니다.
비콘 송수신과 같은 블루투스 저에너지(BLE)를 처리하는 처리는 플랫폼에 따라 다르므로 플랫폼별로 처리를 구현해야 합니다.
반대로 말하면, 이 부분만을 잘라내, UI를 포함한 다른 부분을 공통화해 버리는 형태로 앱을 만들 수 있습니다.
샘플 앱
샘플 앱을 GitHub에 게시했습니다.
htps : // 기주 b. 코 m / 미 c로와 PC / 이베 아콘 T 란 s보고 r
Prism for Xamarin.Forms (Prism.Forms) 템플릿을 사용하여 만들고 있습니다.
지원 플랫폼
샘플 앱을 GitHub에 게시했습니다.
htps : // 기주 b. 코 m / 미 c로와 PC / 이베 아콘 T 란 s보고 r
Prism for Xamarin.Forms (Prism.Forms) 템플릿을 사용하여 만들고 있습니다.
지원 플랫폼
기능
화면 구성
iOS
안드로이드
UWP
플랫폼 특정 부분 구현
iBeacon의 발신 및 중지를 제어하는 프로세스는 dependency service로서 플랫폼별로 잘라내어 작성하고 있습니다.
네이티브의 샘플 코드(iOS는 Objective-C나 Swift, Android는 Java)를 C#로 옮겨가는 감각으로 작성할 수 있습니다.
iBeaconTransmitService.cs에서 발췌
// BLEの発信を制御するクラスのインスタンス
private CBPeripheralManager _peripheralManager = new CBPeripheralManager();
// 発信
public void StartTransmission(Guid uuid, ushort major, ushort minor, sbyte txPower)
{
// BLE発信制御クラスに渡すためのiBeacon定義を作成する。
NSUuid nsUuid = new NSUuid(uuid.ToString());
CLBeaconRegion region = new CLBeaconRegion(nsUuid, major, minor, uuid.ToString());
NSNumber nsnumTxPower = new NSNumber(txPower);
NSDictionary peripheralData = region.GetPeripheralData(nsnumTxPower);
// iBeaconの発信を開始する。
_peripheralManager.StartAdvertising(peripheralData);
}
// 停止
public void StopTransmission()
{
_peripheralManager.StopAdvertising();
}
iBeaconTransmitService.cs에서 발췌
// iBeaconのバイト列のフォーマット
// m:ビーコンのタイプ
// i:identifier(UUID、Major、Minorの場所の指定)
// p:パワーキャリブレーションの値
private const string IBEACON_FORMAT = "m:2-3=0215,i:4-19,i:20-21,i:22-23,p:24-24";
// BLEの発信を制御するクラスのインスタンス
private BeaconTransmitter _beaconTransmitter;
// 発信
public void StartTransmission(Guid uuid, ushort major, ushort minor, sbyte txPower)
{
// Android用のビーコン定義を作成
Beacon beacon = new Beacon.Builder()
.SetId1(uuid.ToString())
.SetId2(major.ToString())
.SetId3(minor.ToString())
.SetTxPower(txPower)
.SetManufacturer(Const.COMPANY_CODE_APPLE)
.Build();
// iBeaconのバイト列フォーマットをBeaconParser(アドバタイズ時のバイト列定義)にセットする。
BeaconParser beaconParser = new BeaconParser().SetBeaconLayout(IBEACON_FORMAT);
// iBeaconの発信を開始する。
_beaconTransmitter = new BeaconTransmitter(Android.App.Application.Context, beaconParser);
_beaconTransmitter.StartAdvertising(beacon);
}
// 停止
public void StopTransmission()
{
_beaconTransmitter.StopAdvertising();
}
iBeaconTransmitService.cs에서 발췌
// BLEの発信を制御するクラスのインスタンス
private BluetoothLEAdvertisementPublisher blePublisher = new BluetoothLEAdvertisementPublisher();
// 発信
public void StartTransmission(Guid uuid, ushort major, ushort minor, sbyte txPower)
{
// BLE発信用のデータを格納する箱を作成
BluetoothLEManufacturerData bleManufacturerData = new BluetoothLEManufacturerData()
{
CompanyId = Const.COMPANY_CODE_APPLE
};
// データを格納できるようにするため、UUID、Major、Minor、TxPowerをbyteに変換する。
// TxPowerはオフセットをかけてから変換する。
byte[] uuidByteArray = uuid.ToByteArray();
byte[] majorByteArray = BitConverter.GetBytes(major);
byte[] minorByteArray = BitConverter.GetBytes(minor);
byte txPowerByte = (byte)((int)txPower + 256);
// UUID、Major、Minorを、iBeaconのフォーマットに準拠する形に梱包する。
byte[] ibeaconAdvertisementDataArray = new byte[]
{
// iBeaconと識別するための固定値
0x02, 0x15,
// UUID
uuidByteArray[0], uuidByteArray[1], uuidByteArray[2], uuidByteArray[3],
uuidByteArray[4], uuidByteArray[5], uuidByteArray[6], uuidByteArray[7],
uuidByteArray[8], uuidByteArray[9], uuidByteArray[10], uuidByteArray[11],
uuidByteArray[12], uuidByteArray[13], uuidByteArray[14], uuidByteArray[15],
// Major
majorByteArray[0], majorByteArray[1],
// Minor
minorByteArray[0], minorByteArray[1],
// TxPower
txPowerByte
};
// データをBLEで発信する。
bleManufacturerData.Data = ibeaconAdvertisementDataArray.AsBuffer();
blePublisher.Advertisement.ManufacturerData.Add(bleManufacturerData);
blePublisher.Start();
}
// 停止
public void StopTransmission()
{
blePublisher.Stop();
}
덤
Windows Phone용 앱은 UWP이므로 이 샘플 앱은 Windows 10 PC에 제대로 설치할 수 있습니다.
검증되지 않았기 때문에 동작을 보증할 수는 없지만, BLE의 송수신이 가능한 Windows 10 PC를 iBeacon으로 할 수 있을지도 모릅니다.
Reference
이 문제에 관하여(【Xamarin.Forms】iBeacon 발신 앱을 크로스 플랫폼 개발한다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/microwavePC/items/689fd81affe641c60449
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(【Xamarin.Forms】iBeacon 발신 앱을 크로스 플랫폼 개발한다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/microwavePC/items/689fd81affe641c60449텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)