There is no one "best" way.
Lots of details here not in evidence, too.
Transfers using https via TCP 443 are the most compatible means for transferring files around, and is the means least likely to encounter a firewall, as Quinn sagely suggests. This allows you to access and download a data file on whatever web server you are using.
sftp is absolutely possible too, but that usage can encounter outbound network firewalls and policy-related blocks on TCP 22 traffic (or on other ports, or on all but specific ports).
Also, any client-side private key or password usage is necessarily and absolutely always assumed to be compromised.
Embedded sftp credentials are not secret.
Whatever you decide to use for the data transfer, there are various ways to transfer files and blobs of data around, and (outside of a web browser and related tech) one of the more ubiquitous choices for the transfer is curl and libcurl. curl can transfer data using most common protocols.
You might also want to provide a pointer for locating your file or data blob too, whether that is via a HTTP redirect, or some data returned from your website, or via a DNS translation (such as a DNS SRV service record or such) or some other indirect means, so that you don't end up stuck between needing to move the file for whatever reason (storage, load, uptime, new hosting provider or CDN, whatever) and having to push out an app update to allow that. This pointer also for avoiding support calls from those that haven't updated the app.
You may also want to embed file format version information somewhere too, so that an old app can react appropriately and display an appropriate diagnostic message upon meeting a new file version.
Version skew is a thing. Think about how you can implement your app and file upgrades.
Topic:
App & System Services
SubTopic:
Networking
Tags: