65 votes

Ouvrir un lien Facebook par l'application Facebook native sur iOS

Si l'application Facebook native est installée sur l'iPhone. Comment ouvrir un lien Facebook dans l'application Facebook native depuis mon application ? Dans le cas d'une ouverture par Safari, le lien est le même que :

http://www.facebook.com/AlibabaUS

Merci.

5 votes

Votre méthode ne fonctionne pas avec la nouvelle application FB (août 2012)... L'application fb://profile/<id> ne fonctionne pas.

9 votes

Pour ajouter à ce que @yonix a dit, vous pouvez trouver l'identifiant de la page en allant sur graph.facebook.com/AlibabaUS . Même si vous voulez une page, utilisez "profil" dans l'URL. De même, si vous pensez qu'un utilisateur n'a peut-être pas installé l'application FB, appelez canOpenURL : avant openURL :

133voto

WrightsCS Points 32170

Voici quelques schémas utilisés par l'application Facebook, il y en a une tonne d'autres sur le lien source :

Exemple

NSURL *url = [NSURL URLWithString:@"fb://profile/<id>"];
[[UIApplication sharedApplication] openURL:url];

Schémas

fb://profile - Ouvre l'application Facebook sur le profil de l'utilisateur.

fb://friends - Ouvre l'application Facebook à la liste d'amis.

fb://notifications - Ouvrir l'application Facebook à la liste des notifications (REMARQUE : il semble y avoir un bug avec cette URL. La page des notifications s'ouvre. Cependant, il n'est pas possible de naviguer vers une autre page de l'application Facebook.)

fb://feed - Ouvre l'application Facebook sur le fil d'actualité.

fb://events - Ouvre l'application Facebook sur la page des événements.

fb://requests - Ouvre l'application Facebook à la liste des demandes.

fb://notes - Ouvre l'application Facebook à la page des notes.

fb://albums - Ouvrez l'application Facebook à la liste des albums photos.

Si, avant d'ouvrir cette URL, vous voulez vérifier si l'utilisateur a utilisé l'application Facebook, vous pouvez faire ce qui suit (comme expliqué dans une autre réponse ci-dessous) :

if ([[UIApplication sharedApplication] canOpenURL:nsurl]){
    [[UIApplication sharedApplication] openURL:nsurl];
}
else {
    //Open the url as usual
}

Source :

http://wiki.akosma.com/IPhone_URL_Schemes#Facebook

0 votes

Puis-je ouvrir cette url dans safari avec une connexion ? J'utilise Facebook dans toute mon application. Je me suis déjà connecté à Facebook. Mais si j'ouvre une page url Facebook avec Safari. Il demande à nouveau de se connecter. Comment puis-je résoudre ce problème ?

0 votes

@sathiamoorthy : si vous trouvez la solution à votre question, merci de m'en informer également :)

3 votes

Attention, les programmes ne sont pas officiellement pris en charge par facebook, ils peuvent changer/cesser de fonctionner à tout moment.

27voto

Romano401 Points 463

Il suffit d'utiliser [https://graph.facebook.com/(votre\_nom\_d'utilisateur](https://graph.facebook.com/(your_username) ou le nom de la page) pour obtenir l'ID de votre page et après vous pouvez voir tous les détenus et votre ID

après dans votre application IOS, utilisez :

 NSURL *url = [NSURL URLWithString:@"fb://profile/[your ID]"];
 [[UIApplication sharedApplication] openURL:url];

1 votes

Merci pour l'url du graphique ! C'était très utile

1 votes

C'était une pièce importante du puzzle. Merci !

5 votes

Cela ne fonctionne pas. { error : { message : "Un jeton d'accès est nécessaire pour demander cette ressource.", type : "OAuthException", code : 104, fbtrace_id : "AlTl1RaNO9b" } }

26voto

zoul Points 51637

Pour ajouter le commentaire de yonix comme une réponse, l'ancien fb://page/… L'URL ne fonctionne plus. Apparemment, elle a été remplacée par fb://profile/… même si une page n'est pas un profil.

2 votes

J'essaie et j'obtiens Page non trouvée après le chargement de l'application FB. Je n'arrive pas à comprendre pourquoi

10voto

Brad Moore Points 146

J'ai fait cela dans MonoTouch avec la méthode suivante, je suis sûr qu'une approche purement basée sur Obj-C ne serait pas trop différente. J'ai utilisé cette méthode à l'intérieur d'une classe dont les URLs changeaient parfois, c'est pourquoi je ne l'ai pas mise dans une instruction if/elseif.

NSString *myUrls = @"fb://profile/100000369031300|http://www.facebook.com/ytn3rd";
NSArray *urls = [myUrls componentsSeparatedByString:@"|"];
for (NSString *url in urls){
    NSURL *nsurl = [NSURL URLWithString:url];
    if ([[UIApplication sharedApplication] canOpenURL:nsurl]){
        [[UIApplication sharedApplication] openURL:nsurl];
        break;
    }
}

La pause n'est pas toujours appelée avant que votre application ne passe à Safari/Facebook. Je suppose que votre programme s'arrêtera à cet endroit et l'appellera lorsque vous y reviendrez.

0 votes

Merci pour cette modification. C'est le code obj-c du code monotouch que j'avais posté à l'origine.

8voto

HussoM Points 97

Je sais que la question est ancienne, mais à l'appui des réponses ci-dessus, je voulais partager mon code de travail. Il suffit d'ajouter ces deux méthodes à n'importe quelle classe.le code vérifie si l'application facebook est installée, si elle ne l'est pas, l'url est ouverte dans un navigateur.et si des erreurs se produisent en essayant de trouver le profileId, la page sera ouverte dans un navigateur. Il suffit de passer l'url (exemple, http://www.facebook.com/AlibabaUS ) à openUrl : et cela fera toute la magie. J'espère que cela aidera quelqu'un !

NOTE : UrlUtils était la classe qui avait le code pour moi, vous pourriez avoir à la changer pour quelque chose d'autre pour répondre à vos besoins.

+(void) openUrlInBrowser:(NSString *) url
{
    if (url.length > 0) {
        NSURL *linkUrl = [NSURL URLWithString:url];
        [[UIApplication sharedApplication] openURL:linkUrl];
    }
}
+(void) openUrl:(NSString *) urlString
{

    //check if facebook app exists
    if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"fb://"]]) {

        // Facebook app installed
        NSArray *tokens = [urlString componentsSeparatedByString:@"/"];
        NSString *profileName = [tokens lastObject];

        //call graph api
        NSURL *apiUrl = [NSURL URLWithString:[NSString stringWithFormat:@"https://graph.facebook.com/%@",profileName]];
        NSData *apiResponse = [NSData dataWithContentsOfURL:apiUrl];

        NSError *error = nil;
        NSDictionary *jsonDict = [NSJSONSerialization JSONObjectWithData:apiResponse options:NSJSONReadingMutableContainers error:&error];

        //check for parse error
        if (error == nil) {

            NSString *profileId = [jsonDict objectForKey:@"id"];

            if (profileId.length > 0) {//make sure id key is actually available
                NSURL *fbUrl = [NSURL URLWithString:[NSString stringWithFormat:@"fb://profile/%@",profileId]];
                [[UIApplication sharedApplication] openURL:fbUrl];
            }
            else{
                [UrlUtils openUrlInBrowser:urlString];
            }

        }
        else{//parse error occured
            [UrlUtils openUrlInBrowser:urlString];
        }

    }
    else{//facebook app not installed
        [UrlUtils openUrlInBrowser:urlString];
    }

}

0 votes

Cela ne fonctionnera plus : "message": "(#803) Cannot query users by their username (user.name)"

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