php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > PHP Developer Forum
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Fragen zu Laravel, YII oder anderen PHP-Frameworks.

Antwort
 
LinkBack Themen-Optionen Bewertung: Bewertung: 4 Stimmen, 5,00 durchschnittlich.
  #1 (permalink)  
Alt 30-06-2012, 10:42
PitPanda
 Registrierter Benutzer
Links : Onlinestatus : PitPanda ist offline
Registriert seit: Nov 2010
Beiträge: 22
PitPanda befindet sich auf einem aufstrebenden Ast
Standard Facebook App - Facebook Api problem

Hallo zusammen,

ich Entwickle momentan eine kleine Facebook Seite für jemanden. Die Anforderungen sind, dass diese Seite in einem iFrame Tab auf der "Unternehmensseite" (Chronik) erreichbar sein soll, wenn man nicht eingeloggt ist sich via Facebook Login einloggen kann und wenn man kein Fan ist, dass man die Inhalte erst sieht, wenn man die Seite Liked.

Jetzt stehe ich vor dem Problem, dass es soweit eigentlich funktioniert, allerdings nicht Browserübergreifend...

  • Im IE hab ich das Problem, das nachdem per oAuth erlaubt wurde, oder per Facebook eingeloggt wurde, die Seite anscheinend immer weitergeleitet wird und der Popup sich erneut öffnet, allerdings innerhalb von Millisekunden auch wieder schließt.
  • Im Firefox/Chrome geht es, außer das der Popup vom oAuth/Login geblockt wird.
  • Im Safari wird der oAuth in einem Tab, anstatt in einem Popup geöffnet, funktioniert aber nach erlauben bzw. einloggen.
  • In Opera öffnet sich der oAuth auch in einem Tab anstatt in einem Popup. Wenn man sich allerdings einloggt bzw. die App erlaubt, bleibt der Tab offen und die Seite lädt sich nicht neu, man muss sie von Hand aktualisieren.

Hier kommt jetzt der relevante Code:

PHP-Code:
<?php
require_once('./classes/facebook/facebook.php');
require_once(
'./classes/facebook/facebookhandler.class.php');
require_once(
'./app/mapping.php');

define(PAGE_ID'xxx');
define(APP_ID'xxx');
define(SITE_SECRET'xxx');
define(REDIRECT_URI'xxx');

$facebook = new Facebook(array(
        
'appId'  => APP_ID,
        
'secret' => SITE_SECRET,
        
'cookie' => true
));

// access Token
$accessToken $facebook->getAccessToken();

// own uri
$uri 'http'. ($_SERVER['SERVER_PORT'] != "80"  's' null) .'://'$_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];

// user
$user $facebook->getUser();

include 
'./templates/global/header.tpl';

if(
$user)
{
    try
    {
        
$userProfile $facebook->api('/me');
    } 
    catch (
FacebookApiException $e)
    {
        
$user null;
        
$userProfile false;
    }

}
else
{
    
$userProfile false;
}

if (
$userProfile)
{
    
$facebookHandler = new facebookhandler();
    
$facebookHandler->setLikeStatus($facebook->api($user.'/likes/' PAGE_ID));
    
$facebookHandler->setUser($facebook->api("/me"));
    
$like $facebookHandler->getLikeStatus();

    if(
$like)
    {
        
$ret true;
    }
    else
    {
        
$ret false;
    }
}
else
{
    
$ret false;
    echo 
'
    <script src="http://connect.facebook.net/en_US/all.js"></script>
    <div id="fb-root"></div>
    <script>
        FB.init({
            appId: "' 
APP_ID '",
            xfbml: true,
            cookie: true,
            oauth: true
        });
        
        FB.login({scope: "publish_stream"});
        
        FB.Event.subscribe("auth.login", function(response) {
            window.setTimeout(function () {
                location.reload(true);
            },0);
        });
    </script>
    <fb:login-button></fb:login-button>'
;
}
Kann mir da jemand weiterhelfen?

LG

Pit
Mit Zitat antworten
  #2 (permalink)  
Alt 30-06-2012, 12:54
wahsaga
  Moderator
Links : Onlinestatus : wahsaga ist offline
Registriert seit: Sep 2001
Beiträge: 25.236
wahsaga befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von PitPanda Beitrag anzeigen
Im IE hab ich das Problem, das nachdem per oAuth erlaubt wurde, oder per Facebook eingeloggt wurde, die Seite anscheinend immer weitergeleitet wird und der Popup sich erneut öffnet, allerdings innerhalb von Millisekunden auch wieder schließt.
Das wird ein Third-Party-Cookie-Problem sein.

Deine Seite von einer anderen Domain läuft im Iframe unter facebook.com, also bist du eine „Drittpartei“, und Cookies von deiner Seite werden dann ggf. geblockt.
Einen P3P-Policy-Header zu setzen, hilft in den meisten Fällen.

Zitat:
Im Firefox/Chrome geht es, außer das der Popup vom oAuth/Login geblockt wird.
Das kann dir in jedem Browser passieren, der entsprechend eingestellt ist. Popups zu blocken, die ohne Nutzerinteraktion ausgelöst werden, ist in den meisten aktuellen Browsern heute die Popupblocker-Defaulteinstellung.

Entweder rufst du FB.login erst auf einen Klick auf einen Link/Button hin auf – oder, wenn du den Login partout ohne Nutzerinteraktion aufrufen willst, wechselst du zum server-side flow, und leitest per top.location.href zu dessen Adresse weiter (das kann von der Weiterleitung zurück zu deiner App dann aber problematisch werden, Facebook kann ziemlich komisch sein darin, was sie für einen „korrekten“ redirect_uri halten).

Zitat:
Im Safari wird der oAuth in einem Tab, anstatt in einem Popup geöffnet
Sowas ist Einstellungssache im Browser, da hast du keinen Einfluss drauf.

Zitat:
In Opera öffnet sich der oAuth auch in einem Tab anstatt in einem Popup. Wenn man sich allerdings einloggt bzw. die App erlaubt, bleibt der Tab offen und die Seite lädt sich nicht neu, man muss sie von Hand aktualisieren.
K.A. woran das liegt, damit habe ich normalerweise keine Probleme.
Aber das mit dem direkten FB.login-Aufruf solltest du eh erst mal fixen.
__________________
I don't believe in rebirth. Actually, I never did in my whole lives.
Mit Zitat antworten
  #3 (permalink)  
Alt 30-06-2012, 13:07
wahsaga
  Moderator
Links : Onlinestatus : wahsaga ist offline
Registriert seit: Sep 2001
Beiträge: 25.236
wahsaga befindet sich auf einem aufstrebenden Ast
Standard

Noch ein paar Punkte:

Zitat:
Zitat von PitPanda Beitrag anzeigen
PHP-Code:
// access Token
$accessToken $facebook->getAccessToken(); 
Wozu? Die Variable benutzt du anschließend nicht mehr.

Zitat:
PHP-Code:
// own uri
$uri 'http'. ($_SERVER['SERVER_PORT'] != "80"  's' null) .'://'$_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']; 
Wozu? Die Variable benutzt du anschließend nicht mehr.
Abgesehen davon, ist $_SERVER['HTTPS'] m.E. besser geeignet um herauszufinden, ob der Aufruf über HTTPS erfolgte.

Zitat:
PHP-Code:
    $facebookHandler->setLikeStatus($facebook->api($user.'/likes/' PAGE_ID)); 
Das wird nicht funktionieren, solange du den Nutzer nicht auch nach der Berechtigung fragst, seine Likes zu lesen.

Brauchst du aber auch gar nicht, weil du innerhalb eines Page Tabs diese Information direkt im signed_request findest.
(Achtung, der ist nur beim ersten Seitenaufruf im Iframe gesetzt. Ergebnis von Facebook::getSignedRequest in die Session speichern, wenn immer der Wert nicht false ist, wäre meine Empfehlung. Abfrage auf false oder nicht, damit du Änderungen auch mitbekommst, und nicht der initiale Status auf ewig in der Session bleibt.)

Zitat:
PHP-Code:
    echo 
    <
script src="http://connect.facebook.net/en_US/all.js"></script> 
Für eine Seite hauptsächlich für Nutzer aus Deutschland(?) würde ich hier die de_DE-Variante des JavaScript SDK einbinden.

Außerdem solltest du hier die Protokoll-Angabe weglassen, sonst bekommen Nutzer die per HTTPS die Seite besuchen Sicherheitswarnungen. (Also src="//connect.facebook.net/…")

Und zusätzlich wäre zu überlegen, ob du das SDK nicht lieber asynchron laden willst, so wie es die Doku auch empfiehlt.


Und zu guter letzt, warum benutzt du eigentlich FB.login und <fb:login-button> parallel …?
__________________
I don't believe in rebirth. Actually, I never did in my whole lives.
Mit Zitat antworten
  #4 (permalink)  
Alt 02-07-2012, 15:00
PitPanda
 Registrierter Benutzer
Links : Onlinestatus : PitPanda ist offline
Registriert seit: Nov 2010
Beiträge: 22
PitPanda befindet sich auf einem aufstrebenden Ast
Standard

Hey,

danke für die Antworten. An den Signed Request habe ich auch schon gedacht, aber wie du schon gesagt hast ist er nur beim ersten Aufruf da. Wie sieht es dann aus, wenn jemand die Seite nicht liked und dann auf Like klickt? Steht der Like beim Neuladen der Seite dann in dem request?

Zu den Variablen, da hast du recht ich verwende diese nicht mehr, habe sie nur aus faulheit nicht mehr rausgehauen.

Das JavaScript kommt von einem Arbeitskollegen, ist schon etwas Älter. Ich werde es wohl nachladen, geht auch schneller, weil der ganze Request an Facebook schon ewig dauert.

PHP-Code:
$facebookHandler->setLikeStatus($facebook->api($user.'/likes/' PAGE_ID)); 
In die Verzweigung gehts erst, wenn die Berechtigung besteht und der User eingeloggt ist. Funktioniert momentan ohne Probleme.

Bezüglich des Deutschen Skripts von Facebook. Mein Kollege hat internationale Kunden, nicht nur Deutsche.

Wegen des Login Events, du hast recht, es macht keinen sinn den Button einzubinden, wenn man den Dialog erzwingt, ich werde nur den Button anzeigen und die Login Funktion rausnehmen.

Ich werde jetzt mal mit dem Signed Request rumspielen, hatte es ganz am Anfang auch schonmal so gelöst, bis ich gemerkt habe das dass nicht immer drin steht.

LG
Pit
Mit Zitat antworten
  #5 (permalink)  
Alt 02-07-2012, 19:03
wahsaga
  Moderator
Links : Onlinestatus : wahsaga ist offline
Registriert seit: Sep 2001
Beiträge: 25.236
wahsaga befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von PitPanda Beitrag anzeigen
An den Signed Request habe ich auch schon gedacht, aber wie du schon gesagt hast ist er nur beim ersten Aufruf da.
Er ist immer dann vorhanden, wenn Facebook deine Seite in den Iframe hineinlädt. Nach dem Herumnavigieren im Iframe über eigene Links dann natürlich nicht mehr.

Zitat:
Wie sieht es dann aus, wenn jemand die Seite nicht liked und dann auf Like klickt? Steht der Like beim Neuladen der Seite dann in dem request?
Ja. Und das Neuladen geschieht automatisch, wenn es sich um den Button oben über dem Page Tab Iframe handelt.
__________________
I don't believe in rebirth. Actually, I never did in my whole lives.
Mit Zitat antworten
  #6 (permalink)  
Alt 05-07-2012, 19:15
PitPanda
 Registrierter Benutzer
Links : Onlinestatus : PitPanda ist offline
Registriert seit: Nov 2010
Beiträge: 22
PitPanda befindet sich auf einem aufstrebenden Ast
Standard

Habs jetzt so wie du sagtest gemacht. Ich schmeiße mein signed_request einfach in die Session rein, wenn Sie frisch ist, dann bleibt sie immer da. Die App läuft jetzt soweit stabil, nur leider im Opera teilweise nicht, weils in einem Tab geöffnet wird, aber daran störe ich mich jetzt mal nicht, dann muss man halt von Hand die Seite neuladen.

Jetzt schlag ich mich erstmal mit einem Prepared Select Statement rum. Muss man immer bind_result benutzen? ist doch Müll ^^ (mysqli)
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Wir sind in Facebook ;) Berni Ankündigungen 13 24-09-2012 11:46
Facebook Imagestring create_album sunnydays PHP Developer Forum 0 12-01-2012 04:25
Facebook Captcha merkur1st Archiv / Trash 1 19-09-2011 00:12
google+ und Facebook Berni Off-Topic Diskussionen 1 20-08-2011 23:44
Facebook Logo planett Projekthilfe 6 13-09-2010 19:05

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


PHP News

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

PHP Server Monitor

PHP Server Monitor ist ein Skript, das prüft, ob Ihre Websites und Server betriebsbereit sind.

11.09.2018 Berni | Kategorie: PHP/ Security
PHP WEB STATISTIK ansehen PHP WEB STATISTIK

Die PHP Web Statistik bietet Ihnen ein einfach zu konfigurierendes Script zur Aufzeichnung und grafischen und textuellen Auswertung der Besuchern Ihrer Webseite. Folgende zeitlichen Module sind verfügbar: Jahr, Monat, Tag, Wochentag, Stunde Folgende son

28.08.2018 phpwebstat | Kategorie: PHP/ Counter
Affilinator - Affilinet XML Produktlisten Skript

Die Affilinator Affilinet XML Edition ist ein vollautomatisches Skript zum einlesen und darstellen der Affili.net (Partnerprogramm Netzwerk) Produktlisten und Produktdaten. Im Grunde gibt der Webmaster seine Affilinet PartnerID ein und hat dann unmittelb

27.08.2018 freefrank@ | Kategorie: PHP/ Partnerprogramme
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 00:21 Uhr.