Co mam:
Użytkownik przy tworzeniu newsa ma możliwość zaznaczenia checkbox'a "Opublikuj na facebooku", które ma za zadanie pojawić na jego stronie (nie ścianie) daną wiadomość. Po jego zaznaczeniu pojawia się pole w które wpisuje treść wiadomości na facebooka. To działa pięknie ładnie, synchronicznie, ale tylko i tylko wtedy (<=>) gdy jest uprzednio zalogowany na konto z tą aplikacją. Jeśli jest zalogowany na inne konto, dzieje się nic w postaci przekierowania go na jego (aktualnie zalogowanego profilu) ścianę. Jeśli nie jest zalogowany na żadne konto, przekierowuje go na "login page". Po poprawnym zalogowaniu przekierowuje go z powrotem do strony z dodawaniem newsa.
Kod który mam obecnie:
'appId' => $apiid, 'secret' => $secret, 'cookie' => true, )); //Facebook zainicjowany //Pobierz status sesji $session = $facebook->getSession(); $me = null; if ($session) { try { $uid = $facebook->getUser(); $me = $facebook->api('/me'); } catch (FacebookApiException $e) { } if($me) { //In order to post to the page later on we need to generate an Access Token for that page, to do this we get me-accounts in the following api call $accounts = $facebook->api('/me/accounts'); //Loop through the array off accounts to find the page with a matching ID to the one we need foreach($accounts['data'] as $account){ if($account['id'] == 'ID STRONY'){ $ACCESS_TOKEN = $account['access_token']; } } if($ACCESS_TOKEN == NULL) { $login_url = $facebook->getLoginUrl(); exit; } } $message=$data['facebook_text']; 'message' => $data['facebook_text'], 'name' => $data['name'], 'description' => '', 'link'=>$this->getLinkToLatestNews($id), 'access_token' => $ACCESS_TOKEN ); $attachment['picture'] = $this->getPictureLatestNews(); try { if($facebook->api('/ID STRONY/feed', 'post', $attachment)) { //Zrób coś w razie sukcesu } } catch (FacebookApiException $e) { //Zróbcośdalej } } else { $login_url = $facebook->getLoginUrl(); exit; }
Wszystkie funkcje i zmienne działają poprawnie, ale jak widać są normalne przekierowania które chcę przekonwertować na popupa.
Co chcę zmienić:
Chcę się pozbyć wszelkich synchronicznych przekierowań, ponieważ user traci wtedy wszystko co wprowadził, a wiem jak to może wściec (czyli JS SDK musi być zastosowany). Przy byciu zalogowanym na inne konto prosiłbym o zrobienie popupa z logowaniem, tak jakby nie był wcale zalogowany (autowylogowanie czy coś) - poza tym proszę spojrzeć na drugą sprawę niżej.
Próbowałem coś rozkminić z JS testowo, aby przy kliknięciu w link pojawiło się okienko logowania
<script> // Jakieś tworzenie obiektu wcześniej i inne rzeczy FB.init({ appId : idaplikacji, status : true, // check login status cookie : true, // enable cookies to allow the server to access the session xfbml : true // parse XFBML }); $('#ninja').click(function(e){ FB.login(function(response) { if (response.session) { // user successfully logged in } else { // user cancelled login } }); }); </script>
Pojawia się malownicze okienko:

Druga sprawa - ta aplikacja ma być dostępna tylko i wyłącznie dla jednego konta - jeśliby próbował się zalogować na inne konto ma odrzucić, tudzież nie wiem co. Są jakieś ustawienia prywatności aplikacji? Przy logowaniu fajnie by było gdyby automatycznie login był wypełniony i tylko hasło było żądane.
Przekopałem google (nawet jakieś niemieckie fora), pytałem na ich forum, pytałem wszędzie, przeczytałem całą dokumentację - nie ogarniam że tak to powiem. Give 'em a cziken.
Jeśli ktoś chce to mam całe 20zł które mogę dać za całkowite wykonanie tego czegosia.
Dziękuję.