2 Stimmen

Sharekit für Facebook (Graph API-Version) Logout-Methode nicht vollständig abmelden oder De-Autorisierung Benutzer

Ich verwende Sharekit für die Facebook-Freigabe mit der Facebook Graph API. Ich habe versucht, den neuesten, aktuellsten Code zu finden (troppoli auf github scheint ziemlich aktuell).

Die Verwendung von sharekit zum Abmelden von Twitter funktioniert mit der Zeile [SHK logoutOfService:@"SHKTwitter"] problemlos; die gleiche Zeile für Facebook, [SHK logoutOfService:@"SHKFacebook"], führt jedoch zu anderen Ergebnissen.

Wenn ich mich wieder anmelden möchte, wird der Anmeldebildschirm nicht angezeigt. Stattdessen erscheint ein Bildschirm mit dem Text: "Sie haben sich bereits autorisiert ... Drücken Sie OK, um fortzufahren." Dann am unteren Rand des Bildschirms: "Angemeldet als ..." und "Abmelden". Der Benutzer ist aber angeblich bereits abgemeldet.

Noch schlimmer ist, dass ich, wenn ich auf die Schaltfläche "Okay" drücke, um fortzufahren, die Fehlermeldung erhalte: "Der Vorgang konnte nicht abgeschlossen werden. (NSURLErrorDomain-Fehler -999.)

Ich glaube, ich muss ShareKit anpassen, damit das funktioniert, aber das möchte ich nicht tun. Hat jemand anderes über diese kommen?

2voto

Mark Struzinski Punkte 32275

Sie müssen sicherstellen, dass Sie das URL-Schema in Ihrer info.plist richtig eingerichtet haben. Stellen Sie in Ihrer info.plist sicher, dass Sie Ihre CFBundleURLTypes für Facebook eingerichtet haben:

<key>CFBundleURLTypes</key>
<array>
    <dict>
        <key>CFBundleURLName</key>
        <string></string>
        <key>CFBundleURLSchemes</key>
        <array>
            <string>fb{app_id}</string>
        </array>
    </dict>
</array>

Ersetzen Sie {app_id} durch Ihre Facebook-App-ID.

Sie müssen auch einen Handler in Ihrem App-Delegaten hinzufügen, um auf den Callback zu reagieren, nachdem sich der Benutzer über Mobile Safari authentifiziert hat:

-(BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url{
    return [SHKFacebook handleOpenURL:url];
}

-(BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication 
         annotation:(id)annotation{
    return [SHKFacebook handleOpenURL:url];
}

Mit diesen Änderungen ist das Problem für mich behoben.

1voto

SAHM Punkte 3968

Ich bin mir ziemlich sicher, dass dies etwas mit dem neuen Facebook Single-Sign-On (SSO) zu tun hat. Wenn der Benutzer Facebook Version 3.2.3 oder höher installiert hat, oder wenn Safari auf dem Gerät (oder Simulator) ist, findet die Autorisierung jetzt AUSSERHALB der App statt. Ich werde mehr posten, sobald ich es finde.

EDIT: Abgesehen von dem NSURL-Fehler scheint es, dass dies das erwartete Verhalten mit dem neuen Facebook SSO ist. Die Benutzer sollen in einem Pseudo-Anmelde-/Abmeldezustand bleiben, nachdem sie sich aus Ihrer App abgemeldet haben, für den Fall, dass sie in einer anderen App angemeldet sind, usw. - Das ist jetzt alles miteinander verbunden. Um sich wirklich von Facebook abzumelden (z. B. um sich als jemand anderes anzumelden), muss der Benutzer anscheinend auf den Abmeldelink in der Berechtigungs-Webansicht klicken, der angezeigt wird, wenn er in Ihrer App von Facebook "abgemeldet" ist. Ich könnte mich irren, aber ich bin mir da ziemlich sicher.

Abgesehen davon habe ich einen Weg gefunden, den NSURL-Fehler loszuwerden, und das macht die Sache viel besser und viel angenehmer. Siehe Wie behebe ich den NSURLErrorDomain-Fehler -999 auf dem iPhone? .

Weitere Informationen über das neue Facebook SSO:

Auszug aus Facebook iOS Tutorial (siehe insbesondere den letzten Absatz):

Schritt 3: Implementierung von Single Sign-On (SSO)

Eine der überzeugendsten Funktionen des iOS (SSO). Mit SSO können sich Benutzer mit ihrer Facebook-Identität bei Ihrer App Identität anmelden. Wenn sie bereits bei der Facebook iOS-App auf ihrem Gerät angemeldet sind Gerät angemeldet sind, müssen sie nicht einmal einen Benutzernamen und ein Passwort eingeben. Da sie sich außerdem mit ihrer Facebook-Identität bei deiner App anmelden, kannst du Identität anmeldet, kannst du die Erlaubnis des Nutzers für den Zugriff auf seine Profilinformationen und den Social Graph.

SSO funktioniert in erster Linie durch die Umleitung des Benutzers zu t Gerät. Da der Nutzer bereits bei Facebook angemeldet ist, muss er seinen muss er seinen Benutzernamen und sein Passwort nicht eingeben, um sich zu identifizieren. Sie wird der Autorisierungsdialog mit den Berechtigungen angezeigt, um die Ihre App gebeten hat und wenn er zustimmt, wird er zu deiner App mit den entsprechenden Berechtigungen weitergeleitet. dem entsprechenden access_token.

Entwickler sollten sich darüber im Klaren sein, dass sich Facebook SSO etwas anders verhält unterschiedlich verhält, je nachdem, was auf dem Gerät des Benutzers installiert ist. Dies ist passiert bei bestimmten Konfigurationen:

Wenn die App in einer Version von iOS läuft, die die und wenn auf dem Gerät die Facebook-App der Version 3.2.3 oder höher installiert ist, versucht das SDK, den Autorisierungsdialog innerhalb der der Facebook-App zu öffnen. Nachdem der Benutzer die Autorisierung erteilt oder abgelehnt hat, leitet die Facebook-App zurück zur aufrufenden App und übergibt das Autorisierungs-Token, die Gültigkeitsdauer und alle anderen Parameter, die der Facebook OAuth-Server zurückgeben kann.

Läuft das Gerät in einem v Multitasking unterstützt, aber nicht über die Facebook-App der Version 3.2.3 oder oder höher installiert ist, wird das SDK Safari. Nachdem der Benutzer die Genehmigung erteilt oder zurück wieder zur aufrufenden App zurück. Ähnlich wie bei der Facebook-App-basierten Autorisierung erlaubt dies mehreren Anwendungen, denselben Facebook Benutzer access_token über das Safari-Cookie gemeinsam nutzen.

Wenn die App mit einer iOS-Version läuft, die die folgenden Funktionen nicht unterstützt Multitasking unterstützt, verwendet das SDK die alte UIWebView, das den Benutzer auffordert, sich anzumelden und Zugriff zu gewähren. Das FBSessionDelegate ist eine Callback-Schnittstelle, die Ihre App implementieren sollte: Die Methoden des Delegates werden aufgerufen, wenn die App erfolgreich anmeldet oder abmeldet. Lesen Sie die iOS SDK Dokumentation für weitere Details zu diesem Delegaten.

...

Wenn der Benutzer die Facebook-Integration mit Ihrer App nicht mehr nutzen möchte, können Sie die Logout-Methode aufrufen, um den Status der App zu löschen und eine Serveranfrage stellen, um das aktuelle access_token ungültig zu machen.

[facebook logout:self]; Sie können die Funktion des FBSessionDelegate-Protokolls implementieren, um alle Aktionen nach dem Logout zu durchführen möchten.

Beachten Sie, dass die Abmeldung Ihre Bewerbung nicht widerrufen wird. sondern es wird lediglich das access_token Ihrer Anwendung gelöscht. Wenn ein Benutzer, der der sich zuvor von Ihrer Anwendung abgemeldet hat, zurückkehrt, sieht er lediglich eine Benachrichtigung, dass er sich bei Ihrer Anwendung anmeldet, und nicht eine Benachrichtigung zum Erteilen von Berechtigungen. Um die Berechtigungen einer Anwendung zu ändern oder zu widerrufen zu ändern oder zu widerrufen, kann der Benutzer die Seite "Anwendungen, Spiele und Websites" auf dem Dashboard der Privatsphäre-Einstellungen von Facebook aufrufen. Du kannst auch die Berechtigungen einer Anwendung widerrufen Aufruf.

Ich hoffe, das hilft Ihnen, lassen Sie es mich wissen, wenn Sie etwas anderes finden.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X