2010-08-19 11 views
15

Attualmente ho un'applicazione nella scheda di Facebook e mi chiedo se c'è un modo per collegarmi in profondità a un elemento nella scheda dell'app. Esempio:Scheda dell'applicazione Facebook -> Collegamento esterno con PHP

L'utente è nell'applicazione (che sta cercando libri), trova un libro che gli piace e vuole condividerlo con un amico. Fanno clic per condividerle e posso recuperare tutte le informazioni, tuttavia non ho un link diretto, quindi quando viene inviato via email, facebooked, ecc. Invia l'utente direttamente alla pagina che contiene.

Ciò è possibile nella scheda Applicazione? So sulla tela che posso collegare in profondità ... ma cerco un modo per farlo nella scheda App.

Grazie per il tuo pensiero e le risposte.

+0

NOTA: Facebook sta costantemente reinventando come fanno tutto ... Grazie mille a Gerard per aver postato l'ultima risposta su come funziona. – Petrogad

risposta

24

Ecco come colleghiamo in modo approfondito alle sottopagine entro scheda Pagina della nostra app.

Quando la tua applicazione risiede in una scheda Pagina, Facebook rimuoverà tutti i parametri GET ad eccezione di app_data. Passa app_data all'interno del parametro signed_request dei dati POST.

Maggiori informazioni nella documentazione: https://developers.facebook.com/docs/authentication/signed_request/

Così, quando costruiamo collegamenti a pagine secondarie, si avrà un aspetto simile

http://www.facebook.com/myfanpage?sk=app_XXXXXX&app_data=%2Fmainpage%2Fsubpage 

Poi, nel nostro codice pagina di indice, controlliamo per la app_data param.Se esiste, allora un semplice reindirizzamento 302 fa il trucco.

$request = parse_signed_request($_POST['signed_request']); 
if ($request['app_data']) 
{ 
    header('HTTP/1.1 302 Found'); 
    header('Location: {$request['app_data']}'); 
    exit; 
} 

Nota: è possibile passare più di 1 param all'interno di app_data utilizzando un URL codificato, JSON-array o qualcosa del genere.

+0

Grazie per aver risposto a questa vecchia domanda; come facebook costantemente reinventa come stanno facendo le cose; è bello avere una risposta aggiornata con il miglior metodo attuale per elaborarla. – Petrogad

3

Forse.

Per le pagine dell'area di applicazione, Facebook inoltra eventuali informazioni URI aggiuntive al proprio callback su tela.

Ad esempio, se la pagina di applicazione è http://apps.facebook.com/testapp

e il callback tela è http://facebook.example.com/testapp/canvas

Poi andando a http://apps.facebook.com/testapp/foo?bar=baz si tradurrebbe in server di Facebook che colpisce la vostra in questo modo http://facebook.example.com/testapp/canvas/foo?bar=baz.

Non l'ho mai testato per vedere se le schede dell'applicazione condividono questo comportamento, ma vale la pena provare. In tal caso, potresti semplicemente utilizzare le informazioni URI per guidare il deeplinking.

Inoltre, si dovrebbe essere a conoscenza del impending changes nelle schede dell'applicazione.

+0

Non sono mai stato più frustrato nello sviluppo con una "piattaforma principale" prima ... sembra che abbia cambiato marcia 9 volte da quando ho iniziato. Come può essere facebook così grande, eppure così incredibile, stupido nello sviluppo di API. Grazie per il tuo commento, darò un test e ti faccio sapere. Saluti! – Petrogad

+0

Questo non ha funzionato:/Grazie per la risposta, in quanto mi ha portato a vedere come posso almeno collegarmi alla scheda dell'app. Ancora fatica a trovare come collegare in profondità con un parametro. – Petrogad

1

Finora, non è stato possibile effettuare il deep link a una scheda dell'applicazione utilizzando i parametri URL.

Siamo in grado di recuperare le informazioni window.location da una pagina applicazione (ad esempio http://apps.facebook.com/testapp/foo?bar=bar)

Ciò non lavoro su un app Tab (ad es http://www.facebook.com/testpage?v=app_1234&bar=bar)

Allo stesso modo, non possiamo usare per $_GET['foo'] prova ad afferrarlo dal lato server se siamo in una scheda di Facebook.

Se qualcuno è riuscito a aggirare questo, mi piacerebbe conoscere la soluzione.

+0

Vedi sopra: è necessario utilizzare il parametro "app_data" fornito da Facebook. –

2

Per quelli che hanno bisogno di un esempio completo (ma minimale di lavoro) (come me), ecco index.php che esegue il deep-linking quando necessario. Assicurati di aver scaricato il Facebook PHP SDK e che il tuo percorso require punti ad esso. (Ovviamente, è anche necessario sostituire la $app_id e $app_secret con il proprio informazioni app.)

<?php 
require 'facebook-php-sdk/src/facebook.php'; 

$app_id  = "YOUR_APP_ID_HERE"; 
$app_secret = "YOUR_APP_SECRET_ID_HERE"; 

$facebook = new Facebook(array(
    'appId' => $app_id, 
    'secret' => $app_secret 
)); 

$signed_request = $facebook->getSignedRequest(); 

// Get app_data from signed request POST 
$app_data = $signed_request["app_data"]; 

// Parse app_data & Re-direct 
if ($app_data) { 
    header("HTTP/1.1 302 Found"); 
    header("Location: {$app_data}"); 
exit; 
} 

?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns:fb="http://www.facebook.com/2008/fbml" xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
    <title>Title Here</title> 
</head> 
<body> 
    <h1>Landing Page</h1> 
</body> 
</html> 

Inoltre, assicurarsi che all'interno le impostazioni dell'app FB, tutti i percorsi URL (es URL Canvas, pagina Tab URL, ecc) terminano con una barra rovesciata, altrimenti si otterranno alcuni 301 errori di reindirizzamento.

Una volta che l'applicazione è messa a punto e hai added it your fan page, è possibile profondo legame con qualcosa di simile:

http://www.facebook.com/pages/MYFANPAGE/XXXXX?sk=app_XXXXX&app_data=sub/another.php 

Potrebbe essere necessario analizzare il valore App_Data reale prima di usarlo, ma per me ha funzionato altrettanto sopra.

Spero che aiuti gli altri là fuori. Naturalmente, Facebook può cambiare tutto questo in qualsiasi momento.

Problemi correlati