2015-11-08 15 views
8

Ich habe eine Facebook-Anwendung auf Leinwand, die sowohl eine Webseite als auch eine bestimmte mobile Seite enthält. Die Webseite funktioniert gut und auch bei der Simulation des Browsers mit der Konsole funktioniert alles gut.Facebook Canvas, Einloggen von Facebook auf Mobilgeräten nicht möglich

Aber wenn ich versuche, die App von der Facebook Mobile App zu starten, wird die Canvas-App geladen (was korrekt ist), aber sie loggt sich nicht ein.

Ich verwende die Funktion FB.login.

login: function() { 
     var deferred = $q.defer(); 
     FB.login(function (response) { 
      if (!response || response.error) { 
       deferred.reject('Error occured'); 
      } else { 
       deferred.resolve(response); 
      } 
     }, { 
      scope: 'email, user_friends' 
     }); 
     return deferred.promise; 
    }, 

und in den Einstellungen> Erweitert - Ich habe das: Kunden OAuth Anmeldung, Web OAuth Anmeldung, Embedded Browser OAuth Anmeldung, Valid OAuth URIs umleiten und Anmeldung von Geräten korrekt ausgefüllt.

aber immer noch von der Facebook Mobile App die Canvas-App nicht die Anmeldung vor.

Ich habe versucht, dies den ganzen Tag zu arbeiten. und ich kann nirgends eine Lösung finden. Ich kann auch nicht die mobile Facebook App debuggen.

irgendwelche Ideen, wie man dieses Problem angeht?

EDIT

sah auch mein Knoten Server-Logs an und ich sehe, dass die FB.login nicht einmal genannt.

EDIT 2

ich die Anmeldung mit getLoginStatus ersetzt endete die seit ihrer Facebook-Leinwand App kein Problem für mich stellt ... aber die Frage bleibt, wie das Login zu tun.

EDIT 3 11/26/2015

gut so getLoginStatus vollständig nicht mein Problem lösen, da es in der Tat nicht den Benutzer anmelden, um für die Leinwand-Spiele müssen Sie wahrscheinlich für den ersten Eintrag anmelden wenn Sie Berechtigungen ... meine Lösung benötigen war die Anmeldung zu addieren, wenn die getLoginStatus kehrt wie so not_autorized:

 /** 
    * [getLoginStatus get the FB login status] 
    * @return {[type]} [description] 
    */ 
    getLoginStatus: function() { 
     var deferred = $q.defer(); 
     FB.getLoginStatus(function (response) { 
      if (response.status === 'connected') { 
       deferred.resolve(response); 
      } else if (response.status === 'not_authorized') { 
       _fbFactory.login().then(function (fbLoginResponse) { 
        deferred.resolve(fbLoginResponse); 
       }); 
      } else { 
       deferred.reject('Error occured'); 
      } 
     }); 
     return deferred.promise; 
    }, 

Aber warten Sie, es gibt noch mehr ... die FB.login Funktion wird nicht gut auf mobile Leinwand Spiele (nicht sicher, ob es nicht ausgelöst wird oder die Browser die Popups oder beide bloggen). trotzdem müssen Sie sie aktiv ... per Taste rufen so für mobile Leinwand Spiele ich einen Start spielen Schaltfläche hinzufügen hatte und dann die Anmeldung funktioniert ..

EDIT 4 (Final)

schließlich I bemerkte, dass FB.login() nicht ausgelöst wird, es sei denn, es ist ein externes Ereignis, das es auslöst, also musste ich eine Änderung für Mobile Canvas vornehmen, wenn der getLoginStatus nicht verbunden zurückkehrt, dann zeige ich eine Login-Schaltfläche, die die Anmeldung ausführt ... Der Rest blieb gleich. was ich getan habe für mobile nur auf die akzeptierte Antwort ähnlich war meine Bedürfnisse anzupassen ...

Ich hoffe, das jemand außer mir hilft ...

+0

Erhalten Sie eine Antwort von der FB.Login Methode? Testen Sie Chrome Remote Debugging, https://www.youtube.com/watch?v=HEqwnpLYnI0&feature=youtu.be. –

+0

Was ist die Antwort von 'getLoginStatus'? – Rayon

+0

Ich habe die Benutzer-ID und accessToken, was ich brauchte. –

Antwort

1

Stellen Sie sicher, FB sind anrufen.login() mit einem Ereignis, das vom Benutzer ausgelöst wird, z. B. ein Klick auf eine Schaltfläche, da Browser potenziell unsicheres/gefährliches Javascript, das direkt aufgerufen wird, blockieren können. Dies ist eine zusätzliche Sicherheitsebene für den Endbenutzer. Es gibt zwei Möglichkeiten, um eine Login-Button zu erstellen:

  1. Generieren Sie einen Login-Button mit Facebooks Button Generator einloggen: https://developers.facebook.com/docs/facebook-login/web/login-button

Die erzeugte Login-Taste, um diese ähnlich aussehen:

<fb:login-button scope="public_profile,email" onlogin="checkLoginState();"> 
</fb:login-button> 
  1. Erstellen Sie Ihr eigenes HTML und verwenden Sie ein onclic k Ereignis nennen FB.init():
    <button onclick="FB.init()">Login</button> 
    

Mitschrift von der Facebook-Entwickler-Website:

Da für diese Funktion in den Referenz docs erwähnt, es ergibt sich ein Das Popup-Fenster zeigt das Anmeldedialogfeld und sollte daher nur aufgerufen werden, wenn jemand auf eine HTML-Schaltfläche klickt (damit das Popup nicht von Browsern blockiert wird).

https://developers.facebook.com/docs/facebook-login/web

Auch ist FB.getLoginStatus der richtige erste Schritt in der Anmeldung, ob die Benutzer zu überprüfen, in Facebook und in der App angemeldet ist.

Es gibt ein paar Schritte, die Sie benötigen, um zu folgen Facebook Login in Ihre Web-Anwendung zu integrieren, von denen die meisten im Quickstart Beispiel am Anfang der Seite enthalten sind. Auf einem hohen Niveau das sind:

  1. den Login-Status prüfen, um zu sehen, ob jemand bereits in der App angemeldet ist. Während dieses Schritts sollten Sie auch überprüfen, ob sich jemand zuvor bei Ihrer App angemeldet hat, aber momentan nicht angemeldet ist.
  2. Wenn sie nicht angemeldet sind, rufen Sie den Anmeldedialog auf und fragen nach einer Reihe von Datenberechtigungen.
  3. Überprüfen Sie ihre Identität.
  4. Speichern Sie das resultierende Zugriffstoken.
  5. Machen Sie API-Aufrufe.
  6. Abmelden.

Ich sehe, dass Ihr Spiel kein Login mehr benötigt, aber vielleicht werden andere diese Antwort hilfreich. :)

+0

Ich habe bereits alle meine Probleme gelöst ... Ihre Antwort ist für mobile Geräte korrekt Die FB.login() wird nicht ohne Klick ausgelöst, meine Lösung enthielt keine Schaltfläche für das Web-Canvas und eine Schaltfläche für die mobile Leinwand. wird meine Frage aktualisieren. wird diese Antwort akzeptieren. –

Verwandte Themen