2009-06-16 13 views
12

Zajmuję się tworzeniem strony dla klienta, który ma już zdjęcia swoich produktów na Facebooku, i chce, aby te same albumy były replikowane na jego stronie. Używałem już usługi Facebook Connect, więc upuściłem połączenie photos.getAlbums i photos.get, aby dynamicznie tworzyć galerie.Facebook API bez uwierzytelniania klienta dla treści publicznych

Jak na razie dobrze, ale potem zdałem sobie sprawę, że jeśli nie ma zalogowanego użytkownika przez FBC, sesja nie jest tworzona, a interfejs API staje się bezużyteczny, nawet w przypadku treści publicznie dostępnych. Oczywiście chcę pokazać albumy wszystkim, a nie tylko osobom, które łączą swoje konta.

Czy tak działają wszystkie funkcje interfejsu API Facebooka? Jakie jest najlepsze (łatwiejsze do wdrożenia) obejście tego problemu?

Odpowiedz

11

Od września 2010 r. Możesz teraz uwierzytelniać się jako aplikacja bez przypisanego użytkownika. Aby uzyskać szczegółowe informacje, patrz http://developers.facebook.com/docs/authentication/. Albo można uruchomić ten przykładowy kod, aby uzyskać token dostępu:

curl -F grant_type=client_credentials \ 
-F client_id=your_app_id \ 
-F client_secret=your_app_secret \ 
https://graph.facebook.com/oauth/access_token 
+0

Dzięki! To jest teraz poprawna odpowiedź. – lima

+0

Niestety, ten link przekierowuje teraz do dość bezużytecznej strony o Facebook Login. Wygląda na to, że w ich promocji logowania zmniejszają się jeszcze bardziej, że ta metoda "tokena aplikacji" jest nawet opcją. Jednak nadal jest wyświetlany [tutaj] (https://developers.facebook.com/tools/access_token), co dodaje otuchy. – nkorth

0

To nie ma dla mnie sensu - mam (stosunkowo prostą) aplikację, która wyświetla się na facebooku, nawet jeśli użytkownik nigdy wcześniej nie był zalogowany na Facebooku (w takim przypadku wyświetla dane demo).

Podczas korzystania z biblioteki facebook PHP, po prostu to zrobić:

$ = new facebook Facebook ($ api_key, $ tajne);

Nie jest wymagany identyfikator sesji - ale oczywiście funkcje api, które zależą od informacji o użytkowniku, nie będą działać.

Możesz również zajrzeć do aplikacji "infinite session" - możesz utworzyć nieskończony klucz sesji dla siebie i skorzystać z tej sesji, aby uzyskać dostęp do interfejsu API.

+0

Dzięki, mogę oczywiście renderowania mojej aplikacji (w tym przypadku jest tylko kod backend) bez sesji użytkownika, ale nie mogę użyć dowolnego z Funkcje API, które pozwalają mi pobierać zawartość z albumów. Pomysł "nieskończonej sesji" brzmiał dobrze, ale jest częściowo przestarzały: http://wiki.developers.facebook.com/index.php/New_Design_Platform_Changes#Changes_to_Session_Keys – lima

3

Dla przypomnienia, udało mi się rozwiązać tę sytuację, opracowując mały backend, który wymaga, aby klient raz zalogował się do Facebooka i dał offline_accessextended permission aplikacji FB, więc mogę zapisać jego klucz sesji i użyć go do uwierzytelnienia Facebook API klienta za każdym razem, gdy potrzebuję użyć FQL, aby uzyskać niepubliczną treść.

Oczywiście można dodać buforowanie w środku, aby uniknąć niepotrzebnych próśb do Facebooka, ale od miesięcy działa on dobrze bez żadnych ograniczeń, które znam.

+0

Świetna odpowiedź - to wydaje się najbardziej aktualny sposób na zrobienie tego . Z ciekawości - w jaki sposób uwierzytelniłeś użytkownika? Obecnie używam zestawu JS SDK na interfejsie, jednak dla mojej aplikacji (CMS) chcę publikować posty na stronie na Facebooku, gdy redaktor publikuje post na swojej stronie. (Następnie zapisz PostId dla polubień/komentarzy/itd.) Idealnie, chciałbym zapisać nazwę użytkownika/pw dla administratora strony fb i użyć api wykresu, aby autoryzować niewidocznie. Dowolne tego przykłady? Dzięki! – Jason

+0

Zgodnie z brakiem informacji, schemat autoryzacji FB został zmieniony. Kliknij link i przykład w swojej odpowiedzi, aby to zrozumieć. Zaznaczam to jako poprawne. – lima

+0

Oto zaktualizowany link: https://developers.facebook.com/docs/facebook-login/permissions/v2.5#reference-extended. Jednak uprawnienia offline_datku są nieaktualne: https: //developers.facebook.com/docs/roadmap/completed-changes/offline-access-removal –