Wie bekomme ich UIWebView zu öffnen, Facebook-login-Seite, in Reaktion auf das OAuth-Anfrage auf iOS 5 und iOS 6?
Haben wir:
(1) Facebook-API-basierte web-Anwendung mit Facebook-OAuth-Funktionalität ("der FB-web-app")
(2) UIWebView
-basierten browser auf dem iPad ("Browser")
Unser Ziel ist es, öffnen Sie die Facebook-Login-Seite zum anmelden auf der FB-web-app (1) innerhalb der UIWebView-basierten Browser (2) auf dem iPad.
Gibt es ein etwas ähnliches Problem hier:
http://facebook.stackoverflow.com/questions/11337285/no-longer-able-to-login-to-ios-app-via-oauth-the-page-requested-was-not-found
Jedoch, das Thema, die Frage geschieht, nachdem der Benutzer login und Passwort in das Facebook-Formular. Unser problem ist, dass wir nicht bekommen kann die Facebook login-Formular angezeigt, in den ersten Platz. Ändern der app-Typ aus "Web" auf "Native/Desktop", wie vorgeschlagen, in dieser Frage nicht helfen.
Schritte aus:
1. Öffnen Sie unsere web-Seite (HTML-Seite) mit dieser UIWebView
Browser
2. Klicken Sie auf "FB-web-app" launch-button auf dieser Seite
3. OnClick JavaScript versucht zu initiieren, OAuth, sollte das öffnen der login-Bildschirm von Facebook zum anmelden auf der FB-web-app
Aktuelle Ergebnis (Ausgabe):
Auf iOS 5.+ und iOS 6.+ Geräte
- Unsere web-Seite bleibt unverändert
- Facebook login-Seite wird NICHT angezeigt (unsere web-Seite wird immer noch angezeigt)
Auf iOS 4.3 (funktioniert wie erwartet):
- die Facebook-login-Seite wird geöffnet, in der gleichen UIWebView
- Objekt des Browsers (ersetzt unsere web-Seite)
Erwartete Ergebnisse:
- Facebook login-Seite wird angezeigt, und der Benutzer kann eingeben, Facebook login & password
- Funktioniert auf iOS 5.+ und iOS 6.+ wenn gestartet, im Safari-browser auf dem iPad. Facebook-login-Seite öffnet sich in einem separaten tab (im Gegensatz dazu gibt es keine separaten Registerkarten in UIWebView
)
Frage: Wie bekomme ich UIWebView
zu öffnen, Facebook-login-Seite, in Reaktion auf das OAuth-Anfrage auf iOS 5+ und iOS 6+?
Mehr technische details:
Protokollieren wir verschiedene NSURLRequest
Felder innerhalb
-(BOOL)webView(UIWebView*)webView shouldStartLoadWithRequest(NSURLREquest*)request navigationType:…
Haben und wir bemerken Sie Unterschiede in den Protokollen für die "richtige" und "falsche" Verhaltensweisen. Hier wie ausführungsabläufe für mich Aussehen:
Erstens, ich drücke "FB-Web-App" launch-Taste zum einleiten OAuth, dann einige Fälle gehen
iOS 4.3, "richtige"
Anfrage zu www.facebook.com/dialog/oauth?...
Anfrage zu fbwebapp.com
Anfrage zu m.facebook.com/login.php?....
--hier facebook login erscheint
iOS 5.0, "incorrect1"
Anfrage zu www.facebook.com/dialog/oauth?...
Anfrage zu fbwebapp.com
Anfrage zu m.facebook.com/login.php?...
Dann kann es sein
--viel m.facebook.com/login.php?...with next... Parameter
gefolgt von sqlite-Fehler
--jetzt sehe ich "Sorry, etwas ist schief gelaufen" - Seite von facebook (es ist ein ersten mal überhaupt erlebe ich es)
iOS 6.0 "incorrect2"
Anfrage zu www.facebook.com/dialog/oauth?...
Anfrage zu fbwebapp.com
-(void)webView:(UIWebView*)webView didFailLoadWithError:(NSError*)error aufgerufen wird, mit Fehlercode -999
Können Sie sehen, dass das Verhalten hängt definitiv an iOS-version. Aber häufiger der Fall ist, der Fehler passiert auf der Stufe der Beschaffung m.facebook.com/login.php.. URL. Aber das ist alles, was wir erkennen können.
Sind wir knallten unsere Köpfe gegen die Wand für den ganzen Tag nach Lösungen gesucht. Hoffnungslos.
Können Sie uns helfen, die Facebook-Login-Seite geöffnet, in der UIWebView
in Reaktion auf OAuth?
InformationsquelleAutor user1812802 | 2012-11-09
Du musst angemeldet sein, um einen Kommentar abzugeben.
verwenden Sie einfach : dieser code
//hier
manager.loginBehavior = FBSDKLoginBehaviorWeb;
ist alle müssen Sie öffnen Sie facebook inUIWebview
InformationsquelleAutor Navpreet
Haben es geschafft!
Es irgendwie ein hack, aber der js-facebook sdk anmelden auf UiWebView unter iOS 6 funktioniert endlich.
Wie es getan werden könnte? Es ist eine Reine JS + Facebook JS SDK + UIWebView Delegieren-handling-Funktionen Lösung.
JS - Erster Schritt)
einen login-button (für die Verbindung mit facebook) ruft diese Funktion beispielsweise, dass löst Gesicht JS login/oauth-Dialoge:
JS - Zweiter Schritt)
hinzufügen authResponseChange Zuhörer jedes mal, wenn Benutzer lädt die Webseite nach FB.init() ) zu fangen Benutzers verbunden status:
UND mit app UIWebView Delegierten Funktionen können Sie handler facebook oauth Antworten
Objective C - Dritter Schritt)
So, wenn 'redirect' - Benutzer zu der zuletzt geladenen Seite, den zweiten Schritt zu gehen, um handler Benutzer-Aktion bei facebook-login-Dialoge.
Wenn ich zu schnell mit dieser Antwort, Fragen Sie mich bitte!
Hoffe, es hilft.
InformationsquelleAutor owlmsj
Falls jemand googeln, hier ist was für mich gearbeitet:
Ich blieb eine Reihe der Umsetzung von hier.
Abhängig von Ihrem web-Umsetzung, wird es wahrscheinlich ein extra-Schritt. Die Facebook-Skript tatsächlich ausführt, eine
window.close()
dann einwindow.open()
dann einwindow.close()
. Für mich war dies verursacht Probleme, weil auf der web-Seite, nachdem diese Anmeldung ist abgeschlossen, mein Fenster auf (z.B. für die webView, dass ich will, dass die Benutzer-log-in) war immer einwindow.close()
nennen, kommen aus dem Facebook SDK. Ich gehe davon aus dies ist, weil die Facebook-SDK rechnet damit, dasswindow.open()
Aufruf ein neues Fenster öffnen, wird es zu schließen.Da wir nicht überschreiben die Funktionalität des
window.open()
Aufrufwindow.open()
wird nicht alles tun, und das Facebook SDK wird versuchen, Ihre Fenster zu schließen. Dies könnte dazu führen, dass alle Art von Problemen, sondern für mich, denn ich bin mit Analysierenwindow.localStorage
warnull
so war ich immer alle Arten von Fehlern.Wenn so etwas passiert, für Sie, haben Sie zwei Möglichkeiten, um es zu beheben:
window.close=function(){}
window.close
für die Haupt-webView, wie wir es für das popUp die "Webansicht" aus, oder überschreiben Sie diewindow.open
Funktion öffnet sich wieder ein popUp (das ist beschrieben in mehr Details hier)weiß nicht, warum - Verwendung von nicht deklarierter Bezeichner 'JSContext' kommt.
ah ok, musste den import - #import <JavaScriptCore/JavaScriptCore.h>
Er funktioniert perfekt!
InformationsquelleAutor taylorstine
Verwenden Sie die FBDialog Klasse Aufforderung an den Benutzer, um sich einzuloggen. Dies wird ein webview innerhalb der app, also auf dem erfolgreichen login der Benutzer werden protokolliert, im inneren eines jeden UIWebView:
Dann stellen Sie Ihre Klasse halten, die FBDialogDelegate-Protokoll, und fügen Sie diese Funktion, um Ihre Klasse:
HTH!
InformationsquelleAutor Ameesh Kapoor
Wie facebook login in UIWebView.
Objective-c
Verwenden taylorstine Antwort.
Er meinen Tag gerettet. Danke taylorstine
Aber ich bin mit Swift 3. also habe ich einfach umgewandelt code unten aus taylorstine Antwort.
Swift 3.
InformationsquelleAutor solgit