当我试图在iphone上使用FB.ui API打开共享对话框时,我得到了一个"不支持的浏览器:chrome for ios不支持此功能。请使用safari并重试"。
我猜这个问题与Facebook OAuth有关;不支持的";在iOS上的Chrome中,但我感兴趣的是共享,而不是身份验证本身(即我不在乎用户是否会登录,我也不会知道)。
我知道这是一个老问题,但如果其他人面临这种问题,(我的意思是,一些谷歌搜索让我来这里是有原因的)。
facebook共享对话框不需要登录即可共享。
https://developers.facebook.com/docs/sharing/reference/share-dialog
通常你使用js-sdk,比如:
FB.ui({
method: 'share',
href: 'https://developers.facebook.com/docs/',
}, function(response){});
不幸的是,这在iOs上的Chrome中不起作用,但幸运的是,有一个解决办法(如果您使用的是php);
$isIosChrome = (strpos($_SERVER['HTTP_USER_AGENT'], 'CriOS') !== false) ? true : false;
if ($isIosChrome == true) {
$iosChromeShareLink = 'https://www.facebook.com/dialog/share
?app_id='.$settings['facebook']['appId'].'
&display=popup
&href='.urlencode($THE_SITE_U_WANT_TO_SHARE).'
&redirect_uri='.urlencode($settings['facebook']['redirectUrl']);
}
因此,基本上,你需要检测用户是否在iOs上使用Chrome,然后用"FB sharer"链接替换FB.ui功能的触发元素。因为你不想一直使用sharer,只有当js-sdk不工作的时候。
因为互联网上的每个网站都被脸书视为OG对象,你只需要确保你的网站包含正确的OG标签。
但是,如果你的facebook应用程序(或网站)出于其他目的需要登录,并且你面临chrome发出的"不支持浏览器"消息,你可以通过php重定向登录来登录你的用户(这需要你使用php-sdk)。
use FacebookFacebookSession;
use FacebookFacebookRedirectLoginHelper;
use FacebookFacebookRequest;
use FacebookGraphUser;
use FacebookFacebookRequestException;
/**
*FIXES CHROME ON IOS BUG
*
*
*/
$isIosChrome = (strpos($_SERVER['HTTP_USER_AGENT'], 'CriOS') !== false) ? true : false;
if ($isIosChrome == true) {
FacebookSession::setDefaultApplication(
$settings['facebook']['appId'],
$settings['facebook']['secret']
);
$helper = new FacebookRedirectLoginHelper($settings['facebook']['redirectUrl']);
$session = $helper->getSessionFromRedirect();
if ($session) {
//var_dump($session);
$user_profile = (new FacebookRequest(
$session, 'GET', '/me'
))->execute()->getGraphObject(GraphUser::className());
$uid=$user_profile->getID;
echo $uid;
}
else{
$loginUrl = $helper->getLoginUrl();
header("location:".$loginUrl);
exit;
}
}