The functional test confirms the software performs a function within the boundaries of how you've solved the problem. This is an integral part of developing software, comparable to the testing that is done on the mass-produced product before it leaves the factory. A functional test verifies that the product actually works as you (the developer) think it does.
Functional testing - test the product, verifying that it has the qualities you've designed or build (functions, speed, errors, consistency, etc.)
Acceptance tests verify the product actually solves the problem it was made to solve. This can best be done by the user (customer), for instance, performing his/her tasks that the software assists with. If the software passes this real-world test, it's accepted to replace the previous solution. This acceptance test can sometimes only be done properly in production, especially if you have anonymous customers (e.g. a website). Thus a new feature will only be accepted after days or weeks of use.
Acceptance testing - test the product in its context, this requires (simulation of) human interaction, test it has the desired effect on the original problem(s).
If you are looking for real devices in real network conditions, then you should leverage QAppAssure for testing your product. QAppAssure provides a plethora of on-cloud devices to test your products.