Ich aktualisiere eine App, um das neueste Facebook SDK zu verwenden, um Zugriff auf die iOS6 native Facebook-Unterstützung zu erhalten. Es verwendet derzeit eine ziemlich alte Version des Facebook SDK.Fehler bei der Verwendung von [FBSession openActiveSessionWithPublishPermissions: ..]
Die App benötigt die "publish_actions" -Erlaubnis von Facebook für das einzige, was es mit Facebook macht.
Ich dachte ursprünglich, ich könnte [FBSession openActiveSessionWithPublishPermissions: ...]
verwenden, aber das scheitert an iOS6, wenn der Benutzer Facebook in iOS6-Einstellungen konfiguriert hat. Es schlägt fehl, weil diese Anforderung from the Facebook docs:
Hinweis, iOS 6 nativen Auth zu verwenden, Apps müssen, um die Art, wie sie Berechtigungen von den Benutzern verlangen ändern - Anwendungen müssen ihre Anträge getrennt für und Schreibberechtigungen lesen. Das Facebook SDK für iOS unterstützt diese -Funktionen und hilft Entwicklern beim Erstellen von Apps, die unter mehreren iOS-Versionen und Gerätekonfigurationen funktionieren.
Dies ist eine große PITA, IMO. Unsere Präferenz wäre, den Benutzer einmal um Erlaubnis zu bitten und damit fertig zu werden, aber das "neue" Ideal pro Apple/Facebook besteht darin, spezifische Berechtigungen im Kontext anzufordern, wenn sie benötigt werden, aber noch nicht gewährt werden.
Der Plan im Moment besteht darin, unser altes Verhalten für iOS5-Benutzer und iOS6-Benutzer beizubehalten, bei denen Facebook nicht in den Einstellungen konfiguriert wurde. Und konform mit der neuen doppelten Eingabeaufforderung für iOS6-Benutzer, die nativen Zugriff verwenden.
Die Frage ist, was ist der beste Weg, dies zu tun? Wie soll ich herausfinden, ob das Facebook SDK den iOS6 nativen Login gegen die Fallback-Mechanismen auswählt? Betrachte ich etwas Offensichtliches?
EDIT:
gerraldWilliam setzte mich auf dem richtigen Weg. Seine Lösung würde fast funktionieren, außer dass ACAccountTypeIdentifierFacebook in iOS5 nicht verfügbar ist. Wenn der Benutzer den FB-Zugriff in den Einstellungen für die App blockiert, gibt der Aufruf accountsWithAccountType außerdem ein leeres Array zurück.
Es ist möglich, um das erste Problem zu erhalten, indem für den Kontotyp passenden Kennung „com.apple.facebook“ zu fragen - das Null auf iOS5 zurückkehren, und ein echten Kontotyp Objekt auf iOS6.
Aber das zweite Problem ist unlösbar. Mein neuer Plan ist, die erste Sitzung auf iOS6 immer mit schreibgeschützten Berechtigungen zu öffnen und später, im Kontext, die Berechtigung zum Veröffentlichen bei Bedarf einzugeben. Unter iOS5 öffne ich immer noch die erste Sitzung mit der gewünschten publish_actions-Berechtigung. Hier ist der Code:
ACAccountStore* as = [[ACAccountStore new] autorelease];
ACAccountType* at = [as accountTypeWithAccountTypeIdentifier: @"com.apple.facebook"];
if (at != nil) {
// iOS6+, call [FBSession openActiveSessionWithReadPermissions: ...]
} else {
// iOS5, call [FBSession openActiveSessionWithPublishPermissions: ...]
}
Diese fast funktioniert. Zwei Probleme sind 1) ACAccountTypeIdentifierFacebook ist auf iOS5 nicht verfügbar und 2) accountsWithAccountType gibt ein leeres Array zurück, wenn der Benutzer den FB in den Einstellungen konfiguriert hat, aber den Zugriff auf die aufrufende App blockiert hat. Kennzeichnung als die richtige Antwort, da sie mich auf den Weg zu meiner ultimativen Lösung brachte, die ich in die Frage stellen werde. – TomSwift
'accountsWithAccountType' gibt ein leeres Array für mich zurück, auch wenn ich in iOS 6 bin, wurde die Facebook-Integration konfiguriert und es ist möglich zu posten. – jowie
Auch ist für mich leer, und bekommt diesen nervigen Fehler com.facebook.sdk Fehler 2 ... Irgendwelche Tipps? – D33pN16h7