Открыть ссылку на страницу 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, если оно установлено.

765   6  

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, вы можете извлечь точные прошивкой fb URL из вашего Facebook страницу.

  1. откройте страницу Facebook в Safari
  2. щелкните правой кнопкой мыши - > проверить элемент
  3. искать 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

    Ничего не найдено.