Öffnen Sie den Link zur Facebook-Seite über die iOS-App

68

Ich möchte den Benutzer auf die Facebook-Seite meiner App umleiten, daher habe ich den folgenden Code:

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

Dies funktioniert hervorragend, wenn keine Facebook-App auf dem Gerät vorhanden ist. Dann öffnet sich der Link in Safari.

Wenn auf dem Gerät eine Facebook-App installiert ist, wird nach Ausführung des obigen Codes die Facebook-App geöffnet, die jedoch die Zeitleiste des Benutzers und nicht die Seite meiner App anzeigt. Ich habe versucht, den Link zu @"fb://pages/myAppsPage"und zu zu ändern @"fb://profile/myAppsPage, aber dies öffnete erneut die Zeitleiste des Benutzers.

Meine Frage lautet also: Wie kann ich meine Apps-Seite in Safari öffnen, wenn es keine Facebook-App gibt, oder in der Facebook-App, wenn die installiert ist?

medvedNick
quelle

Antworten:

123

Sie müssen die Facebook-ID für die angegebene Seite anstelle der Vanity-URL verwenden. Um die Seiten-ID zu erhalten, geben Sie den Vanity-Namen Ihrer Seite unter der folgenden URL ein und kopieren Sie den Wert für "id":

https://graph.facebook.com/yourappspage

Sobald Sie die ID haben, können Sie die Methode einrichten, um zu überprüfen, ob FB mithilfe der canOpenURL-Methode installiert ist, und den entsprechenden Inhalt für beide Status bereitstellen:

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"]];
}
Sean Kladek
quelle
1
Kein Problem. Beachten Sie jedoch, dass URL-Schemata fast vollständig undokumentiert sind und es an Facebook liegt, diese Funktion weiterhin zu unterstützen. Sie könnten jederzeit wichtige Änderungen daran vornehmen.
Sean Kladek
3
Vielen Dank für den tollen Tipp, fb://profile/xxxxxdass dies in der aktuellen Version der Facebook-App gut funktioniert. Hatte für eine Lösung über das Internet sucht, der Vorschlag der Verwendung von fb://page/xxxxxdem tut nicht arbeitet, wird keine Seite, wahrscheinlich , dass die für die ältere Version von Facebook - App geladen.
PL
1
Bestätigt, dass dies unter iOS7 und iOS8 immer noch erfolgreich funktioniert.
Derek Lee
7
Dies funktioniert nicht mehr mit der Ablehnung von IDs durch Facebook.
Kopiro
4
LSApplicationQueriesSchemesDenken Sie in iOS 9 daran, das Schema auf die Whitelist zu setzen, indem Sie den Array-Schlüssel in Ihrer Info.plist und das Element fbals Zeichenfolgenelement im Array hinzufügen .
Leandro
38

Es scheint, dass Facebook seit der letzten Antwort das Schema für Seiten geändert hat (Profil ist das gleiche wie zuvor)

Das page_idist jetzt der Teil der URL-Abfrage. Um zur fb-App umzuleiten, muss die URL das folgende Format haben:

fb://page/?id=your_page_numeric_id

Stellen Sie außerdem sicher, dass fbIhre Apps eine Whitelist enthaltenInfo.plist

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

Falls es weitere Änderungen gibt oder Sie Ihre Facebook-Seite nicht kennen page_id, können Sie die genaue iOS- fbURL aus Ihrer Facebook-Webseitenquelle extrahieren .

  1. Öffnen Sie Ihre Facebook-Seite in Safari
  2. Rechtsklick -> Element untersuchen
  3. Suchen nach al:ios:url

Sie sollten finden können:

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

Kopieren Sie diese URL in Ihre App und rufen Sie dann an:

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

sollte den Job machen ...

Umgebungslicht
quelle
1
Da diese Antwort über ein Jahr alt ist: Ich kann bestätigen, dass diese Methode (in meinem Fall fb: // event? Id = <eventID>) ab diesem Kommentar funktioniert. Unter iOS 10 und der neuesten Facebook-App-Version.
Nickdnk
irgendwie funktioniert es aber nicht für mich und es ist der 6. Februar, lol; Es öffnet nur meine eigene Seite, mit der ich gerade angemeldet bin.
TheeBen
1
Bestätigtes Arbeiten für iOS 10. Wie OP erwähnt, müssen Sie Ihre FB-Seite in Safari öffnen, um das richtige zu erhaltenal:ios:url
David T
Großes Geheimnis auf der Suche nach dieser al:ios:urlEigenschaft! Ich habe es nur verwendet, um herauszufinden, wie man eine Facebook-Gruppe (keine Seite) entkoppelt. prost
BigMcLargeHuge
30

Ich war froh, die Antwort von Skladek zu finden. Hier ist mein Beitrag: Swift + andere soziale Netzwerke.

Ich fand heraus, dass ich 3 Schrägstriche für Twitter und nur 2 für Facebook und Google+ benötigte. Mehr habe ich nicht untersucht.

// 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")!)
    }
}

Ein Versuch des Refactorings:

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

Jetzt können Sie anrufen:

SocialNetwork.Twitter.openPage()
Arnaud
quelle
Dies scheint aufgrund der URL nicht zu funktionieren. Ich muss die URL von "fb: /// profile / PageId" in "fb: // profile / PageId"
ändern
Vielen Dank für das Feedback @NutchaphonRewik. Am Ende habe ich // und nicht /// für fb verwendet, aber vergessen, meine Antwort zu bearbeiten. Es ist jetzt korrigiert.
Arnaud
Auf jeden Fall die beste Antwort! Thx
Bertrand Bloc'h
1
In meinem Fall "fb: // profile / PageId" - sein öffnender Newsfeed; nicht die Facebook-Seite :(
Avisek Chakraborty
@AviC Haben Sie sichergestellt, dass Sie den Seitenwert geändert haben (anstelle von PageName)?
Arnaud
11

Für iOS 9 müssen Sie die URLs auflisten, die Ihre App zur Verwendung des LSApplicationQueriesSchemes-Schlüssels in Ihrer Info.plist aufruft.

Überprüfen Sie hier .

<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>
Emre
quelle
2

Ich habe gerade dieses URL-Schema gefunden fb://profile?id={userid/username/pageid} und es funktioniert ab dem 30. August 2020 einwandfrei.

z.B: fb://profile?id=4 ODERfb://profile?id=zuck

Warnung: Die Verwendung erfolgt auf eigenes Risiko, da dies nicht in der Dokumentation der Facebook-Entwickler dokumentiert ist. Dieses URL-Schema kann in Zukunft von der Facebook-App ohne Vorwarnung und Angabe entfernt werden.

John Cena
quelle
Ich habe es 2018 hier gefunden und bestätigt, dass es funktioniert, daher sollte es ein "ziemlich stabiles" URL-Schema sein: tutorialspoint.com/…
Alex Predescu
Arbeitslösung Oktober 2020
Naveed Ahmad
1

Nach vielen Tests habe ich eine der effektivsten Lösungen gefunden:

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

Die Reihenfolge der Sätze "wenn sonst" variiert nach Ihren Wünschen ...

Genieß es!! :-)

Javier Amor Penas
quelle
1

Swift 2.3

Für Code können Sie dieses Beispiel verwenden:

Hinweis: Wenn Sie die Facebook-Profil-ID nicht finden können, können Sie dies auf der folgenden Website tun ( 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")!)
    }
}

Für Info.plist müssen Sie die folgenden Parameter einstellen:

Hinweis: Zum Öffnen der Info.plist im Quellmodus

-Gehen Sie zur Datei Info.plist und klicken Sie nach rechts

-Wählen Sie "Öffnen als"

-Wählen Sie "Quellcode"

- Code über einen anderen setzen

<key>LSApplicationQueriesSchemes</key>
<array>
 <string>fb</string>
 <string>fbapi</string>
 <string>fbauth2</string>
 <string>fbshareextension</string>
 <string>fb-messenger-api</string>
</array>
Cristian Mora
quelle
1

// Swift 5, mit dieser Funktion können Sie fb Seite / Profil öffnen

       func openFacebookPage() {
            let facebookURL = NSURL(string: "fb://profile/PageId")!
            if UIApplication.shared.canOpenURL(facebookURL as URL) {
            UIApplication.shared.open(facebookURL as URL)
        } else {
            UIApplication.shared.open(NSURL(string: 
             "https://www.facebook.com/PageName")! as URL)
           }
      }
//By Using PageId or name only
      func openFacebookPage(pageID:String) {
            let facebookURL = NSURL(string: "fb://profile/\(pageID)")!
            if UIApplication.shared.canOpenURL(facebookURL as URL) {
            UIApplication.shared.open(facebookURL as URL)
         } else {
             UIApplication.shared.open(NSURL(string: "https://www.facebook.com/\ 
           (pageID)")! as URL)
         }
     }
//By Using Url only
     func openFacebookPageURL(url:String) {
               let facebookURL = NSURL(string: url)!
               if UIApplication.shared.canOpenURL(facebookURL as URL) {
               UIApplication.shared.open(facebookURL as URL)
            } else {
               UIApplication.shared.open(NSURL(string: url)! as URL)
            }
        }
Pushker Pandey
quelle
Bitte erläutern Sie Ihre Antwort zum besseren Verständnis.
Ankit Das