Tizen Watch和iOS连接问题

Tizen Watch和iOS连接问题,ios,tizen,tizen-web-app,tizen-wearable-sdk,Ios,Tizen,Tizen Web App,Tizen Wearable Sdk,我的要求是创建一个应用程序,将文本从iOS设备传输到Tizen Wearable。根据tizen文件,我已使用BLE进行通信。 在我们的终端架构中将Tizen作为中心,iOS作为外围设备,初始连接将从Tizen连接到iOS应用程序 对于Tizen: var remoteDevice = null; var adapter = tizen.bluetooth.getLEAdapter(); function onDeviceFound(device) { if (remoteDev

我的要求是创建一个应用程序,将文本从iOS设备传输到Tizen Wearable。根据tizen文件,我已使用BLE进行通信。 在我们的终端架构中将Tizen作为中心,iOS作为外围设备,初始连接将从Tizen连接到iOS应用程序

对于Tizen:

var remoteDevice = null;
var adapter = tizen.bluetooth.getLEAdapter();



function onDeviceFound(device) {
     if (remoteDevice === null) {
       remoteDevice = device;
       console.log('Found device ' + device.name + '. Connecting...');
      device.connect(connectSuccess, connectFail);
    }
 adapter.stopScan();
 }

function connectFail(error) {
    console.log('Failed to connect to device: ' + e.message);
}

function connectSuccess() {
    console.log('Connected to device');
    var serviceUUIDs = remoteDevice.uuids;
    **var gattService = remoteDevice.getService(serviceUUIDs[0]); //error in this one**
    var property = gattService.characteristics[0];
}

adapter.startScan(onDeviceFound);
private func setupPeripheral() {
   let transferCharacteristic = CBMutableCharacteristic(type: TransferService.characteristicUUID, properties: [.notify, .writeWithoutResponse],value: nil,permissions: [.readable, .writeable])
   let transferService = CBMutableService(type: TransferService.serviceUUID, primary: true)
    transferService.characteristics = [transferCharacteristic]
    peripheralManager.add(transferService)
    self.transferCharacteristic = transferCharacteristic
}

peripheralManager.startAdvertising([CBAdvertisementDataServiceUUIDsKey: [TransferService.serviceUUID]])

func peripheralManagerDidUpdateState(_ peripheral: CBPeripheralManager) {
        switch peripheral.state {
        case .poweredOn:
            os_log("CBManager is powered on")
            setupPeripheral()
        case .poweredOff:
            os_log("CBManager is not powered on")
            return
        case .resetting:
            os_log("CBManager is resetting")
            return
        case .unauthorized:
           os_log("Unexpected authorization")
            return
        case .unknown:
            os_log("CBManager state is unknown")
            return
        case .unsupported:
            os_log("Bluetooth is not supported on this device")
            return
        @unknown default:
            os_log("A previously unknown peripheral manager state occurred")
            return
        }
    }
    func peripheralManager(_ peripheral: CBPeripheralManager, central: CBCentral, didSubscribeTo characteristic: CBCharacteristic) {
  os_log("Central subscribed to characteristic")
        connectedCentral = central
    }
func peripheralManager(_ peripheral: CBPeripheralManager, central: CBCentral, didUnsubscribeFrom characteristic: CBCharacteristic) {
    os_log("Central unsubscribed from characteristic")
    connectedCentral = nil
}
对于iOS-BLE连接:

var remoteDevice = null;
var adapter = tizen.bluetooth.getLEAdapter();



function onDeviceFound(device) {
     if (remoteDevice === null) {
       remoteDevice = device;
       console.log('Found device ' + device.name + '. Connecting...');
      device.connect(connectSuccess, connectFail);
    }
 adapter.stopScan();
 }

function connectFail(error) {
    console.log('Failed to connect to device: ' + e.message);
}

function connectSuccess() {
    console.log('Connected to device');
    var serviceUUIDs = remoteDevice.uuids;
    **var gattService = remoteDevice.getService(serviceUUIDs[0]); //error in this one**
    var property = gattService.characteristics[0];
}

adapter.startScan(onDeviceFound);
private func setupPeripheral() {
   let transferCharacteristic = CBMutableCharacteristic(type: TransferService.characteristicUUID, properties: [.notify, .writeWithoutResponse],value: nil,permissions: [.readable, .writeable])
   let transferService = CBMutableService(type: TransferService.serviceUUID, primary: true)
    transferService.characteristics = [transferCharacteristic]
    peripheralManager.add(transferService)
    self.transferCharacteristic = transferCharacteristic
}

peripheralManager.startAdvertising([CBAdvertisementDataServiceUUIDsKey: [TransferService.serviceUUID]])

func peripheralManagerDidUpdateState(_ peripheral: CBPeripheralManager) {
        switch peripheral.state {
        case .poweredOn:
            os_log("CBManager is powered on")
            setupPeripheral()
        case .poweredOff:
            os_log("CBManager is not powered on")
            return
        case .resetting:
            os_log("CBManager is resetting")
            return
        case .unauthorized:
           os_log("Unexpected authorization")
            return
        case .unknown:
            os_log("CBManager state is unknown")
            return
        case .unsupported:
            os_log("Bluetooth is not supported on this device")
            return
        @unknown default:
            os_log("A previously unknown peripheral manager state occurred")
            return
        }
    }
    func peripheralManager(_ peripheral: CBPeripheralManager, central: CBCentral, didSubscribeTo characteristic: CBCharacteristic) {
  os_log("Central subscribed to characteristic")
        connectedCentral = central
    }
func peripheralManager(_ peripheral: CBPeripheralManager, central: CBCentral, didUnsubscribeFrom characteristic: CBCharacteristic) {
    os_log("Central unsubscribed from characteristic")
    connectedCentral = nil
}
通过实现remoteDevice.getService(remoteDevice.uuids[0])代码,我得到了错误未找到设备异常。

此链接中也发布了相同的问题:

如果有人面临类似的挑战并找到了所需的解决方案,那么请提供您的宝贵意见,因为它是我们这边的拦路虎


提前感谢。

我是Tizen开发者,从未开发过iOS应用程序。我假设iOS应用程序:

  • 使用TransferService UUID创建GATT服务器
  • 启动广告传送服务UUID
  • 仅播发TransferService UUID(即,它应该位于Tizen应用程序代码中的remoteDevice.uuids[0]中)
  • 允许可扩展客户端连接到服务器 您可以验证该应用程序是否与假定的工作方式相同
请确保Tizen设备在扫描中找到要连接的Apple BLE设备。 你的Tizen应用程序连接到它找到的第一个BLE设备。只要苹果设备是唯一可见的可移动设备,就可以了。 为了确保Tizen客户端连接到正确的设备,您需要过滤掉
onDeviceFound
中的其他设备。例如,使用特定的蓝牙名称连接到设备:

function onDeviceFound(device) {
  if (device.name=== [iOS BLE device name]) {
    remoteDevice = device;
    console.log('Found device ' + device.name + '. Connecting...');
    device.connect(connectSuccess, connectFail);
  }
  adapter.stopScan();
}

嗨,布莱恩,谢谢你的反馈。在我们这边,我们也遵循了类似的步骤,1)从iOS方面——我创建了transferService UUID并对其进行了宣传。在Android端,我们也在onDeviceFound委托/方法中获取设备ID。2) 之后,我尝试连接设备:var serviceUUIDs=remoteDevice.uuids;//**这里我得到服务id.var gattService=remoteDevice.getService(serviceUUIDs[0]);但当我尝试获取TransferServiceID时,我得到了错误“DeviceNotFoundException”。如果您可以在同一台设备上共享您的输入,这将很有帮助。在我的设置(使用nRF Connect应用程序和Tizen设备完成服务器和广告)上,代码工作正常-找到Android设备并检索其服务。请检查
remoteDevice.uuids[0]
是否包含传输服务的UUID。在调用
remoteDevice.getService(
)之前,请检查
remoteDevice.name
是否是操作该服务的iOS设备的名称。