Facebooks FBConnect SDK-Probleme auf iOS

8

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:

  1. Nachdem der Benutzer die App autorisiert hat, muss er sich nicht erneut anmelden.
  2. Nachdem der Benutzer die App autorisiert hat, wird der Buchungsdialog sofort geöffnet, ohne dass er den Code erneut ausführen muss (was mit einer Schaltfläche ausgelöst wird).
  3. Wenn der Benutzer die App nicht autorisiert, wird er anstelle des Fehlerdialogs
  4. erneut mit dem Autorisierungsdialog aufgefordert
  5. Wenn er die Autorisierung ablehnt, rufe ich eine Funktion auf, die einen Fehler / etc.
  6. anzeigt

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!

    
Niv 17.08.2011, 18:01
quelle

6 Antworten

8

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 .:

%Vor%

... und dein neues fbDidLogin :

%Vor%

(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:

%Vor%

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.

    
Ben Mosher 26.08.2011, 22:56
quelle
3

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.

    
Matt Huggins 18.08.2011 22:00
quelle
1

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.

    
Tamara 27.12.2011 13:13
quelle
0

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.

    
Ajay Sharma 20.08.2011 11:29
quelle
0

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.

    
Paul Ardeleanu 26.08.2011 20:31
quelle
0

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.

    
ch3rryc0ke 17.11.2011 01:36
quelle