У меня есть сценарий использования в моем собственном родном приложении, в котором я должен загрузить и отобразить PDF-файл из конечной точки, а также поделиться им как вложением (в приложение Gmail или WhatsApp или даже загрузить его), используя собственные параметры общего ресурса. (оба ios и Android).
В настоящее время я использую библиотеку react-native-pdf
для загрузки и отображения pdf в приложении, и она работает нормально. Проблема с опцией поделиться. Я попытался использовать Facebook Share API для достижения этой цели, но, к сожалению, это не отвечает моим целям, так как файл PDF передается в виде ссылки, а в Android мне пришлось пропустить оба message and pdfUrl
одинаково значение (по крайней мере, чтобы получить одинаковый результат на разных платформах). Я хочу, чтобы PDF-файл передавался в виде вложения при нажатии на любой из параметров общего доступа.
ниже - мой код для того же самого:
class ViewPdfScreen extends Component<Props, {}> {
render() {
const pdfUrl = 'http://samples.leanpub.com/thereactnativebook-sample.pdf'
const source = {
uri: pdfUrl,
cache: true,
expiration: 900, // cache file expired seconds (0 is not expired)
};
return (
<View style={styles.container}>
<View style={styles.subContainer}>
<Text>{title}</Text>
<TouchableOpacity onPress={() => this.sharePdf(title, pdfUrl)}>
<Image source={shareBtn} />
</TouchableOpacity>
</View>
<View style={styles.pdfContainer}>
<Pdf
source={source}
onLoadComplete={(numberOfPages, filePath) => {
console.log(`number of pages: ${numberOfPages}`);
}}
onPageChanged={(page, numberOfPages) => {
console.log(`current page: ${page}`);
}}
onError={error => {
console.log(error);
}}
onPressLink={uri => {
console.log(`Link presse: ${uri}`);
}}
style={styles.pdf}
/>
</View>
</View>
);
}
shareBill = (title: string, billUrl: string) => {
Share.share(
{
message: billUrl,
url: billUrl,
title: title,
},
{
// Android only:
dialogTitle: `Share ${title}`,
// iOS only:
excludedActivityTypes: ['com.apple.UIKit.activity.PostToTwitter'],
},
)
.then(res => console.log(res))
.catch(error => console.log(error));
};
}
const styles = StyleSheet.create({
container: {
flex: 1,
},
subContainer: {
elevation: 4,
height: 100,
flexDirection: 'row',
backgroundColor: colors.orange,
justifyContent: 'space-between',
alignItems: 'flex-end',
padding: 16,
},
pdfContainer: {
flex: 1,
},
pdf: {
flex: 1,
width: Dimensions.get('window').width,
height: Dimensions.get('window').height,
},
});
export default connect()(ViewPdfScreen);
Кто-нибудь сталкивался с подобной ситуацией? или есть какое-то решение для этого?
хотите что-то похожее на это ниже (взято из Google)