why is my FFT magnitude of real time recording so volatile?
Are you appending new data to your FFT input vector?  If so, then every FFT result will have a different length; and it's likely the early ones are too short for the frequency resolution you desire.  The smartphone app may also be averaging multiple successive FFT results to reduce noise.