Когда я отправляю данные с iOS на устройство Android с помощью google-сообщения рядом с API-интерфейсом, обе стороны приложения аварийно завершают работу, поэтому я не могу понять, по какому формату я должен передать данные в методе публикации Google рядом с сообщениемapi.
Мой код здесь для отправки данных: -
func sendDataToBeacons()
{
self.mResponse = false
self.isTargeted = true
GNSMessageManager.setDebugLoggingEnabled(true)
let nearbyPermission = GNSPermission(changedHandler: { (granted: Bool)
in
// Update the UI here
})
let permissionState = GNSPermission.isGranted()
GNSPermission.setGranted(!permissionState) // toggle the state
messageManager = GNSMessageManager(apiKey: "AIzaSyD-zlc1Tw6rClQDNtCxUq_QHZy2tlXxxbk",paramsBlock: { (params: GNSMessageManagerParams?) in
guard let params = params else { return }
params.microphonePermissionErrorHandler = { (hasError: Bool) in}
params.bluetoothPowerErrorHandler = { (hasError: Bool) in}
params.bluetoothPermissionErrorHandler = { (hasError: Bool) in}
})
var img : UIImage = updatedProfileDict[Constant.BASE6a4] as! UIImage
img = img.resizeCI(size: CGSize(width: 150, height: 150))!
let adate : NSData = UIImagePNGRepresentation(img)! as NSData
let strBase64 = adate.base64EncodedString(options: .lineLength64Characters)
var dict : [String : Any] = [:]
dict[Constant.UDID] = updatedProfileDict[Constant.UDID]
dict[Constant.DESCRIPTION] = updatedProfileDict[Constant.DESCRIPTION]
dict[Constant.BASE6a4] = strBase64
dict[Constant.MRESPONSE] = true
dict[Constant.ISTARGETED] = true
dict[Constant.MTARGETUUID] = updatedProfileDict[Constant.UDID]
print(dict)
let dataExample : NSData = NSKeyedArchiver.archivedData(withRootObject: dict) as NSData
//publication = messageManager?.publication(with:GNSMessage(content: dataExample as Data?))
self.publication = self.messageManager?.publication(with: GNSMessage(content: dataExample as Data?), paramsBlock: { (params) in
guard let params = params else { return }
self.mResponse = true
self.isTargeted = true
params.strategy = GNSStrategy(paramsBlock: { (params: GNSStrategyParams?) in
guard let params = params else { return }
params.discoveryMediums = .BLE
params.discoveryMode = .default
})
})
}
Код для получения данных: -
func readDataFromBeacons()
{
beaconSubscription = messageManager?.subscription(messageFoundHandler:
{ (myMessageFoundHandler) in
if let dictionary: [String : Any] = (NSKeyedUnarchiver.unarchiveObject(with: (myMessageFoundHandler?.content)!) as? [String : Any])
{
if let tempStr : String = dictionary[Constant.UDID] as? String
{
print(tempStr)
}
}
}, messageLostHandler: { (myMessageLostHandler) in
}, paramsBlock: { (params) in
params?.deviceTypesToDiscover = .bleBeacon
params?.messageNamespace = Constant.BUNDELIDENTIFIER
params?.beaconStrategy =
GNSBeaconStrategy(paramsBlock: { (params: GNSBeaconStrategyParams!) in
params.includeIBeacons = true
params.lowPowerPreferred = true
})
})
}
Здесь мое приложение аварийно завершает работу в функции readDataFromBeacons () так же, как на стороне Android. Приложение аварийно завершается из-за несовпадения структуры форматов при отправке данных. Поэтому есть общая структура данных для совместного использования данных на разных устройствах с помощью Google поблизости.сообщение SDK.