Как поделиться видео прямо на Facebook / Instagram через ссылку в виде видео, которое можно напрямую воспроизвести с использованием реагировать на родной - PullRequest
0 голосов
/ 31 марта 2020

Как поделиться видео напрямую в Facebook / Instagram / Twitter по ссылке с помощьюact-native. Я использую реагирующий нативный ресурс для обмена видео на Instagram / Facebook, но он становится ссылкой в ​​виде ссылки, но я хочу поделиться ими как видео, как это делает TikTok.

Как мне этого добиться? Я знаю, что это возможно путем преобразования его в base 64, так есть ли какие-либо библиотеки, которые конвертируют ссылки в base 64 напрямую? В противном случае мне нужно было бы сначала загрузить его, затем извлечь, а затем преобразовать в базу 64, а затем поделиться им.

Пожалуйста, помогите!

Ответит, как я это сделал, если кому-то понадобится полный код:

shareURL = async (socialMedia) => {
        let facebook = socialMedia === 'facebook'
        let twitter = socialMedia === 'twitter'
        const { video, uploadingStatus } = this.state;

        this.setState({ isSliderModalVisible: true }, async () => {
            let uploadOptions = { fileCache: true, appendExt: 'mp4', timeout: 60000, indicator: true, IOSBackgroundTask: true, }
            const res = await RNFetchBlob.config(uploadOptions).fetch('GET', video, {})
                .progress((received, total) => {
                    this.setState({ uploadingStatus: (received / total) * 100 })
                    console.log('Progress', (received / total) * 100);
                })
            const filePath = res.path(); //to delete video
            const base64String = await res.base64();
            const url = `data:video/mp4;base64,${base64String}`;
            await RNFetchBlob.fs.unlink(filePath); //deleted the video from path of celebfie.
            this.setState({ isSliderModalVisible: false })
            setTimeout(() => {
                const shareOptions = {
                    title: 'Celebfie',
                    message: hashtags,
                    subject: 'Sharing my intro video which I recorded in Celebfie.',
                    url: url,
                    type: 'video/mp4',
                    social: facebook ? Share.Social.FACEBOOK : twitter ? Share.Social.TWITTER : Share.Social.INSTAGRAM
                };
                Share.shareSingle(shareOptions).then((res) => this.setState({ sharedVideoToSocialNetwork: true }))
                    .catch((err) => { Global.customToast('Video sharing failed.', 'failure') })
            })
        }, 1000);
    }

Ответы [ 2 ]

0 голосов
/ 06 апреля 2020

Отвечая на мой вопрос, вот как это работает:

shareURL = async (socialMedia) => {
        let facebook = socialMedia === 'facebook'
        let twitter = socialMedia === 'twitter'
        const { video, uploadingStatus } = this.state;

        this.setState({ isSliderModalVisible: true }, async () => {
            let uploadOptions = { fileCache: true, appendExt: 'mp4', timeout: 60000, indicator: true, IOSBackgroundTask: true, }
            const res = await RNFetchBlob.config(uploadOptions).fetch('GET', video, {})
                .progress((received, total) => {
                    this.setState({ uploadingStatus: (received / total) * 100 })
                    console.log('Progress', (received / total) * 100);
                })
            const filePath = res.path(); //to delete video
            const base64String = await res.base64();
            const url = `data:video/mp4;base64,${base64String}`;
            await RNFetchBlob.fs.unlink(filePath); //deleted the video from path of Sexy lady.
            this.setState({ isSliderModalVisible: false })
            setTimeout(() => {
                const shareOptions = {
                    title: 'Sexy Lady',
                    message: hashtags,
                    subject: 'Sharing my intro video which I recorded in Celebfie.',
                    url: url,
                    type: 'video/mp4',
                    social: facebook ? Share.Social.FACEBOOK : twitter ? Share.Social.TWITTER : Share.Social.INSTAGRAM
                };
                Share.shareSingle(shareOptions).then((res) => this.setState({ sharedVideoToSocialNetwork: true }))
                    .catch((err) => { Global.customToast('Video sharing failed.', 'failure') })
            })
        }, 1000);
    }
0 голосов
/ 31 марта 2020

вы можете сделать так:

Share.open(
      {
        message: `I have successfully Completed this course`,
        title: 'Share',
        url: 'file:///documents..',
        type: 'video/mp4',
      },
      {
        // Android only:
        dialogTitle: 'Share',
        // iOS only:
        excludedActivityTypes: ['com.apple.UIKit.activity.PostToTwitter'],
      },
    );
...