尝试在 IOS 上的 chrome 上使用 FB.ui 时避免“不支持的浏览器...”的任何解决方法
Posted
技术标签:
【中文标题】尝试在 IOS 上的 chrome 上使用 FB.ui 时避免“不支持的浏览器...”的任何解决方法【英文标题】:Any workaround to avoid "unsupported browser ..." when trying to use FB.ui on chrome on IOS 【发布时间】:2014-11-13 19:10:01 【问题描述】:当我尝试在 iPhone 上使用 FB.ui API 打开共享对话框时,我收到“不支持的浏览器:ios 版 chrome 不支持此功能。请使用 safari 并重试”。
我猜这个问题与Facebook OAuth "Unsupported" in Chrome on iOS 相关,但我对共享感兴趣,而不是对自身进行身份验证(即我不在乎用户是否会登录,我也不知道)。
【问题讨论】:
检查 [这里] [1] 我是如何解决这个问题的! [1]:***.com/a/32394517/1435014 【参考方案1】:我知道这是一个老问题,但如果其他人面临这种问题,(我的意思是一些谷歌搜索让我来到这里是有原因的)。
Facebook 分享对话框无需登录即可分享。
https://developers.facebook.com/docs/sharing/reference/share-dialog
通常你使用 js sdk,像这样:
FB.ui(
method: 'share',
href: 'https://developers.facebook.com/docs/',
, function(response));
不幸的是,这在 iO 上的 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']);
因此,基本上,您需要检测用户是否在 iO 上使用 Chrome,然后将 FB.ui 函数的触发元素替换为“FB 共享器”链接。因为不想一直用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;
/**
*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;
【讨论】:
这个问题完全没有过时,你的解决方法应该有效,但问题是它是基于服务器端的,不适用于缓存。应该很容易在 JS 中完成这一切。现在它对我来说是低优先级,但稍后会尝试一下以上是关于尝试在 IOS 上的 chrome 上使用 FB.ui 时避免“不支持的浏览器...”的任何解决方法的主要内容,如果未能解决你的问题,请参考以下文章