我知道这是一个老问题,但如果有人遇到类似的问题(我的意思是某些搜索带我来到这里),Facebook分享对话框不需要登录即可分享。通常情况下,您会使用js sdk,如下所示:
https://developers.facebook.com/docs/sharing/reference/share-dialog。
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.ui函数的元素替换为“FB sharer”链接。因为您不想始终使用sharer,只有在js sdk无法工作时才使用。
由于Facebook将互联网上的每个站点都视为OG对象,因此您只需确保您的站点包含正确的OG标签即可。
但是,如果您的Facebook应用程序(或站点)需要登录以进行其他目的,并且您面对Chrome的“不受支持的浏览器”消息,则可以通过php重定向登录登录您的用户(这要求您使用php sdk)。
use Facebook\FacebookSession;
use Facebook\FacebookRedirectLoginHelper;
use Facebook\FacebookRequest;
use Facebook\GraphUser;
use Facebook\FacebookRequestException;
$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) {
$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;
}
}