【问题标题】:Expo go app crashing on iPhone with ios16 when uploading images to Firebase storage将图像上传到 Firebase 存储时,Expo go 应用程序在带有 ios16 的 iPhone 上崩溃
【发布时间】:2023-02-02 01:32:25
【问题描述】:

尝试将图像上传到 Firebase 商店时,有没有人经历过 Expo go app for react native 崩溃?

当我将 iPhone 更新到 ios16 时,这个问题就开始了。我可以说问题出在 ios16 上,因为在另一部装有 ios15.7 的 iPhone 和 ipad 上没有崩溃。所有安卓手机也不会崩溃。

我的代码在下面以防万一检查

useEffect(() => {
    const setImageFiles = async () => {
      setUploading(true);
      const timeStamp = new Date().toISOString();

      if (postImage1) {
        const firstFilename = await postImage1.substring(
          postImage1.lastIndexOf('/') + 1
        );
        const filenameFirsImage = timeStamp + firstFilename;
        setFirstImageFile(filenameFirsImage);
      } else {
        const secondFilename = await postImage2.substring(
          postImage2.lastIndexOf('/') + 1
        );
        const filenameSecondImage = timeStamp + secondFilename;
        setSecondImageFile(filenameSecondImage);
      }
      setUploading(false);
    };
    const unsubscribe = NetInfo.addEventListener((state) => {
      if (!state.isConnected) {
        setIsConnected(false);
        Alert.alert('Network Error!', 'You are not connected to the internet');
      }
    });
    setImageFiles();
    unsubscribe();
  }, []); 


const uploadImage1ToStore = async () => {
    setUploading(true);

    const blob = await new Promise((resolve, reject) => {
      const xhr = new XMLHttpRequest();
      xhr.onload = function () {
        resolve(xhr.response);
      };
      xhr.onerror = function () {
        reject(new TypeError('Network request failed'));
      };
      xhr.responseType = 'blob';
      xhr.open('GET', postImage1, true);
      xhr.send(null);
    });

    const ref = firebase.storage().ref().child(firstImageFile);
    const snapshot = ref.put(blob);

    snapshot.on(
      firebase.storage.TaskEvent.STATE_CHANGED,
      () => {},
      (error) => {
        setUploading(false);
        Alert.alert(error.message);
        blob.close();
        return;
      },
      () => {
        snapshot.snapshot.ref
          .getDownloadURL()
          .then((url) => {
            setPostImage1Url(url);
          })
          .catch((error) => {
            Alert.alert(error.message);
          });
        blob.close();
      }
    );
  };

【问题讨论】:

    标签: javascript firebase react-native expo firebase-storage


    【解决方案1】:

    似乎与 IOS 有关的问题默认情况下不允许 HTTP 请求。根据这个answer,如果你在非本地访问应用程序,你需要在你的信息.plist.我也遇到了这个问题,并且能够通过参考上面的链接和how to do it in Expo 解决它。

    【讨论】:

      猜你喜欢
      • 2019-04-07
      • 2020-06-01
      • 1970-01-01
      • 1970-01-01
      • 2022-09-30
      • 1970-01-01
      • 2022-12-21
      • 2022-10-06
      • 1970-01-01
      相关资源
      最近更新 更多