尝试在 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 时避免“不支持的浏览器...”的任何解决方法的主要内容,如果未能解决你的问题,请参考以下文章

使用 FBSDKLoginBehaviorWeb 处理 fb 集成上的错误密码事件

FB iOS SDK 自定义令牌缓存问题

如何通过javascript获取FB帖子链接?

ios上的CSS3过渡慢/不工作

在 chrome 上检查 IOS 设备

为啥iOS上的FB SDK要求朋友列表的权限,而应用程序不要求它