在 react native 中链接只能打开一个应用程序

111*_*110 11 react-native

更新 1

return从代码中删除,现在链接在 IOS 上工作。但是在android上我无法打开任何应用程序。任何的想法?

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

return Linking.openURL(“twitter://“);
return Linking.openURL(“instagram://“);
Run Code Online (Sandbox Code Playgroud)

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

return Linking.openURL(“tripadvisor://“);
Run Code Online (Sandbox Code Playgroud)

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

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);
        });
Run Code Online (Sandbox Code Playgroud)

Ter*_*ius 9

您必须找到权限 URL 方案。看看我的代码

Instagram

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

推特

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

Facebook

Linking.openURL('fb://page/PAGE_ID');
Linking.openURL('http://instagram.com/_u/USER_NAME');
Linking.openURL('http://instagram.com/_p/PICTURE');
Run Code Online (Sandbox Code Playgroud)


Jul*_*ige 8

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

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

   Linking.openURL('twitter://timeline')
Run Code Online (Sandbox Code Playgroud)

或者

    Linking.openURL('instagram://user?username=apple')
Run Code Online (Sandbox Code Playgroud)

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


Jas*_*are 5

您的代码看起来非常可靠,这是我如何在应用程序中打开 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));
Run Code Online (Sandbox Code Playgroud)

我想也许你的问题可能是return Linking.openUrl,我不确定你是否需要该声明中的返回。如果去掉退货还有作用吗?Alert否则,将您的代码移出 canOpenUrl 的 then 块可能会有所帮助。