69 votes

Ouvrir un lien vers une page Facebook à partir d'une application iOS

Je veux rediriger l'utilisateur vers la page Facebook de mon application, j'ai donc le code suivant :

[[UIApplication sharedApplication] openURL:
    [NSURL URLWithString: @"https://facebook.com/myAppsPage"]];

Cela fonctionne très bien, s'il n'y a pas d'application Facebook sur l'appareil. Dans ce cas, le lien s'ouvre dans Safari.

Si l'application Facebook est installée sur l'appareil, après l'exécution du code ci-dessus, l'application Facebook s'ouvre, mais elle affiche la timeline des utilisateurs, et non la page de mon application. J'ai essayé de changer le lien en @"fb://pages/myAppsPage" et à @"fb://profile/myAppsPage mais cela a encore ouvert la ligne de temps des utilisateurs.

Ma question est donc la suivante : comment puis-je ouvrir ma page d'applications dans Safari, s'il n'y a pas d'application Facebook, ou dans l'application Facebook, si elle est installée.

124voto

skladek Points 1503

Vous devez utiliser l'ID facebook de la page donnée plutôt que l'URL de vanité. Pour obtenir l'ID de la page, entrez le nom de vanité de votre page à l'URL suivante et copiez la valeur de "id" :

https://graph.facebook.com/yourappspage

Une fois que vous avez l'id, vous pouvez configurer la méthode pour vérifier si FB est installé en utilisant la méthode canOpenURL et servir le contenu approprié pour les deux états :

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"]];
}

1 votes

Pas de problème. Sachez simplement que les schémas d'URL ne sont pratiquement pas documentés et que c'est à Facebook de continuer à prendre en charge cette fonctionnalité. Ils peuvent y apporter des modifications importantes à tout moment.

3 votes

Merci pour le bon conseil d'utiliser fb://profile/xxxxx qui fonctionne bien dans la version actuelle de l'application Facebook. J'ai cherché une solution sur internet, la suggestion d'utiliser des fichiers de type fb://page/xxxxx qui fait no fonctionne, aucune page n'est chargée, c'est probablement dû à une ancienne version de l'application Facebook.

1 votes

J'ai confirmé que cela fonctionne toujours avec succès sur iOS7 et iOS8.

38voto

Hurden Points 783

Il semble que depuis la dernière réponse, Facebook a changé le schéma pour les pages (le profil est le même qu'avant).

le site page_id est maintenant la partie de la requête URL. Donc pour rediriger vers l'application FB, l'URL doit être au format :

fb://page/?id=your_page_numeric_id

Assurez-vous également de mettre sur liste blanche fb dans vos applications Info.plist

<key>LSApplicationQueriesSchemes</key>
<array>
    <string>fb</string>
</array>

Dans le cas où il y aurait d'autres modifications ou si vous ne connaissez pas le nom de votre page Facebook, vous devez vous assurer qu'il n'y a pas d'erreur. page_id vous pouvez extraire les données précises d'iOS fb URL de la source de votre page web Facebook.

  1. Ouvrez votre page Facebook dans Safari
  2. Clic droit -> Inspecter l'élément
  3. Recherche de al:ios:url

Vous devriez pouvoir trouver :

<meta property="al:ios:url" content="fb://page/?id='your_page_numeric_id'">

Copiez cette URL dans votre application, puis appelez-la :

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)
}

devrait faire l'affaire...

30voto

user229688 Points 1393

J'ai été heureux de trouver la réponse de skladek, alors voici ma contribution : Swift + autres réseaux sociaux.

J'ai découvert que j'avais besoin de 3 barres obliques pour twitter, et seulement 2 pour Facebook et Google+, je n'ai pas cherché plus loin

// Go to https://graph.facebook.com/PageName to get your page id
func openFacebookPage() {
    let facebookURL = NSURL(string: "fb://profile?id=PageName")!
    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")!)
    }
}

Une tentative de refactoring :

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()
    }
}

Maintenant vous pouvez appeler :

SocialNetwork.Twitter.openPage()

11voto

Emre Points 255

Pour iOS 9, vous devez établir une liste blanche des url auxquelles votre application fera appel en utilisant la clé LSApplicationQueriesSchemes dans votre Info.plist.

Consulte aquí .

<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>

3voto

luke Points 715

Je viens de trouver ce schéma URL fb://profile?id={userid/username/pageid} et il fonctionne bien depuis le 30 août 2020.

eg : fb://profile?id=4 OU fb://profile?id=zuck

Avertissement : Veuillez l'utiliser à vos propres risques car il n'est pas documenté dans la documentation des développeurs de Facebook. Ce schéma d'URL peut être supprimé par l'application Facebook à l'avenir sans aucun avertissement ni indication.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X