Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 打开另一个应用程序_Android_Facebook_React Native - Fatal编程技术网

Android 打开另一个应用程序

Android 打开另一个应用程序,android,facebook,react-native,Android,Facebook,React Native,我有一个按钮,我想在facebook应用程序中打开一个facebook页面。我可以使用打开浏览器中的链接,但我正在寻找更好的解决方案,打开faecbook应用程序和我的愿望页面。这通常是可能的吗?如何操作?这在Android上可能不可能,但要做到这一点,您需要遵循基本相同的链接说明,只需将http与fb(或相应的应用程序id)交换即可。这有更多关于什么可能或什么不可能的信息 假设这是可能的,打开facebook应用程序的个人资料,它会像这样 const pageId = 'abc123' Lin

我有一个按钮,我想在facebook应用程序中打开一个facebook页面。我可以使用打开浏览器中的链接,但我正在寻找更好的解决方案,打开faecbook应用程序和我的愿望页面。这通常是可能的吗?如何操作?

这在Android上可能不可能,但要做到这一点,您需要遵循基本相同的链接说明,只需将
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文件。