Sziasztok!
Szeretnék csinálni a cégnél a Facebook oldalunkra egy fangate-et, azaz egy olyan oldalt, hogy ha lájkolják, akkor engedjen tovább.
Eddig a következő megoldással próbálkoztam:
<?php
require_once('facebook.php');
$facebook = new Facebook(array(
'appId'=>'app_id',
'secret'=>'secret_id'
));
$signedRequest = $facebook->getSignedRequest();
if($signedRequest['page']['liked'] == 1){
include('like.php');
} else {
include('nolike.php');
}
?>
(Természetesen az appId és a secretid be volt írva)
A következő történt: Az én fb accountomból teljesen szuperül működött a dolog, ha lájkoltam az oldalt tovább engedett, ha visszavontam a lájkot, ismét a felszólító oldalra vitt vissza.
A munkatársaim tesztje során viszont bármilyen fiókkal, bármilyen böngészőből csak a felszólító oldal látszott, hiába lájkoltak, vonták vissza, és lájkoltak újból, egyszer sem engedte tovább őket a program.
Mi lehetett a hiba? Valaki csinált már ilyet?
- 3398 megtekintés
Hozzászólások
es mi ertelme egy ilyennek?
- A hozzászóláshoz be kell jelentkezni
Remekül el lehet kergetni a látogatókat.
- A hozzászóláshoz be kell jelentkezni
Tulajdonképpen igen, de a kérdés technikai részét tekintve ezt most irrelevánsnak tartom.
- A hozzászóláshoz be kell jelentkezni
+1
- A hozzászóláshoz be kell jelentkezni
@NagyZ, a FB app-ok nagy szazaleka, megkockaztatok egy 90%-ot, a miatt jott letre, hogy likeokat gyujtson egy vagy tobb FB oldalnak. Ez a lenyeg :)
- A hozzászóláshoz be kell jelentkezni
ja, hirtelen azt hittem, hogy egy cegnel akarjak ezt csinalni azoknak, akik neznek az FB-t. de igy mar ertem :)
- A hozzászóláshoz be kell jelentkezni
Hehe, ez jó... bocs, lehet, hogy nem voltam elég egyértelmű... megesik.
- A hozzászóláshoz be kell jelentkezni
Troll on:
Bookmarked. :-)
- A hozzászóláshoz be kell jelentkezni
Mar reg nem FB app-oztam (tobb mint fel eve, de az FB api-nal eleg sok), de itt par kerdes amin elindulhatsz:
1. A legujabb SDK-t hasznalod?
- https://github.com/facebook/facebook-php-sdk
2. Nem lehet cache problema?
- http://php.net/manual/en/function.header.php
- http://developers.facebook.com/tools/debug
3. Az app-ot most hoztad letre vagy regebbi (regebbi mint fel esetleg egy eves)?
4. Te kapcsolodtal az apphoz (FB Connect)? Ha igen akor probalj meg lekapcsolodni majd probald ugy.
5. A fb_ca_chain_bundle.crt file jelen van az SDK-bol?
6. A bemasolt kod elott van e meg mas kod is? A kodot tartalmazo file kozvetlenul hivodik az app-bol vagy van szerver vagy kliens oldali atiranyitas?
Ha van atiranyitas valahol akor a sigend_request post elvesz hacsak nem figyelsz ra, hogy az atiranyitasnal azt is told at.
- A hozzászóláshoz be kell jelentkezni
Hű, nagyon köszönöm, ez már valami.
Nos, az SDK-val és fájljaival nem lehet probléma, azokból a legújabb van és a crt is ott van.
A cache-re szerencsére gondoltunk, kiürítettük, úgy sem ment, tehát ezt is kizárnám. A kód előtt csak egy statikus header van, elviekben nem okozhat gondot. Ja és most hoztam létre, egy hete, az miért számít?
De mi ez a FB Connect? Az app egy URL-ről simán behúzza az indexet, abban van kód.
- A hozzászóláshoz be kell jelentkezni
A cache-re szerencsére gondoltunk, kiürítettük, úgy sem ment, tehát ezt is kizárnám. A kód előtt csak egy statikus header van, elviekben nem okozhat gondot.
- Azert biztos ami biztos alapon a kovetkezo headereket szurd be az elejere:
header('P3P: CP="IDC DSP COR CURa ADMa OUR IND PHY ONL COM STA"');
header( 'Expires: Sat, 26 Jul 1997 05:00:00 GMT' );
header( 'Last-Modified: ' . gmdate( 'D, d M Y H:i:s' ) . ' GMT' );
header( 'Cache-Control: no-store, no-cache, must-revalidate' );
header( 'Cache-Control: post-check=0, pre-check=0', false );
header( 'Pragma: no-cache' );
- Kliens oldalon is szurd be az inicializalo kodot: http://pastebin.com/R6TmEzs1
- A hozzászóláshoz be kell jelentkezni
Hát, köszönöm az init kód benne volt, a headereket beszúrtam, de ugyanúgy nem jó más fiókból.
Lehetséges, hogy rosszul értelmezem a "rajongó" fogalmát? Elég ha az illető dob egy lájkot?
- A hozzászóláshoz be kell jelentkezni
Nem tudom, de leirom azt ahogyan en ertelmezem:
- a FB app egy facebook oldalon belul el/letezik mint aloldal
- mikor egy latogato az aloldalra teved a facebook az app-ban bealitott URL-t betolti egy iFrame-be
- az iframe hivasnal post-ban kuld egy sigened_request parametert amit az app secret-el lehet dekodolni
- a signed_request tartalmazza a page parametert, amely tobbek kozott tartalmazza az oldal ID-jat (amelyen az app el) es hogy a jelenlegi latogato FAN-e (likeolta e az illeto oldalt) az illeto oldalon, ez a liked parameter.
- A hozzászóláshoz be kell jelentkezni
Én is így gondolom. És ha a liked == 1, akkor elvileg a "like.php"-t kéne icludolnia, ha a program nem hibás valahol, de ez most egyszerű, mint a faék, fogalmam sincs hol lehet a hiba. Hiszen ha valahol az appId dekódolásával volna a probléma, akkor nem is tudná az appot iFrame-be tölteni, nem igaz?
Az SDK-val meg nem hinném, hogy baj van, mert pontosan ugyanazt a verziót szedtem le, amit belinkeltél...
Kemény dió...
- A hozzászóláshoz be kell jelentkezni
Igen, a kod ok u.h. szerintem a $signedRequest = $facebook->getSignedRequest(); hivasnal lesz a problema, mivel ha az NULL-t terit visza sosem teljesul a kondicio.
A php logokban nem talalsz ezt alatamaszto Notice-okat?
Lentebb irtam a $facebook->getSession(); beszurasat a $facebook->getSignedRequest() ele. Probald meg esetleg azt is.
- A hozzászóláshoz be kell jelentkezni
Hát, köszönöm az init kód benne volt, a headereket beszúrtam, de ugyanúgy nem jó más fiókból.
Hrm... akor erdemes lenne megnezni, hogy a signed_request erkezik e azon emberkektol akiknek nem mukodik.
Tegy egy print_r($_POST['signed_request']) -et, hogy ez kideruljon.
- A hozzászóláshoz be kell jelentkezni
"Ja és most hoztam létre, egy hete, az miért számít?"
Szamit a beallitasok miatt, meg a miatt, hogy az utobbi 1 evben deprecated lett par dolog ami miatt a facebook "migralta" mar parszora a regebi appokat es ienkor becsuszhatnak problemak.
- A hozzászóláshoz be kell jelentkezni
De mi ez a FB Connect?
Ez - http://developers.facebook.com/docs/authentication/
- A hozzászóláshoz be kell jelentkezni
Jah, az alkalmazást nem csatolom semmihez, az app az fb oldalon egy tabon jelenik meg.
- A hozzászóláshoz be kell jelentkezni
Valami kezd derengeni, mintha nekem is lett volna hasolo problamam ezzel es akor egy $facebook->getSession(); hivas a $facebook->getSignedRequest(); elott megoldotta a problemamat.
- A hozzászóláshoz be kell jelentkezni
Hih, így szimplán nem tölti be az URL-t asszem. De legalábbis semmi nem jelenik meg. Ez nem az én napom...
- A hozzászóláshoz be kell jelentkezni
Az error_log-ban mi van?
- A hozzászóláshoz be kell jelentkezni
Call to undefined method Facebook::getSession()
- A hozzászóláshoz be kell jelentkezni
Bocsesz, most en nemztem el es a regi SDK-t bongesztem at
- A hozzászóláshoz be kell jelentkezni
Öhm, igen, kezdtem megijedni. Nekem ilyen nincs bent. Akkor viszont a kód a hibás, igaz?
- A hozzászóláshoz be kell jelentkezni
Nem, a kod jo, en tevedtem es a regi SDK-t neztem. Az ujban mar nincs getSession igy tokeletesen igaza volt abban, hogy a metodus nem letezik :)
Megyek egyet ebedelni es hatha jon ujjabb 5let kozben. Adig is erdemes lenne megnezned, hogy a signed_request erkezik e a havassal a kerdeses fiokoknal.
- A hozzászóláshoz be kell jelentkezni
Nagyon köszönöm az eddigieket is, ötletelgetek én is. Jó étvágyat!
- A hozzászóláshoz be kell jelentkezni
Ha az appot önmagában tekintem meg: https://apps.facebook.com/app-id/, akkor a signed_request paraméter kiírja az éréket, ahogy javasoltad (print_r($_POST['signed_request']);). Viszont az iFrame-ben nem írja ki, tehát nullával tér vissza ebben az esetben?...
- A hozzászóláshoz be kell jelentkezni
signup, hatha kell majd egyszer egy ilyen...
- A hozzászóláshoz be kell jelentkezni
Én ez alapján írok épp Facebook appot: link.
Ebben van valami json-os kód is.
Nekem működik jól. :)
- A hozzászóláshoz be kell jelentkezni
Köszönöm a választ, én is belefutottam, de ha jól értem, a json-os rész az appId dekódolását szolgálja, nekem pedig talán a signed_reqest paraméter postolása környékén lesz a problémám, ugyanis ha az általad említett kódrészlettel volna hiba, az iFrame be sem töltené az appot. Legalábbis azt hiszem.
- A hozzászóláshoz be kell jelentkezni
Nem tudom, de én ezt a kódot fogtam és bővítettem ki a saját igényeim szerint. Teljesen jól működik. Egy próbát megér, nem?
- A hozzászóláshoz be kell jelentkezni
Egész biztosan nem ez a probléma, már körbejártam, de köszönöm.
Közel járok, amint kész, közzéteszem, hogy mi volt a hiba, hogy más is meg tudja oldani.
Jelenleg valami szerverbeállításra tippelek...
- A hozzászóláshoz be kell jelentkezni
Ha jól tudom akkor ahhoz, hogy egy tabpage-nél lájkolva van e az oldal ahhoz nem kell facebook SDK.
Nállunk egy hasonló kód fut:
....
public function isTabPageLiked(){
$signed_request= $this->parsePageSignedRequest();
if($signed_request and $signed_request->page->liked!=''){
return true;
} else {
return false;
}
}
....
private function parsePageSignedRequest() {
if (isset($_REQUEST['signed_request'])) {
$encoded_sig = null;
$payload = null;
list($encoded_sig, $payload) = explode('.', $_REQUEST['signed_request'], 2);
$sig = base64_decode(strtr($encoded_sig, '-_', '+/'));
$data = json_decode(base64_decode(strtr($payload, '-_', '+/'), true));
return $data;
}
return false;
}
- A hozzászóláshoz be kell jelentkezni
.
- A hozzászóláshoz be kell jelentkezni
Nagyon hasonló problémába én is belefutottam. Kiváncsian várom a fejleményeket.
- A hozzászóláshoz be kell jelentkezni
Ebbe én is beleszaladtam, nálam az volt a gond, hogy nem az oldalt likeolta aki tesztelte, hanem az app-ot.
- A hozzászóláshoz be kell jelentkezni
Szerintem ez mar nem fordulhat elo tobbe, mivel par honapja a facebook felszamolta az app page-eket.
- A hozzászóláshoz be kell jelentkezni