【问题标题】:Linking in react native can open just one app在 react native 中链接只能打开一个应用
【发布时间】:2019-03-18 14:42:42
【问题描述】:

更新 1

我从代码中删除了return,现在链接可以在 IOS 上运行。 但是在android上我无法打开任何应用程序。有什么想法吗?

我正在尝试从我的应用打开不同的应用。

return Linking.openURL(“twitter://“);
return Linking.openURL(“instagram://“);

但它不起作用。我通过文档配置了 IOS。在android上也不起作用。虽然...

return Linking.openURL(“tripadvisor://“);

工作得很好。 知道为什么我无法打开其他应用程序。
这是我正在使用的代码(如果已安装,则打开应用程序或使用它打开商店,但有时甚至商店都无法打开)我做错了什么:

let appUrl = "instagram://";
Linking.canOpenURL(appUrl).then(supported => {
            if (!supported) {
              Alert.alert("",
                "",
                [
                  {text: "go to store", onPress: this.openStorePress},
                  {text: "cancel", onPress: () => { }, style: 'cancel'},
                ],
                { cancelable: false }
              );
            } else {
              return Linking.openURL(appUrl);
            }
        }).catch(err => {
            console.error(err);
        });

【问题讨论】:

  • 当您使用return 时,它也会中断您当前正在运行的特定功能。所以在你上面的例子中,它只会触发第一个。我认为使用 return 和 Linking.openURL -method 没有任何意义,所以也许只是将它从你的代码中删除。
  • 请准备一个复制库。在您的具体问题中,任何人都可以在看到您的示例代码时为您提供帮助。谢谢。

标签: react-native


【解决方案1】:

您的问题与 url 的内容有关,twitter:// 对 Android Twitter 应用没有任何意义,因此无法打开。

例如,下面的代码应该可以工作:

   Linking.openURL('twitter://timeline')

或

    Linking.openURL('instagram://user?username=apple')

你必须找到iOS和Android之间可能不同的权限url方案(文档不是很清楚)。

【讨论】:

  • @1110 请随时向我寻求帮助以找到您需要的网址
  • 你知道如何在 Android 上使用这个“instagram://library?AssetPath=${uri}”吗?在 iphone 上它工作正常
【解决方案2】:

您必须找到正确的 URL 方案。看看我的代码

Instagram

Linking.openURL('instagram://user?username=apple')
  .catch(() => {
    Linking.openURL('https://www.instagram.com/apple');
  })

推特

Linking.openURL('twitter://user?screen_name=apple')
  .catch(() => {
    Linking.openURL('https://www.twitter.com/apple');
  })

脸书

Linking.openURL('fb://page/PAGE_ID');
Linking.openURL('http://instagram.com/_u/USER_NAME');
Linking.openURL('http://instagram.com/_p/PICTURE');

【讨论】:

  • 你能告诉facebook的方案吗?
【解决方案3】:

您的代码看起来很可靠,这是我如何在我的应用中打开 twitter 的示例。

const twitterUrlScheme = `twitter://user?screen_name=${twitterUsername}`;

Linking.canOpenURL(twitterUrlScheme)
    .then((supported) =>
        Linking.openURL(
            supported
                ? twitterUrlScheme
                : `https://www.twitter.com/${twitterUsername}`
            )
        )
        .catch((err) => console.error('An error occurred', err));

我认为您的问题可能是return Linking.openUrl,我不确定您是否需要在该声明中返回。如果您删除退货,它会起作用吗?否则,将 Alert 从 canOpenUrl 移出 then 块可能会有所帮助。

【讨论】:

  • 如果我使用 url “twitter://” 或 “instagram://” (android & ios) 我会得到错误的支持 你能在你的代码中尝试这些 url 吗?
  • 在我的 iOS 设备上进行初始测试时,使用 URL“twitter://”对我有用。很好奇它对你的不起作用……你试过删除那个 return 语句吗?
  • 是的,我删除了 return 语句,但它现在可以在 IOS 上运行,但在 android 上不行。它可以在你的安卓设备上运行吗?如果我在 IOS 上使用“fb://” facebook 已打开但在 android 上没有任何反应。
【解决方案4】:

我只使用了 url,它适用于 iOS 和 android

Linking.openURL('https://www.facebook.com/');

【讨论】:

  • 网址很好 我想打开手机上的应用程序。这只是没有发生
  • 只需放应用程序的链接,如果应用程序在那里,它将自行打开...顺便说一句,这对我有用!
  • 通过应用程序的链接,您的意思是“twitter://”?
【解决方案5】:

你还没有完成" fot twitter和instagram,我不知道你是否在应用程序中也犯了同样的错误,如果是,修复它可能会解决它。

【讨论】:

  • 不,是错字我忘记了
【解决方案6】:

尝试使用如下包:

https://github.com/react-native-community/react-native-share

你可以尝试只使用它的一些函数,或者从那里查看原生代码并在原生代码中创建一些桥接函数,然后将它们导出以在 JS 代码中使用。

注意:您必须使用真实设备进行测试。

【讨论】:

  • 我已经有了。这是另外一回事:-/ 在 android 上也不起作用。
猜你喜欢
  • 2016-06-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-02
  • 2018-12-17
  • 2020-04-27
  • 2019-03-08
  • 1970-01-01
相关资源
最近更新 更多