나는 마침내 Sascha가 제공 한 것과 비슷한 솔루션을 찾았지만 PHP에서 쿠키를 명시 적으로 설정했기 때문에 약간의 조정만으로도 약간의 조정이 이루어졌습니다.
// excecute this code if user has not authorized the application yet
// $facebook object must have been created before
$accessToken = $_COOKIE['access_token']
if ( empty($accessToken) && strpos($_SERVER['HTTP_USER_AGENT'], 'Safari') ) {
$accessToken = $facebook->getAccessToken();
$redirectUri = 'https://URL_WHERE_APP_IS_LOCATED?access_token=' . $accessToken;
} else {
$redirectUri = 'https://apps.facebook.com/APP_NAMESPACE/';
}
// generate link to auth dialog
$linkToOauthDialog = $facebook->getLoginUrl(
array(
'scope' => SCOPE_PARAMS,
'redirect_uri' => $redirectUri
)
);
echo '<script>window.top.location.href="' . $linkToOauthDialog . '";</script>';
브라우저가 사파리 일 때 쿠키를 사용할 수 있는지 확인합니다. 다음 단계에서는 애플리케이션 도메인, 즉 위의 URL_WHERE_APP_IS_LOCATED로 제공된 URI에 있습니다.
if (isset($_GET['accessToken'])) {
// cookie has a lifetime of only 10 seconds, so that after
// authorization it will disappear
setcookie("access_token", $_GET['accessToken'], 10);
} else {
// depending on your application specific requirements
// redirect, call or execute authorization code again
// with the cookie now set, this should return FB Graph results
}
따라서 응용 프로그램 도메인으로 리디렉션 한 후 쿠키가 명시 적으로 설정되고 사용자를 권한 부여 프로세스로 리디렉션합니다.
필자의 경우 (CakePHP를 사용하고 있지만 다른 MVC 프레임 워크와 잘 작동하므로) FB 인증이 다른 시간에 실행되는 로그인 작업을 다시 호출하고 있으며 이번에는 기존 쿠키로 인해 성공합니다.
앱을 한 번 승인 한 후에 Safari (5.1.6)에서 앱을 사용하는 데 더 이상 문제가 없었습니다.
그것이 누군가를 도울 수 있기를 바랍니다.