任何解决方法,以避免“不受支持的浏览器......”当试图在Chrome上使用FB.ui IOS

问题描述:

我得到一个“不受支持的浏览器:铬ios不支持此功能。请使用Safari浏览器,然后再试一次”当试图通过在iPhone上使用FB.ui API来打开共享对话框时。任何解决方法,以避免“不受支持的浏览器......”当试图在Chrome上使用FB.ui IOS

我想这个问题是相关的Facebook OAuth "Unsupported" in Chrome on iOS,但我有兴趣分享和不认证本身(即我不在乎如果用户将登录,我不会知道它)。

+0

检查[这里] [1]我是如何解决这个问题的! [1]:http://*.com/a/32394517/1435014 – apandey846

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

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

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

通常使用JS SDK,就像这样:

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

Unfortunally这将在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共享者” -link的的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; 
    } 
} 
+2

这个问题是完全没有过时,你的解决方法应该可行,但它存在的问题是,它是服务器端基于这将不会与缓存工作。在JS中应该很容易做到这一切。现在它对我来说是不重要的,但稍后会试一试 –