Ich habe einen Knopf, um einen Link zu teilen. Ich benutze grundsätzlich zwei Anrufe:
openActiveSessionWithReadPermissions
und requestNewPublishPermissions
.
Das ist also die Tastenaktion:
%Vor%und damit verlange ich die Veröffentlichungserlaubnis, wenn in der Sitzung keine Erlaubnis gefunden wird
%Vor%_share schreibt einfach etwas
%Vor% Zum ersten Mal versuche ich zu teilen (bereits angemeldet FB in iOS6 und App bereits autorisiert) Abschlusshandler von openActiveSessionWithReadPermissions
wird zweimal aufgerufen:
einmal mit FBSessionStateOpen und einmal mit FBSessionStateOpenTokenExtended (aus dem Aufruf von openSessionForPublishPermissions).
Als Konsequenz wird _share
auch zweimal aufgerufen, zum ersten Mal im else
-Teil von _prepareShare
(wenn ich bereits über Veröffentlichungsberechtigungen verfüge) und zum zweiten Mal im Beendigungshandler von openSessionForPublishPermissions.
Also habe ich einen doppelten Post auf Facebook Wall, nur das erste Mal, dass ich jemals in der App teile. Ich hatte auch einen Absturzbericht für FBSession: It is not valid to reauthorize while a previous reauthorize call has not yet completed
(ich konnte es nicht wiederholen).
Was ist der richtige Weg, um mit dieser Situation umzugehen?
Es scheint so zu sein, dass das Facebook SDK per Verweis Referenzen auf Blockhandler enthält, selbst nachdem sie aufgerufen wurden. In Ihrem Aufruf von openActiveSessionWithReadPermissions kann der Beendigungshandler daher mehrmals aufgerufen werden, falls sich der Sitzungsstatus ändert. Siehe Facebooks kommentieren dieses Problem hier .
Als Umgehung möchten Sie möglicherweise einen eigenen Mechanismus implementieren, der sicherstellt, dass der Handler nur einmal ausgelöst wird:
%Vor%Sie können dies verwenden
%Vor%}
und publishFacebook-Methode
%Vor%}
Bitte lesen Sie Upgrade von 3.0 auf 3.1 , insbesondere den Absatz Bitte um Lesen & amp; Schreiben Sie Berechtigungen separat . Es sieht so aus, als ob Facebook SDK nicht dazu gedacht ist, so verwendet zu werden.
Sie müssen jetzt die Lese- und Veröffentlichungsberechtigung separat anfordern (und in dieser Reihenfolge). Wahrscheinlich werden Sie die Leseberechtigungen für die Personalisierung anfordern, wenn die App gestartet wird und der Benutzer sich zuerst anmeldet. Später kann Ihre App ggf. Veröffentlichungsberechtigungen anfordern, wenn sie Daten an Facebook senden möchte.
und
Es ist wichtig, dass Sie nicht einfach versuchen, die beiden einzelnen Methoden nacheinander aufzurufen, um eine der veralteten Funktionen zu ersetzen.
Ich frage mich, wie Sie dieses Problem lösen konnten. BTW, ich bekomme den gleichen Absturzbericht (FBSession: Es ist nicht zulässig, erneut zu autorisieren, während ein vorheriger Reauthorize-Aufruf noch nicht abgeschlossen ist).
Tags und Links objective-c ios facebook facebook-ios-sdk