If you are interacting with a BLE device, that will be the best way to wake up your app. Silent notifications will not be consistent enough if you need several wakeups per hour.
If the BLE device is not waking up your app when suspended, then it is mostly likely because it is not advertising fast enough. Or the advertising does not include the UUID your app is scanning for.
The advertising interval of your peripheral effects the time to discovery and connect performance, which in turn would wake up your app.
To have a high probability of being discovered by an iOS device you should first use the recommended advertising interval of 20 ms for at least 30 seconds. If it is not discovered within the initial 30 seconds, you can switch to using one of the following longer intervals to increase chances of discovery: 152.5 ms, 211.25 ms, 318.75 ms, 417.5 ms, 546.25 ms, 760 ms, 852.5 ms, 1022.5 ms, 1285 ms
How long you need to keep advertising after the initial 30 seconds will depend on your required time to discovery. The probability and time curve is asymptotic.
Also, as an app scanning in the background has to scan for specific service UUIDs, to be able to be discoverable under all conditions, the peripheral should advertise at least one of the UUIDs the app scans for in the ADV_IND packet, as opposed to the SCAN_RSP packet.
These and many other important aspects of detection and connection is discussed in the Bluetooth Accessory Design Guidelines for Apple Products which can be found here: https://developer.apple.com/hardwaredrivers/BluetoothDesignGuidelines.pdf