NIERROR_ACCESSORY_PEER_DEVICE_UNAVAILABLE_DESCRIPTION (Code=-5882) occurs when running NISession for Nearby Interaction.

Overview

I am running a NearbyInteaction sample. Immediately after niSession.run(configuration!), func session(_ session: NISession, didInvalidateWith error: Error) is executed. The error is as follows, but I cannot find the cause.

Error:

bluetoothPeerIdentifier: AF5ADDC1-F731-7BAD-E8C5-9230E79F8C1A
Session Invalidation Error: NIERROR_ACCESSORY_PEER_DEVICE_UNAVAILABLE_DESCRIPTION
Error Details:Error Domain=com.apple.NearbyInteraction Code=-5882 "NIERROR_ACCESSORY_PEER_DEVICE_UNAVAILABLE_DESCRIPTION" UserInfo={NSLocalizedRecoverySuggestion=NIERROR_ACCESSORY_PEER_DEVICE_UNAVAILABLE_RECOVERY_SUGGESTION, NSLocalizedDescription=NIERROR_ACCESSORY_PEER_DEVICE_UNAVAILABLE_DESCRIPTION, NSLocalizedFailureReason=NIERROR_ACCESSORY_PEER_DEVICE_UNAVAILABLE_FAILURE_REASON}

The sample application worked well at first. I want the application to run in the background, so I made the following changes and had problems.

Before change:

configuration = try NINearbyAccessoryConfiguration(data: configData)

After change:

configuration = try NINearbyAccessoryConfiguration(
                accessoryData: configData,
                bluetoothPeerIdentifier: peerIdentifier)

I see no problem with the application. It works fine on device A. The problem occurs on device B.

  • Device A: NXP QN9090 - NXP SR150
  • Device B: Nordic nRF52840 - NXP SR150

I have confirmed that the device shows up in the settings app after pairing & bonding the device.

I have confirmed that the iPhone and nRF52840 are still connected to the BLE without any problems when the error occurs.

Initialization code for NearbyInteraction:

    func setupAccessory(_ configData: Data, name: String) {
        updateInfoLabel(with: "Received configuration data from '\(name)'. Running session.")
        do {
            guard let discoveredPeripheral = dataChannel.getDiscoveredPeripheral() else {
                return
            }
            let peerIdentifier = discoveredPeripheral.identifier

            configuration = try NINearbyAccessoryConfiguration(
                accessoryData: configData,
                bluetoothPeerIdentifier: peerIdentifier)
        } catch {
            // Stop and display the issue because the incoming data is invalid.
            // In your app, debug the accessory data to ensure an expected
            // format.
            updateInfoLabel(
                with:
                    "Failed to create NINearbyAccessoryConfiguration for '\(name)'. Error: \(error)"
            )
            return
        }

        // Cache the token to correlate updates with this accessory.
        cacheToken(configuration!.accessoryDiscoveryToken, accessoryName: name)
        niSession.run(configuration!)
    }

Environment

Answered by YN4624 in 827581022

I implemented the NearbyInteractionService correctly as mentioned in the spec and the problem was resolved.

Accepted Answer

I implemented the NearbyInteractionService correctly as mentioned in the spec and the problem was resolved.

NIERROR_ACCESSORY_PEER_DEVICE_UNAVAILABLE_DESCRIPTION (Code=-5882) occurs when running NISession for Nearby Interaction.
 
 
Q