reactjs 分享不工作在React原生android/ios?

py49o6xq  于 2023-01-17  发布在  React
关注(0)|答案(8)|浏览(135)

如何共享将在react原生移动应用网页浏览器中打开的pdf文件链接或图像链接。我添加了一个共享按钮,但当用户点击它时,它会打开共享菜单选项,如WhatsApp、Gmail、消息等。但当点击WhatsApp时,它不会发送任何内容,为什么会这样?我需要在react原生安卓应用中使用Gmail、WhatsApp API吗

    • 代码:**
import {
  Text,
  View,
  StyleSheet,
  Button,
  Animated,
  Dimensions,
  ScrollView,
  Image,
  TouchableOpacity,
  Linking,
  Platform,
  Share
} from 'react-native';

// inside render

onSharePress = (shareOptions) => Share.share(shareOptions);

const shareOptions = {
   title: 'Download Brochure',
    url: brochure
}

// inside return 

<View style={{paddingLeft: 10, marginRight: 20, flex: 1, flexDirection: 'row', justifyContent: 'flex-end'}}>
    <TouchableOpacity onPress={() => this.onSharePress(shareOptions)}>
         <Icon style={{paddingLeft: 10}} name="md-share" size={25} color="black"/>
     </TouchableOpacity>
</View>

在下面的屏幕截图中,您可以看到它只是打开了共享选项菜单,但当我点击一些平台的内容,即文件的URL没有发送,我该怎么做呢?我错过了什么吗?

5uzkadbs

5uzkadbs1#

阅读友好的share()文档:

内容物

  • message-要共享的消息
  • title-消息的标题

iOS

  • url-要共享的URL

至少需要URL和消息之一。
因此在Android上,url选项什么也不做,您可能需要将其放入message

kyks70gy

kyks70gy2#

这是为我工作:链接

shareApp = () =>{

        let  text = 'Want more buzz around your photos on Insta, Facebook, Twitter, Whatsapp posts?\n\nLet\'s make your stories get more eyeballs..\nDownload TagWag App '
        if(Platform.OS === 'android')
            text = text.concat('https://hackeruna.com')
        else
            text = text.concat('http://itunes.apple.com/app/id1453977874')

        Share.share({
            subject: 'Download TagWag App Now',
            title: 'Download TagWag App Now',
            message: text,
            url:'app://tagwag',

        }, {
            // Android only:
            dialogTitle: 'Share TagWag App',
            // iOS only:
            excludedActivityTypes: []
        })
    }
rlcwz9us

rlcwz9us3#

你必须为这个处理承诺..

onSharePress = (url) => {
    Share.share({
      title: 'Alert Title',
      message: url + '\nMessage goes here.'
    }).then((res) => console.log(res))
      .catch((error) => console.log(error))
  };
6fe3ivhb

6fe3ivhb4#

比如在WhatsApp上分享文本
正在链接.openURL(whatsapp://send?text=${'hello whatsApp'});
比如在Google上分享文本
正在链接.openURL(“https://support.google.com/mail/community”);
在React Native应用程序中打开您的联系人
链接.openURL('内容://com.android.联系人/联系人');

z9smfwbn

z9smfwbn5#

在我的情况下共享message or url的Android设备.
版本:"react-native": "0.70.2"

export const shareStoredRecords = async () => {
  const message = await getAllStoredRecords();

  try {
    await Share.share({
      message: message,
      url: message,
    });
  } catch (error) {
    console.error(error.message);
  }
};
vatpfxk5

vatpfxk56#

你可以这样工作

我正在接受来自另一个组件的值。

import { Share } from "react-native";
import * as Sharing from "expo-sharing";
import * as FileSystem from "expo-file-system";
import { cacheDirectory, downloadAsync } from "expo-file-system";
const onShare = async (title, message, url, image) => {
    // console.log(image[0])
  const messageAndUrl = message.concat("\n\n").concat(url);
  try {
    url = image[0];
    // console.log({url})
        const uri = await downloadAsync(url , cacheDirectory + "tmp.png");
        // console.log({uri}); // it prints a local image file
        // Share.share({url : uri.uri , message : messageAndUrl });
    const result = await Share.share(
      {
        title,
        url : uri.uri ,
        message: messageAndUrl,
      },
      {
        subject: title,
      }
    );
    if (result.action === Share.sharedAction) {
      // Always work with android
      if (result.activityType) {
        // worked
      } else {
        // shared
      }
    } else if (result.action === Share.dismissedAction) {
      // run only for ios if share is dismissed
    }
  } catch (error) {
    console.log(error);
  }
};

export default { onShare };

所以在ios中的结果

第一节第一节第一节第一节第一次

xzlaal3s

xzlaal3s7#

链接在WhatsApp中作为明文发送,但在Telegraph中作为Android中的链接工作。

yvt65v4c

yvt65v4c8#

**Share.share(内容,选项)**分别接收内容和选项参数。

share(content,options)在Android和IOS上都会返回一个Promise,你基本上需要解析Promise或者读取它的响应。
像这样

Share.share(
{
  message: 'Your message',
  url: YourURL
}
).then(({action, activityType}) => {
if(action === Share.sharedAction)
  console.log('Share was successful');
else
  console.log('Share was dismissed');
});

Promise返回一个包含action,activityType的对象
如果用户关闭对话框,则将通过操作Share. disclassedAction或通过操作Share.sharedAction解决承诺

相关问题