Straciłem mnóstwo kilowatogodzin na zabawę z tym ichniejszym API i już sam nie wiem gdzie się zwrócić o pomoc.

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:

  1. $facebook = new Facebook(array(
  2. 'appId' => $apiid,
  3. 'secret' => $secret,
  4. 'cookie' => true,
  5. ));
  6.  
  7. //Facebook zainicjowany
  8.  
  9. //Pobierz status sesji
  10. $session = $facebook->getSession();
  11. $me = null;
  12. if ($session) {
  13. try {
  14. $uid = $facebook->getUser();
  15. $me = $facebook->api('/me');
  16. } catch (FacebookApiException $e) {
  17. error_log($e);
  18. }
  19.  
  20. if($me) {
  21.  
  22.  
  23. //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
  24. $accounts = $facebook->api('/me/accounts');
  25.  
  26. //Loop through the array off accounts to find the page with a matching ID to the one we need
  27. foreach($accounts['data'] as $account){
  28. if($account['id'] == 'ID STRONY'){
  29. $ACCESS_TOKEN = $account['access_token'];
  30. }
  31. }
  32.  
  33. if($ACCESS_TOKEN == NULL)
  34. {
  35. $login_url = $facebook->getLoginUrl();
  36. header("Location: $login_url");
  37. }
  38. }
  39.  
  40. $message=$data['facebook_text'];
  41. $attachment = array(
  42. 'message' => $data['facebook_text'],
  43. 'name' => $data['name'],
  44. 'description' => '',
  45. 'link'=>$this->getLinkToLatestNews($id),
  46. 'access_token' => $ACCESS_TOKEN
  47. );
  48. $attachment['picture'] = $this->getPictureLatestNews();
  49.  
  50. try {
  51. if($facebook->api('/ID STRONY/feed', 'post', $attachment))
  52. {
  53. //Zrób coś w razie sukcesu
  54. }
  55. } catch (FacebookApiException $e) {
  56. error_log($e);
  57. //Zróbcośdalej
  58. }
  59. }
  60. else
  61. {
  62. $login_url = $facebook->getLoginUrl();
  63. header("Location: $login_url");
  64. }


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
  1. // Jakieś tworzenie obiektu wcześniej i inne rzeczy
  2.  
  3. FB.init({
  4. appId : idaplikacji,
  5. status : true, // check login status
  6. cookie : true, // enable cookies to allow the server to access the session
  7. xfbml : true // parse XFBML
  8. });
  9.  
  10. $('#ninja').click(function(e){
  11. FB.login(function(response) {
  12. if (response.session) {
  13. // user successfully logged in
  14. } else {
  15. // user cancelled login
  16. }
  17. });
  18. });
  19. <a href="#" id="ninja">Klik for czik</a>


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ę.