Открыть ссылку на страницу Facebook из приложения iOS
Я хочу перенаправить пользователя на страницу приложения Facebook, поэтому у меня есть следующий код:
[[UIApplication sharedApplication] openURL:
[NSURL URLWithString: @"https://facebook.com/myAppsPage"]];
это отлично работает, если на устройстве нет приложения Facebook. Затем ссылка открывается в Safari.
Если на устройстве установлено приложение Facebook, то после выполнения вышеприведенного кода открывается приложение Facebook, но на нем отображается временная шкала пользователей, а не страница моего приложения. Я попытался изменить ссылку на @"fb://pages/myAppsPage"
и @"fb://profile/myAppsPage
, но это снова открыло временную шкалу пользователей.
Итак, мой вопрос: как я могу открыть страницу приложений на сафари, если в приложении Facebook нет приложения Facebook или в приложении Facebook, если он установлен.
Ответы
Ответ 1
Вам нужно использовать идентификатор 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"]];
}
Ответ 2
Я был рад найти skladek ответ, так что здесь мой вклад: Swift + другие социальные сети.
Я обнаружил, что мне нужно 3 косая черта для твиттера, и только 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()
Ответ 3
Похоже, что с момента последнего ответа Facebook изменили схему для страниц (профиль такой же, как и раньше)
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
, вы можете извлечь точный URL fb
iOS из источника вашей веб-страницы 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)
}
должен сделать работу...
Ответ 4
Для iOS 9 вы должны присвоить белый список URL-адресу, которое ваше приложение вызовет, используя ключ LSApplicationQueriesSchemes в вашем Info.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>
Ответ 5
После долгих испытаний я нашел одно из наиболее эффективных решений:
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]);
}
Порядок предложений "если еще" зависит от вас...
Наслаждайтесь!: -)
Ответ 6
Swift 2.3
Для кода вы можете использовать этот пример:
Примечание. Если вы не можете найти идентификатор профиля в Facebook, вы можете воспользоваться следующим сайтом (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")!)
}
}
Для Info.plist необходимо установить следующие параметры:
Примечание: для открытия Info.plist в режиме источника
-Go в файл Info.plist и щелкните правой кнопкой мыши
-Select "Открыть как"
-Select "Исходный код"
-Put код выше другого
<key>LSApplicationQueriesSchemes</key>
<array>
<string>fb</string>
<string>fbapi</string>
<string>fbauth2</string>
<string>fbshareextension</string>
<string>fb-messenger-api</string>
</array>