链接React Native只能打开一个应用程序

时间:2018-10-13 16:58:15

标签: react-native

更新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);
        });

6 个答案:

答案 0 :(得分:2)

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

Instagram

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

Twitter

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

Facebook

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

答案 1 :(得分:1)

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

例如,以下代码应该起作用:

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

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

您必须找到在iOS和Android之间可能有所不同的权利url方案(文档对此不太清楚)。

答案 2 :(得分:0)

您还没有完成import { MatTableModule } from '@angular/material/table'; import { MatPaginatorModule } from '@angular/material/paginator';等Twitter和instagram,我不知道您是否也在应用中犯了同样的错误,如果可以,请解决此错误。

答案 3 :(得分:0)

我只使用了url,并且可以同时在iOS和android上使用

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

答案 4 :(得分:0)

您的代码看起来很扎实,这是我如何在应用程序中打开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块之外。

答案 5 :(得分:0)

尝试使用类似以下的程序包:

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

您可以尝试仅使用其中的一些功能,或者从那里查看本机代码,并在本机代码中创建一些桥函数,然后将其导出以在JS代码中使用。

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