Открыть ссылку на страницу Facebook из приложения iOS
Я хочу перенаправить пользователя на страницу Facebook моего приложения, поэтому у меня есть следующий код:
[[UIApplication sharedApplication] openURL:
[NSURL URLWithString: @"https://facebook.com/myAppsPage"]];
это отлично работает, если на устройстве нет приложения Facebook. Тогда ссылка открывается в Safari.
Если на устройстве установлено приложение Facebook, то после выполнения вышеуказанного кода открывается приложение Facebook, но оно показывает временную шкалу пользователей, а не страницу моего приложения. Я попытался изменить ссылку на @"fb://pages/myAppsPage" и @"fb://profile/myAppsPage, но это снова открыло пользователям временную шкалу.
Итак, мой вопрос is: как я могу открыть свою страницу приложений в safari, если нет приложения Facebook, или в приложении Facebook, если оно установлено.
6 ответов:
вы должны использовать идентификатор facebook для данной страницы, а не url тщеславия. Чтобы получить идентификатор страницы, введите имя тщеславия вашей страницы по следующему URL-адресу и скопируйте значение для "id":
https://graph.facebook.com/yourappspage
после того, как у вас есть идентификатор, вы можете настроить метод, чтобы проверить, установлен ли FB с помощью метода canOpenURL и обслуживать соответствующее содержимое для обоих состояний:
NSURL *facebookURL = [NSURL URLWithString:@"fb://profile/113810631976867"]; if ([[UIApplication sharedApplication] canOpenURL:facebookURL]) { [[UIApplication sharedApplication] openURL:facebookURL]; } else { [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"http://facebook.com"]]; }
Я был счастлив, чтобы найти ответ skladek, так что вот мой вклад: Свифт + и другие социальные сети.
я обнаружил, что мне нужно 3 косых черты для twitter, и только 2 для Facebook и Google+, я не исследовал больше, чем это...
// Go to https://graph.facebook.com/PageName to get your page id func openFacebookPage() { let facebookURL = NSURL(string: "fb://profile/PageId")! if UIApplication.sharedApplication().canOpenURL(facebookURL) { UIApplication.sharedApplication().openURL(facebookURL) } else { UIApplication.sharedApplication().openURL(NSURL(string: "https://www.facebook.com/PageName")!) } } func openTwitterProfile() { let twitterURL = NSURL(string: "twitter:///user?screen_name=USERNAME")! if UIApplication.sharedApplication().canOpenURL(twitterURL) { UIApplication.sharedApplication().openURL(twitterURL) } else { UIApplication.sharedApplication().openURL(NSURL(string: "https://twitter.com/USERNAME")!) } } func openGooglePlusPage() { let googlePlusURL = NSURL(string: "gplus://plus.google.com/u/0/PageId")! if UIApplication.sharedApplication().canOpenURL(googlePlusURL) { UIApplication.sharedApplication().openURL(googlePlusURL) } else { UIApplication.sharedApplication().openURL(NSURL(string: "https://plus.google.com/PageId")!) } }попытка рефакторинга:
struct SocialNetworkUrl { let scheme: String let page: String func openPage() { let schemeUrl = NSURL(string: scheme)! if UIApplication.sharedApplication().canOpenURL(schemeUrl) { UIApplication.sharedApplication().openURL(schemeUrl) } else { UIApplication.sharedApplication().openURL(NSURL(string: page)!) } } } enum SocialNetwork { case Facebook, GooglePlus, Twitter, Instagram func url() -> SocialNetworkUrl { switch self { case .Facebook: return SocialNetworkUrl(scheme: "fb://profile/PageId", page: "https://www.facebook.com/PageName") case .Twitter: return SocialNetworkUrl(scheme: "twitter:///user?screen_name=USERNAME", page: "https://twitter.com/USERNAME") case .GooglePlus: return SocialNetworkUrl(scheme: "gplus://plus.google.com/u/0/PageId", page: "https://plus.google.com/PageId") case .Instagram: return SocialNetworkUrl(scheme: "instagram://user?username=USERNAME", page:"https://www.instagram.com/USERNAME") } } func openPage() { self.url().openPage() } }Теперь вы можете звонить:
SocialNetwork.Twitter.openPage()
похоже, что с момента последнего ответа Facebook изменил схему для страниц (профиль такой же, как и раньше)
the
page_idтеперь является частью URL-запроса. Поэтому для перенаправления на приложение fb url-адрес должен быть в формате:fb://page/?id='your_page_numeric_id'также убедитесь, что Белый
fbсхемы в приложенияхInfo.plist<key>LSApplicationQueriesSchemes</key> <array> <string>fb</string> </array>в случае, если будут какие-либо дальнейшие изменения или вы не знаете, что ваша страница facebook
page_id, вы можете извлечь точные прошивкойfbURL из вашего Facebook страницу.
- откройте страницу Facebook в Safari
- щелкните правой кнопкой мыши - > проверить элемент
- искать
al:ios:urlвы должны быть в состоянии найти:
<meta property="al:ios:url" content="fb://page/?id='your_page_numeric_id'">копирование этого URL-адреса в приложение, а затем вызов:
guard let facebookURL = NSURL(string: "fb://page/?id='your_page_numeric_id'") else { return } if (UIApplication.sharedApplication().canOpenURL(facebookURL)) { UIApplication.sharedApplication().openURL(facebookURL) } else { guard let webpageURL = NSURL(string: "http://facebook.com/yourPage/") else { return } UIApplication.sharedApplication().openURL(webpageURL) }должен делать свою работу.
для iOS 9, вы должны белый список url-адреса, что ваше приложение будет вызывать с помощью ключа LSApplicationQueriesSchemes в вашей информации.файл plist.
Регистрация здесь.
<key>LSApplicationQueriesSchemes</key> <array> <string>fb</string> <string>fbapi</string> <string>fbauth2</string> <string>fbshareextension</string> <string>fb-messenger-api</string> <string>twitter</string> <string>whatsapp</string> <string>wechat</string> <string>line</string> <string>instagram</string> <string>kakaotalk</string> <string>mqq</string> <string>vk</string> <string>comgooglemaps</string> </array>
после долгих испытаний я нашел одно из самых эффективных решений:
NSString *facebookID = @"XXXXXXXXXX"; NSString *facebookURL = @"www.facebook.com/XXXXXXXX"; NSURL *urlModal = [NSURL URLWithString:[NSString stringWithFormat:@"fb://facewebmodal/f?href=%@", facebookURL]]; NSURL *urlWithID = [NSURL URLWithString:[NSString stringWithFormat:@"fb://page/%@", facebookID]]; // or "fb://profile/%@" or another type of ID NSURL *url = [NSURL URLWithString:facebook_url]; if(facebookID && !facebookID.isEmpty && [[UIApplication sharedApplication] canOpenURL:urlWithID]) { // open facebook app with facebookID [[UIApplication sharedApplication] openURL:urlWithID]; } else if (facebookURL && !facebookURL.isEmpty && [[UIApplication sharedApplication] canOpenURL:urlModal]) { // open facebook app with facebookUrl [[UIApplication sharedApplication] openURL:urlModal]; } else if (![[UIApplication sharedApplication] openURL:url]) { // somehow open NSLog(@"%@%@",@"Failed to open url:",[url description]); }порядок предложений "если еще" меняется по вашему вкусу ...
наслаждайтесь!! : -)
Swift 2.3
для код вы можете использовать этот пример:
Примечание: Если вы не можете найти идентификатор профиля facebook, вы можете использовать сайт follow для этого (https://findmyfbid.com/)
func goFacebook() { let profileID = "" //Here put profile id Example:'62260589592' let facebookURL = NSURL(string: "fb://profile/\(profileID)")! if UIApplication.sharedApplication().canOpenURL(facebookURL) { UIApplication.sharedApplication().openURL(facebookURL) } else { UIApplication.sharedApplication().openURL(NSURL(string: "https://www.facebook.com/PageName")!) } }Для Сведения.plist вам нужно установить следующие параметры:
Примечание: Для открытия информации.plist в исходном режиме
- перейти к информации.plist файл и нажмите кнопку справа
-Выбрать "Открыть Как"
-Выберите Пункт "Исходный Код Код"
-поставить код выше другого
<key>LSApplicationQueriesSchemes</key> <array> <string>fb</string> <string>fbapi</string> <string>fbauth2</string> <string>fbshareextension</string> <string>fb-messenger-api</string> </array>
Comments