尝试在IOS上使用chrome上的FB.ui时,避免"不支持的浏览器..."的任何解决方法

Mar*_*lun 9 facebook google-chrome ios fb.ui

我得到一个"不支持的浏览器:Chrome for ios不支持此功能.请尝试使用Safari上的FB.ui API打开共享对话框时使用safari并重试".

我想这个问题与iOS上的Chrome OAuth"Unsupported"相关,但我感兴趣的是共享而不是自身身份验证(即我不在乎用户是否会登录而我不会知道它).

Con*_*jak 3

我知道这是一个老问题,但如果其他人面临这种​​问题,(我的意思是一些谷歌搜索让我来这里是有原因的)。

Facebook 共享对话框不需要登录即可共享。

https://developers.facebook.com/docs/sharing/reference/share-dialog

通常你使用js sdk,如下所示:

FB.ui({
  method: 'share',
  href: 'https://developers.facebook.com/docs/',
}, function(response){});
Run Code Online (Sandbox Code Playgroud)

不幸的是,这在 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']);
}
Run Code Online (Sandbox Code Playgroud)

因此,基本上,您需要检测用户是否在 iO 上使用 Chrome,然后用“FB sharer”链接替换 ​​FB.ui 功能的触发元素。因为你不想一直使用共享器,只有当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;
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 这个问题完全没有过时,你的解决方法应该有效,但问题是它是基于服务器端的,不能与缓存一起使用。在 JS 中应该很容易完成这一切。现在对我来说优先级较低,但稍后会尝试 (2认同)