Связывание в React Native может открыть только одно приложение

ОБНОВЛЕНИЕ 1

Я удалил return из кода, и теперь ссылки работают на IOS. Но на Android я не могу открыть ни одно приложение. Есть идеи?

Я пытаюсь открыть из своего приложения разные приложения.

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

Но это не работает. Настроил IOS по документации. На андроиде тоже не работает. В то время как...

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 -методом, так что, может быть, просто оставьте это в своем коде.

Jimi Pajala 16.10.2018 13:30

Пожалуйста, подготовьте репозиторий репродукций. В вашем конкретном вопросе любой может помочь вам, просто увидев ваши образцы кодов. Благодарю.

AmerllicA 19.10.2018 15:40
Умерло ли Create-React-App?
Умерло ли Create-React-App?
В этом документальном фильме React.dev мы исследуем, мертв ли Create React App (CRA) и какое будущее ждет этот популярный фреймворк React.
Освоение React Native: Пошаговое руководство для начинающих
Освоение React Native: Пошаговое руководство для начинающих
React Native - это популярный фреймворк с открытым исходным кодом, используемый для разработки мобильных приложений. Он был разработан компанией...
В чем разница между react native и react ?
В чем разница между react native и react ?
React и React Native - два популярных фреймворка для создания пользовательских интерфейсов, но они предназначены для разных платформ. React - это...
От React к React Native: Руководство для начинающих по разработке мобильных приложений с использованием React
От React к React Native: Руководство для начинающих по разработке мобильных приложений с использованием React
Если вы уже умеете работать с React, создание мобильных приложений для iOS и Android - это новое приключение, в котором вы сможете применить свои...
Хуки React: что это такое и как их использовать
Хуки React: что это такое и как их использовать
Хуки React - это мощная функция библиотеки React, которая позволяет разработчикам использовать состояние и другие возможности React без написания...
11
2
10 028
6
Перейти к ответу Данный вопрос помечен как решенный

Ответы 6

Вы не заполнили " для Twitter и Instagram, я не знаю, совершили ли вы ту же ошибку в приложении, если да, исправление может решить эту проблему.

Нет, это опечатка, я забыл

1110 13.10.2018 19:11

Я использовал только URL-адрес, и он работает как для iOS, так и для Android.

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

URL-адреса в порядке. Я хочу открыть приложение, если оно на телефоне. И это просто ничего не происходит

1110 13.10.2018 19:12

Просто поместите ссылку на приложение, если оно есть, оно откроется самостоятельно ... кстати, это сработало для меня!

Shyqa 13.10.2018 19:24

Под ссылкой на приложение вы имеете в виду «twitter: //»?

1110 14.10.2018 20:54

Ваш код выглядит довольно солидно, вот пример того, как я открываю твиттер в своем приложении.

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 за пределы блока then из canOpenUrl.

Я получаю false для поддержки, если я использую url «twitter: //» или «instagram: //» (android и ios), вы можете попробовать эти URL-адреса в своем коде, пожалуйста?

1110 16.10.2018 21:21

Использование URL-адреса «twitter: //» работает для меня при начальных тестах на моем устройстве iOS. Любопытно, что это не работает с вашим ... вы пытались удалить это выражение возврата?

Jason Gaare 16.10.2018 22:14

Да, я удалил оператор возврата, но теперь он работает на IOS, а на Android - нет. Это работает на вашем устройстве Android? Если я использую "fb: //" на IOS, facebook открывается, но на android ничего не происходит.

1110 17.10.2018 08:59

Попробуйте использовать такой пакет:

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

Вы можете попробовать использовать только некоторые из его функций или изучить собственный код оттуда и создать некоторые функции моста в собственном коде, а затем экспортировать их для использования в коде JS.

Примечание: для тестов вам придется использовать настоящие устройства.

Это у меня уже есть. Это еще кое-что: - / На андроиде тоже не работает.

1110 16.10.2018 21:23
Ответ принят как подходящий

Ваша проблема связана с содержимым URL-адреса, twitter:// ничего не значит для приложения Android Twitter, поэтому оно не открывается.

Например, следующий код должен работать:

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

или

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

Вы должны найти схемы URL-адресов прав (в документации это не очень ясно), которые могут отличаться в iOS и Android.

@ 1110 не стесняйтесь обращаться ко мне за помощью в поиске нужных вам URL

Julien Malige 20.10.2018 17:23

Привет, есть идеи, как использовать эту 'instagram: // library? AssetPath = $ {uri}' на Android? На айфоне нормально работает

Gabriel Luque 13.07.2020 19:36

Вы должны найти схемы 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');
  })

Facebook

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

подскажите пожалуйста схему для фейсбука?

hafiz adeel 14.11.2020 10:03

Другие вопросы по теме