@emirkrgz; Ne demek rica ederim siz zor olanı seçmişsiniz. Tabi projenin ileri ki aşamalarında firebase fiyat politikası belki bizim ülkemizde sorun yaratıyor olabilir. Keşke react native bilseydim size yardımcı olmaktan memnuniyet duyardım.
public class ImageSaveTask extends AsyncTask<String, Void, Void> {    private Context context;    private TebriKarti tebriKarti;    public ImageSaveTask(Context context, TebriKarti tebriKarti) {        this.context = context;        this.tebriKarti = tebriKarti;    }    @Override    protected Void doInBackground(String... params) {        try {            File f = new File(context.getExternalCacheDir(), "TebrikKarti/" + tebriKarti.getLink().substring(0, tebriKarti.getLink().indexOf("/")) + "/");            //Eğer dosya yoksa oluştur            if (!f.exists()) {                f.mkdirs();            }            File soundFile = new File(context.getExternalCacheDir(),                    "TebrikKarti/" + tebriKarti.getLink() + ".jpg");            if (!soundFile.exists()) {                int count;                URL url = new URL(context.getResources().getString(R.string.api_tebrik_karti) + tebriKarti.getLink() + ".jpg");                URLConnection conection = url.openConnection();                conection.connect();                InputStream input = new BufferedInputStream(url.openStream(), 8192);                File dowlandFile = new File(context.getExternalCacheDir(), "TebrikKarti/" + tebriKarti.getLink() + ".jpg");                FileOutputStream outStream;                outStream = new FileOutputStream(dowlandFile);                byte[] data = new byte[4096];                while ((count = input.read(data)) != -1) {                    outStream.write(data, 0, count);                }                outStream.flush();                outStream.close();                input.close();            }        } catch (Exception e) {            e.printStackTrace();        }        return null;    }    @Override    protected void onPostExecute(Void aVoid) {        super.onPostExecute(aVoid);        File imgFile = new File(context.getExternalCacheDir(), "TebrikKarti/" + tebriKarti.getLink() + ".jpg");        Bitmap bitmap = addWaterMark(imgFile);        paylasMesaj(bitmap);    }}private Bitmap addWaterMark(File file) {    Bitmap src = BitmapFactory.decodeFile(file.getPath());    int w = src.getWidth();    int h = src.getHeight();    Bitmap result = Bitmap.createBitmap(w, h, src.getConfig());    Canvas canvas = new Canvas(result);    canvas.drawBitmap(src, 0, 0, null);    Bitmap waterMark = BitmapFactory.decodeResource(context.getResources(), R.drawable.main_icon);    Bitmap resizedBitmap = Bitmap.createScaledBitmap(            waterMark, 100, 100, false);    canvas.drawBitmap(resizedBitmap, w - 100, h - 100, null);    return result;}private void paylasMesaj(Bitmap bitmap) {    Intent paylasIntent = new Intent(Intent.ACTION_SEND);    paylasIntent.setType("image/*");    paylasIntent.putExtra(Intent.EXTRA_STREAM, getImageUri(context, bitmap));    context.startActivity(Intent.createChooser(paylasIntent, getSTR(R.string.app_name)));}private Uri getImageUri(Context inContext, Bitmap inImage) {    ByteArrayOutputStream bytes = new ByteArrayOutputStream();    inImage.compress(Bitmap.CompressFormat.JPEG, 100, bytes);    String path = MediaStore.Images.Media.insertImage(inContext.getContentResolver(), inImage, "Title", null);    return Uri.parse(path);}

En azından size java ile bir apiden/linkten resmi nasıl çekebileceğiniz java kodunu atabilirim.