React Native откройте страницу Facebook
Я пытался открыть страницу Facebook, используя React Native Linking API. Это не работает для меня. У меня установлено приложение Facebook. Вот что я попробовал:
Linking.openURL('fb://page/<page_name>');
Linking.openURL('fb://profile/<profile_name>');
Linking.openURL('http://facebook.com/<page_name>');
Я также попытался использовать библиотеку сообщений: Communications.web(url)
, Ни один не работает для Facebook и Instagram. Однако это работает как шарм для Google Maps, Apple Maps, Twitter и других больших парней.
Мне было интересно, что я делаю что-то не так или, может быть, нам следует отправить этим людям из Facebook статьи об Android, как правильно реализовать глубокую связь в своих приложениях? Они явно не знают, что делают.
7 ответов
Хорошо, нашел один способ открыть Facebook:
Linking.openURL('https://www.facebook.com/n/?YOUR_PAGE_NAME');
Linking.openURL('http://instagram.com/_u/USER_NAME');
Linking.openURL('http://instagram.com/_p/PICTURE');
Facebook не будет работать, если вы удалите "www" между прочим.
В общем, вы должны проверить Linking.canOpenURL()
для iOS, прежде чем пытаться открыть их.
Кроме того, убедитесь, что вы добавляете свои протоколы в виде массива в info.plist
как:
<key>LSApplicationQueriesSchemes</key>
<array>
<string>fb</string>
</array>
Вы также можете сделать это в своем проекте XCode в info.plist
,
У меня та же проблема, но я не могу ее решить. У меня есть несколько кнопок социальных сетей с onpress
действие onPress= {()=> Linking.openURL("https://www.SOME_SOCIAL.NETWORK")}
Мои кнопки со ссылками на Twitter, Instagram и Snapchat открывают приложение, если оно установлено, или веб-страницу в Safari, если приложение не установлено. Единственный выброс - это Facebook. Учитывая нажимное действие, такое как onPress= {()=> Linking.openURL("https://www.facebook.com/")}
ссылка всегда будет открываться в Safari, даже если приложение установлено.
Из-за этого странного поведения я обращаюсь с моим onpress
действие для ссылки Facebook, как это:
`` `
Linking.canOpenURL("fb://profile/XXXXXX").then(supported => {
if (supported) {
return Linking.openURL("fb://profile/XXXXXX");
} else {
return Linking.openURL("https://www.facebook.com/");
}
})
`` `
Приведенный выше код работает не так, как задумано, но, похоже, больше ничего не работает.
Согласно документам https://reactnative.dev/docs/linking#canopenurl . Обещание может быть отклонено для Android. Это мой подход к решению этой проблемы для iOS и Android.
import { Linking } from 'react-native';
const handleOpenLink = async (url) => {
try {
await Linking.openURL(url);
} catch {
throw new Error('URI cant open:' + url);
}
};
Работал для меня, используя эти:
facebookApp: 'fb://page/318948148343',
facebookAppIos: 'fb://page/?id=318948148343',
instagramApp: 'instagram://user?username=stackAnswer',
youtubeApp: 'vnd.youtube://channel/UCPHssSTfq-K823dDJnvXqgw',
linkedInApp: 'linkedin://company/google',
- Обратите внимание на разницу между обеими ссылками на facebook (для iOS вы должны указать идентификатор в качестве параметра)
Кроме того, не забудьте добавить эквивалентные атрибуты в Info.plist для разрешенных приложений, например:
<key>LSApplicationQueriesSchemes</key>
<array>
<string>facebook</string>
<string>fb</string>
<string>instagram</string>
<string>vnd.youtube</string>
<string>linkedin</string>
</array>
Обновление - май 2019 г.
// open via app
fb://facewebmodal/f?href=PAGE_NAME
Здесь ничего не сработало, но после нескольких случайных попыток я обнаружил, что это решение работает:
Linking.openURL('fb://page/<ID-PAGE>');
А если вы ищете свой pageid, вот небольшой учебник:https://roadtoblogging.com/get-facebook-page-id/