Facebook OAuth "Unsupported" in Chrome on iOS Facebook OAuth "Unsupported" in Chrome on iOS ios ios

Facebook OAuth "Unsupported" in Chrome on iOS


You can use the redirection method as follow for this case (by detecting the user agent being chrome ios):

https://www.facebook.com/dialog/oauth?client_id={app-id}&redirect_uri={redirect-uri}

See more info here https://developers.facebook.com/docs/facebook-login/login-flow-for-web-no-jssdk/

Remark: I personnaly use the server OAuth in that case but this should do the trick and is quite simple


This is how I did it (fixing iOS chrome specifically)

// fix iOS Chromeif( navigator.userAgent.match('CriOS') )    window.open('https://www.facebook.com/dialog/oauth?client_id='+appID+'&redirect_uri='+ document.location.href +'&scope=email,public_profile', '', null);else    FB.login(null, {scope: 'email,public_profile'});


Here is a complete workaround for your FB JS Auth on Chrome iOS issue http://seanshadmand.com/2015/03/06/facebook-js-login-on-chrome-ios-workaround/

JS functions to check auth, open FB auth page manually and refresh auth tokens on original page once complete:

function openFBLoginDialogManually(){  // Open your auth window containing FB auth page   // with forward URL to your Opened Window handler page (below)  var redirect_uri = "&redirect_uri=" + ABSOLUTE_URI + "fbjscomplete";  var scope = "&scope=public_profile,email,user_friends";  var url = "https://www.facebook.com/dialog/oauth?client_id=" + FB_ID + redirect_uri + scope;  // notice the lack of other param in window.open  // for some reason the opener is set to null  // and the opened window can NOT reference it  // if params are passed. #Chrome iOS Bug  window.open(url);}function fbCompleteLogin(){  FB.getLoginStatus(function(response) {    // Calling this with the extra setting "true" forces    // a non-cached request and updates the FB cache.    // Since the auth login elsewhere validated the user    // this update will now asyncronously mark the user as authed  }, true);}function requireLogin(callback){    FB.getLoginStatus(function(response) {        if (response.status != "connected"){            showLogin();        }else{            checkAuth(response.authResponse.accessToken, response.authResponse.userID, function(success){              // Check FB tokens against your API to make sure user is valid            });        }    });}

And the Opener Handler that FB auth forwards to and calls a refresh to the main page. Note the window.open in Chrome iOS has bugs too so call it correctly as noted above:

<html><head><script type="text/javascript">function handleAuth(){    // once the window is open     window.opener.fbCompleteLogin();    window.close();    }</script><body onload="handleAuth();">    <p>. . . </p></body></head></html>