Facebook PHP-SDK na míru pro Nette – Kdyby/Facebook

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Filip Procházka
Moderator | 4668
+
0
-

Zdravím,
Kdyby/Facebook je doplněk pro Nette, který je založen na původním php-sdk, ovšem celé jsem ho přepsal, protože něco tak odporného přece nebudeme používat v našich krásných Nette aplikacích! Samozřejmostí je podpora stable i dev Nette.

Rozšíření je klasicky na Githubu k vašim službám včetně dokumentace, nejlépe ho instalujte pomocí composeru. Chyby nebo nápady na vylepšení hlaste prosím na githubu

Instalace

Pokud chcete používat vývojové Nette, tak do composer.json dáme následující

"require": {
	"nette/nette": "@dev",
	"kdyby/facebook": "@dev",
}

A pro stable Nette

"require": {
	"nette/nette": "~2.0",
	"kdyby/facebook": "~0.9",
}

Otázky směřujte sem

Další otázky prosím zakládejte jako samostatná témata na novém fóru help.kdyby.org. Díky!

Ukázka

Připravil jsem též nástřel Facebookové Canvas aplikace, kterou si můžete vyzkoušet zde

Pokud máte s tvorbou canvas aplikací větší zkušeností než já a máte nápad jak tohle vylepšit, pomůžete nejenom mně ale i sobě, když se o něj podělíte na githubu v issues.

Honza Marek
Člen | 1664
+
0
-

protože něco tak odporného přece nebudeme používat v našich krásných Nette aplikacích

<offtopic> Kvízová otázka pro pamětníky: koho mi připomíná tento styl vyjadřování? </offtopic>

hrach
Člen | 1838
+
0
-

<offtopic> Inzaaaaaaaaaaaaaa is back!!!!!!!!!!!!!! </offtopic>

Filip Procházka
Moderator | 4668
+
0
-
netman92
Člen | 22
+
0
-

Zdravim, mam otazku…

Ked chcem zavolat nieco taketo v nejakej metode (napr renderClick() ) tak uz mi to nefunguje.

$this->facebook->api('/me')

Modelova situacia: Otvori sa FB app, clovek potvrdi opravnenia. Prejde 3 stranky (vzdy samostatne akcie renderNieco() ) a na poslednej chcem POSTOVAT na jeho FB stenu a to mi vzdy vrati hlasku

Kdyby\Facebook\FacebookApiException #2500

An active access token must be used to query information about the current user.

aj ked pridavam auth token do parametrov.

Co robim zle?

Filip Procházka
Moderator | 4668
+
0
-
  1. access token se předává sám
  2. „An active access token must be used to query information about the current user.“ znamená že nemáš přihlášeného uživatele. http://stackoverflow.com/…current-user

Tohle jsi četl? https://github.com/…/en/index.md

netman92
Člen | 22
+
0
-

Jasne cital.

Pozri: facebookava appka mi zavola pri starte metodu HomepagePresenter:default().
Pokial robim nieco s v nej tak uzivatel je prihlasneny a ide to oka.

Problem je, ked uzivatel na tej stranke klikne niekam (presmerovanie cez metodu redirect URL) tak tam uz je uzivatel zrazu odhlaseny a nemozem nic robit.

Dokonca to niekedy robi take nieco, ze ked dam $this->facebook->getUser() tak mi vypise jeho ID, ale nemozem urobit api call

Filip Procházka
Moderator | 4668
+
0
-

Absolutně nechápu. Asi by bylo dobré, ujasnit si pojmy.

Bavíme se o canvasové app, nebo máš web který dělá api requesty?
A bez kódu toho presenteru se asi nikam nepohneme :)

TomasHalasz
Bronze Partner | 79
+
0
-

Ahoj,

zkouším použít Kdyby\Facebook a narazil jsem na dvě věci, které v návodu a balíčku chyběly.

  1. nejdřív chyběl CertificateHelper.php , takže jsem ho stáhnul z https://github.com/…CurlCaBundle a dal do složky Kdyby\Facebook\Api\
  2. pak přihlašování stále nešlo $fb->getUser() vracelo 0 . V facebook log jsem našel:
` Invalid or no certificate authority found, using bundled information`

Google poradil že by v kódu mělo být toto:

Facebook::$CURL_OPTS[CURLOPT_CAINFO] = getcwd().'/fb_ca_chain_bundle.crt';

Vzal jsem tedy fb_ca_chain_bundle.crt z oficiálního PHP SDK, nakopíroval do Kdyby\Facebook\Api\ a v CurlClient.php upravil:

public static $defaultCurlOptions = array(
		....
		....
		CURLOPT_CAINFO => 'fb_ca_chain_bundle.crt'
	);

Ověřování teď funguje, $fb->getUser() vrací uživatele :-)

Otázka je jestli to takto mám správně.
Udělal bych ty změny a poslal je na GitHub, ale nevím jak na to tak to zatím píšu jen sem…

bazo
Člen | 620
+
0
-

ze si to neinstaloval cez composer?

Filip Procházka
Moderator | 4668
+
0
-

Nemáš to správně, buďto si nainstaluj balíček přes composer, nebo stáhni celý Kdyby/CurlCaBundle, nikoliv jen jeden soubor.

TomasHalasz
Bronze Partner | 79
+
0
-

aha, ok provedu. Já ten composer zatím moc nepoužívám, měl jsem strach ať mi něco „nezmrší“, ale to se asi stát nemůže co?

TomasHalasz
Bronze Partner | 79
+
0
-

Tak se povedlo, díky za radu.

Filip Procházka
Moderator | 4668
+
0
-

Nejlepší je instalovat vše přes composer, stáhne ti i Nette a bude ti hlídat verze.

saimons
Člen | 293
+
0
-

Ahoj mohl by jste mi prosim nekdo poradit jakym zpusobem v modelu pracovat s timto doplnkem. Chtel bych po registraci uzivatel na jeho zed odeslat nake informace. Jde mi hlavne o to jak to cele zprovoznit. Predevsim jak nastavim spravne tridu Facebook, predat ji facebookID a accessToken a pak zavolat api() s potrebnymi informacemi. Na ofic. SDK jsem si to precetl jak se s tim pracuje, ale tady u toho doplnku si nevim rady. Predem dekuji.

Jan Endel
Člen | 1016
+
0
-

Koukni do Dokumentace

saimons
Člen | 293
+
0
-

To jsem se dival, to co tam je mi funguje bez problemu, ale neni tam popsane jak nastavit to co jsem popsal. Konkretne nerozumim moc tomu co dela toto:

<?php
        $dialog = $this->facebook->createDialog('login');
        /** @var LoginDialog $dialog */

        $dialog->onResponse[] = function (LoginDialog $dialog) {
            $fb = $dialog->getFacebook();
		...
?>

Protoze po tomto je v promene $fb uz uzivatel. Ale pokud ho chci zalogovat rucne a treba offline tak to nevim jak presne udelat.

Jan Endel
Člen | 1016
+
0
-

Ehm? Uživatel se musí zalogovat akcí na facebooku. Nejde offline.

saimons
Člen | 293
+
0
-

Myslel jsem toto, uz mi to asi funguje:

<?php
        $this->facebook->setAccessToken('...');
	$facebookID = ...;
        $post = array(
            'message' => 'Hello World..!'
        );
        try {
            $this->facebook->api('/' . $facebookID . '/feed', 'POST', $post);
        } catch (FacebookApiException $e) {
            Debugger::log($e, 'facebook');
            $this->flashMessage("Sorry.");
        }
?>

Pokud si zazadam o privilegia, tak muzu posilat lidem na zed, ikdyz jsou offline.

Editoval saimons (30. 5. 2014 11:41)

Filip Procházka
Moderator | 4668
+
0
-

Další otázky prosím zakládejte jako samostatná témata na novém fóru help.kdyby.org. Díky!