Ich verwende FBConnect sdk, um Beiträge über die Anwendung in einem Benutzerprofil zu veröffentlichen. Ich habe eine Reihe von Problemen damit:
Wenn der entsprechende Code zum ersten Mal auf dem Gerät ausgeführt wird, wird der Benutzer wie gewünscht an die Facebook-App / Website weitergeleitet, die ihn auffordert, sie zu autorisieren. wenn der Benutzer es autorisiert, kehrt es zur Anwendung zurück, die einen "Connect to facebook" View Controller öffnet, der den Benutzer zur Anmeldung auffordert. Das ist seltsam, da der Benutzer bereits angemeldet ist. Wie könnte er sonst die App autorisieren ? aber ich schätze, das ist ok, da er sich noch nicht über die App eingeloggt hat. nachdem er sich anmeldet, tut es nichts. Nur wenn das Programm zum zweiten Mal ausgeführt wird, erhält der Benutzer nach dem Autorisieren der App den Buchungsdialog Wenn der Benutzer die App nicht autorisiert hat, wenn er nach dem Autorisierungsdialog wieder zu meiner App kommt, fordert er den Benutzer auf, sich einzuloggen (genau wie er es autorisiert hat) und tut nichts, nachdem er sich eingeloggt hat Code wird gelaufen, der Autorisierungsdialog öffnet sich, mit den optinos "Authorize" & amp; "App verlassen" anstelle von "Autorisieren" & amp; "Nicht autorisieren" / "Zulassen" & amp; "Nicht zulassen".
Wenn der Benutzer außerdem seine Autorisierung über die Einstellungen seines Accounts auf Facebook gelöscht hat, anstatt ihn lediglich um eine erneute Autorisierung zu bitten, erscheint ein Facebook-Dialog (anstelle des Post / Autorisierungsdialogs): "Ein Fehler aufgetreten. Bitte versuchen Sie es später erneut. " Der Versuch später hilft nicht. Es wird immer angezeigt, auch wenn Sie die App neu starten. Die einzige Möglichkeit, das Problem zu beheben, besteht darin, die App neu zu installieren. Dadurch wird das Dialogfeld zur Autorisierung erneut geöffnet Also hier ist, was ich erreichen möchte:
Hier ist der relevante Code:
MyViewController.m
%Vor%MyAppDelegate.h
%Vor%MyAppDelegate.m
%Vor% Ist es möglich, dass mir einige Delegate-Funktionen auf MyViewController fehlen? Weil ich aus irgendeinem Grund sehe, dass ich es als Implementierung des FBDialogDelegate-Protokolls markiert habe, obwohl er keine Funktion von dort implementiert.
Ich wäre wirklich froh, wenn ihr mir helfen würdet, denn das ist sehr frustrierend für mich. Ich konnte nichts darüber im Internet finden, und ich fühle mich wie hier im ertrinken.
Tnx im Voraus!
Erstens:
%Vor% Der offline_access
Schlüssel hält Ihr Authentifizierungs-Token für immer für immer (oder genauer gesagt, bis der Benutzer Ihre Anwendung in den Anwendungseinstellungen in ihre Facebook-Kontoeinstellungen). Stellen Sie Ihre aktive VC auch als Delegat ein (mehr dazu später).
Zweitens:
%Vor% Rufen Sie diese Methode (oder eine ähnliche) in Ihrer -fbDidLogin
-Delegatenmethode auf. Rufen Sie es auch in Ihrer ursprünglichen Methode auf, wenn die Sitzung noch gültig war, d. H .:
... und dein neues fbDidLogin
:
(Hinweis: Sie müssen dies in MyViewController.m
definieren und als Ihr FBSessionDelegate
verwenden. Es wird funktional gleichwertig sein. Ihr AppDelegate
muss nicht auch Ihr FBSessionDelegate
sein.
Drittens:
Implementieren Sie die Methode -fbDidNotLogin:(BOOL)cancelled
FBSessionDelegate
wie folgt:
Viertens, was Ihre bizarro-Fehler angeht: A) Die Facebook-SDKs im Allgemeinen sind nicht großartig, und B) Ich würde nur das Authentifizierungs-Token und das Ablaufdatum auf Ihrem facebook
-Objekt setzen, falls
A) Sie haben noch keine instanziiert (d. h. es ist nil
)
und
B) das von Ihnen eingestellte expirationDate liegt in der Zukunft (d. h. timeIntervalSinceNow
[die NSDate
instance-Methode], die aufgerufen wird, gibt & gt; 0) zurück.
Es scheint, als ob Sie das gleiche Problem haben, das in diesem Facebook Platform Developer Forum-Beitrag beschrieben wird . Ich stoße auf das gleiche Problem, aber im Web. Es wurde nur eine Antwort von Facebook in diesem Thread gegeben, und es sind falsche Informationen.
Facebook hat die schlechtesten Entwickler-Dokumente und Entwickler-Support aller Zeiten, ich würde nicht den Atem anhalten und auf eine Lösung warten.
Ich hatte ähnliches, aber nicht das gleiche Problem: Nachricht "Ein Fehler ist aufgetreten. Bitte versuchen Sie es später noch einmal." wurde immer angezeigt.
Das Problem war, dass die App-ID nicht richtig konfiguriert war - sie wurde vom Kunden bereitgestellt (ich bin mir also nicht sicher, was genau falsch war); alles funktioniert einwandfrei, seit ich es durch meine eigene Test-App-ID (aus der vorherigen App) ersetzt habe.
Ich habe FBConnect in so viele Anwendungen integriert, aber niemals mit so einem kritischen Problem konfrontiert. Es würde also etwas in deinem Code fehlen:
Kontrolliert FBAccessTokenKey & amp; FBExpirationDateKey, versuche es einfach mit dem Session-Objekt der FBSession-Klasse von FBConnect.
Versuchen Sie einfach, meinen Code mit einigen Einschränkungen zu verwenden:
%Vor%Achten Sie außerdem darauf, das Sitzungsobjekt nur in der Dealloc-Methode freizugeben, anstatt es in einer anderen Methode freizugeben.
%Vor%Ich hoffe, das würde Ihr Problem lösen.
Keine direkte Lösung für Ihre Code-Probleme, aber ...
Haben Sie daran gedacht, eine Open-Source-Bibliothek zu verwenden? ShareKit ist ein großartiges Beispiel: Ссылка . Die Integration ist tot einfach und es macht alles, was Sie brauchen.
Ich hatte genau das gleiche Problem und habe oben die Antwort von Ben Mosher verwendet, aber ich habe auch beschlossen, eine einfache Singleton-Klasse für das Facebook-Objekt zu erstellen, damit ich in meiner AppDelegate die folgende Funktion richtig handhaben kann:
%Vor% Meine Singleton-Klasse ist sowohl FBSessionDelegate
als auch FBDialogDelegate
, also behandelt sie die entsprechenden Methoden.
Damit kann ich den Benutzer nur dann zur Anmeldung auffordern, wenn er versucht, etwas zu posten, anstatt beim Start der App.
Tags und Links objective-c iphone ios fbconnect facebook