En una aplicación iframe .php
, ¿cómo detectarse está en el modo Página o en el modo Lienzo? ¡Gracias!aplicación Facebook PHP, ¿cómo detectarlo en modo Lienzo o Página?
9
A
Respuesta
16
Lectura de la documentation:
- Facebook siempre enviará un
signed_request
(por lienzo y página URL) - Si se trata de una página, Facebook va a añadir un parámetro adicional denominado
page
por lo basado en esto, podría hacer algo como:
<?php
if(isset($_REQUEST['signed_request'])) {
// We are in Canvas or Page now
// Let's extract the data from the signed_request
// to check if we are inside a Facebook Page
$app_secret = "APP_SECRET";
$data = parse_signed_request($_REQUEST["signed_request"], $app_secret);
if(isset($data["page"])) {
echo "Page";
} else {
echo "Canvas";
}
} else {
echo "None, or something went wrong!";
}
function parse_signed_request($signed_request, $secret) {
list($encoded_sig, $payload) = explode('.', $signed_request, 2);
// decode the data
$sig = base64_url_decode($encoded_sig);
$data = json_decode(base64_url_decode($payload), true);
if (strtoupper($data['algorithm']) !== 'HMAC-SHA256') {
error_log('Unknown algorithm. Expected HMAC-SHA256');
return null;
}
// check sig
$expected_sig = hash_hmac('sha256', $payload, $secret, $raw = true);
if ($sig !== $expected_sig) {
error_log('Bad Signed JSON signature!');
return null;
}
return $data;
}
function base64_url_decode($input) {
return base64_decode(strtr($input, '-_', '+/'));
}
?>
0
También tuve que agregar un sitio web en los criterios. Este es mi código Yii
if(empty($_POST['signed_request']) === false)
$signedRequest = Yii::app()->fb->getSignedRequest();
if(isset($signedRequest['page']))
$this->layout = 'tab';
else if(isset($signedRequest['user']) && ! isset($signedRequest['page']))
$this->layout = 'canvas';
else
$this->layout = 'website';
0
Gracias a @ifaour solution; Tuve que modificarlo para que funcione;
Esto funcionó para mí; Me di cuenta de que la solicitud firmada solo se envía cuando el sitio se carga bajo el lienzo; pero cuando se accede directamente, no se envía ninguna solicitud firmada.
así que terminé usando este código:
if(!isset($_SESSION['signed_request']) && empty($_SESSION['signed_request'])) {
exit("direct access not allowed.");
}
else
{
// echo 'Canvas';
// continue script
}
Cuestiones relacionadas
- 1. comentarios de Facebook moderación, aplicación o página de Facebook?
- 2. Cómo obtener un token de acceso de Facebook para una página sin aplicación o aplicación secreta
- 3. Vinculación de la página de una aplicación de Facebook a una página comercial de Facebook existente
- 4. Cámara IP, ¿cómo detectarlo en la red?
- 5. aplicación de Facebook, ¿cómo verificar si dentro de Facebook canvas/standalone usando PHP?
- 6. Página de Facebook Facebook Connect Facebook
- 7. ¿Cómo obtener el permiso Administrar páginas para una página o aplicación de Facebook en particular?
- 8. ¿Cómo abrir una página de Facebook en la aplicación de Facebook en el iPhone?
- 9. Pestaña Aplicación de Facebook -> Enlace externo con PHP
- 10. ¿Cómo publicar desde la aplicación de Facebook a la página de Facebook?
- 11. Publicación de Facebook en la página con PHP SDK
- 12. Anuncios en una página de la aplicación de Facebook (juego)
- 13. cómo añadir o incrustarla CKEditor en la página php
- 14. SDK de Facebook: pestaña de página La aplicación no se encuentra en la aplicación móvil de Facebook
- 15. Transformada en perspectiva de modo 7 en lienzo?
- 16. Nueva aplicación de Facebook: ¿FBML o iFrame?
- 17. ¿Por qué la primera solicitud de una página de lienzo de la aplicación IFrame de Facebook es una solicitud POST?
- 18. ¿Cómo iniciar la aplicación de Facebook?
- 19. PHP: Mcrypt: ¿qué modo?
- 20. Modo estricto en PHP?
- 21. publica en la página de facebook pared como administrador de Facebook a través de facebook php api
- 22. Redirigir de la página de lienzo de Facebook al sitio web
- 23. Publicar en la página de Facebook pared como una página
- 24. Página de Facebook/Entorno de prueba de aplicación
- 25. ¿Cómo subir una imagen (en forma de datos-URL del lienzo HTML) a Facebook?
- 26. aplicación Fling sobre lienzo androide
- 27. Rails accepts_nested_attributes_for Error, ayúdeme a detectarlo
- 28. Facebook explota mi página web
- 29. PHP APC en modo CLI
- 30. Abrir página en la aplicación Facebook, Twitter y Google Plus desde otra aplicación - Android
¿Sigue siendo el caso? Cuando experimento, una solicitud firmada solo se publica cuando el usuario aterriza en la url del lienzo. Las páginas subsiguientes no lo entienden. – dmnc
@FuzzyDunlop, consulte esta [respuesta] (http://facebook.stackoverflow.com/questions/7610408/htacess-redirect-secure-browsing-on-my-facebook-page/7610648#7610648) es posible que necesite cambie sus URL para modificar la URL del nivel superior (usando 'target =" _ top "') en lugar de redirigir dentro del iframe donde está perdiendo 'signed_request' – ifaour
Cuando se prueba; Estoy obteniendo el 'signed_request'; pero no puede detectar el parámetro 'page'; ¿Podrías por favor considerar la actualización hasta la fecha? – wpcoder