Android 打开另一个应用程序
我有一个按钮,我想在facebook应用程序中打开一个facebook页面。我可以使用打开浏览器中的链接,但我正在寻找更好的解决方案,打开faecbook应用程序和我的愿望页面。这通常是可能的吗?如何操作?这在Android上可能不可能,但要做到这一点,您需要遵循基本相同的链接说明,只需将Android 打开另一个应用程序,android,facebook,react-native,Android,Facebook,React Native,我有一个按钮,我想在facebook应用程序中打开一个facebook页面。我可以使用打开浏览器中的链接,但我正在寻找更好的解决方案,打开faecbook应用程序和我的愿望页面。这通常是可能的吗?如何操作?这在Android上可能不可能,但要做到这一点,您需要遵循基本相同的链接说明,只需将http与fb(或相应的应用程序id)交换即可。这有更多关于什么可能或什么不可能的信息 假设这是可能的,打开facebook应用程序的个人资料,它会像这样 const pageId = 'abc123' Lin
http
与fb
(或相应的应用程序id)交换即可。这有更多关于什么可能或什么不可能的信息
假设这是可能的,打开facebook应用程序的个人资料,它会像这样
const pageId = 'abc123'
Linking.openURL(`fb://profile/${pageId}`)
.catch(err => console.error('An error occurred', err));
请注意,我使用的不是
http
,而是fb
与@Spencer Answeed的解决方案相同,而是使用page
而不是profile
打开页面
<Button
title="Go to Facebook page"
onPress={() => {
const FANPAGE_ID = 'xxxxxxxxxxxxxxxxx'
const FANPAGE_URL_FOR_APP = `fb://page/${FANPAGE_ID}`
const FANPAGE_URL_FOR_BROWSER = `https://fb.com/${FANPAGE_ID}`
Linking.canOpenURL(FANPAGE_URL_FOR_APP)
.then((supported) => {
if (!supported) {
Linking.openURL(FANPAGE_URL_FOR_BROWSER)
} else {
Linking.openURL(FANPAGE_URL_FOR_APP)
})
.catch(err => console.error('An error occurred', err))
}}
/>
{
const FANPAGE_ID='XXXXXXXXXXXXXXXXXX'
const FANPAGE_URL_FOR_APP=`fb://page/${FANPAGE_ID}`
const FANPAGE\u浏览器的URL\u=`https://fb.com/${FANPAGE_ID}`
Linking.canOpenURL(FANPAGE\u URL\u用于应用程序)
。然后((支持)=>{
如果(!受支持){
Linking.openURL(FANPAGE\u URL\u用于浏览器)
}否则{
Linking.openURL(FANPAGE\uurl\u用于应用程序)
})
.catch(err=>console.error('发生错误',err))
}}
/>
注意:必须使用扇页ID,而不是扇页段塞名称。如果您不知道如何获取id,只需在浏览器中打开您的fanpage,查看源代码并找到
页面id
参数。我在iOS上使用了@Spencer和@Thaánh的混合答案
因此,我决定只打开Facebook应用程序链接,如果失败,我会回到web浏览器链接,如下所示:
import { Linking } from "react-native";
const openFacebookLink = facebookId => {
const FANPAGE_URL_FOR_APP = `fb://profile/${facebookId}`;
const FANPAGE_URL_FOR_BROWSER = `https://fb.com/${facebookId}`;
Linking.canOpenURL(FANPAGE_URL_FOR_APP)
.then(appSupported => {
if (appSupported) {
console.log(`Can handle native url: ${FANPAGE_URL_FOR_APP}`);
return Linking.openURL(FANPAGE_URL_FOR_APP);
} else {
console.log(
`Can't handle native url ${FANPAGE_URL_FOR_APP} defaulting to web URL ${FANPAGE_URL_FOR_BROWSER}`
);
return Linking.canOpenURL(FANPAGE_URL_FOR_BROWSER).then(
webSupported => {
if (webSupported) {
console.log(`Can handle web url: ${FANPAGE_URL_FOR_BROWSER}`);
return Linking.openURL(FANPAGE_URL_FOR_BROWSER);
}
return null;
}
);
}
})
.catch(err => console.error("An error occurred", err));
};
注意:此处的appSupported
变量将始终返回false
,直到您在info.plist
文件中编辑/添加了lsapplicationqueryschemes
值。您将在项目的ios/yourappname子文件夹中找到此文件。以下是我添加到我的行:
<key>LSApplicationQueriesSchemes</key>
<array>
<string>fb</string>
<string>fbapi</string>
<string>fb-messenger-api</string>
<string>fbauth2</string>
<string>fbshareextension</string>
</array>
LSApplicationQueriesSchemes
食品饮料
fbapi
fb messenger api
fbauth2
fbshareextension
注意:如果您正在使用Create React Native App和/或Expo,则无法编辑此文件。因为这个原因,我放弃了世博会
对我来说,这在iOS上是可行的,但Android每次都会在浏览器中打开它。我读到安卓系统处理这件事的方式与iOS完全不同,所以我不确定是否有简单的解决方案。谢谢@Spencer,但推荐的方法都不管用。太棒了!!工作不流畅,我无法在iOS上运行。即使安装了Facebook应用程序,
supported
变量对我来说总是评估为false
。官方文档表明,除非您在Info.plist中设置一个名为lsapplicationqueryschemes
的键,否则iOS 9及更高版本将采用这种情况。很遗憾,我正在使用Create React本机应用程序,因此无法访问Info.plist文件。