当我尝试在 Windows 移动设备(Lumia 800)中使用 facebook 登录时,出现错误“不支持的浏览器:IE”。有什么办法可以修复它或facebook必须在他们的脚本中进行修复。或者任何其他解决方法可以解决这个问题?请建议。
1 回答
我为微软做的一个大项目也遇到了这个问题。我需要在 Windows 移动设备上使用 Facebook 宣誓,并得到了同样的错误。这就是我解决它的方法:通常有两种使用 javascript 宣誓的方法 - 此处描述的简单方法(产生此错误): https ://developers.facebook.com/docs/javascript/quickstart
以及此处描述的手动构建登录流程: https ://developers.facebook.com/docs/facebook-login/manually-build-a-login-flow
以下是对第二个选项必须执行的操作的快速说明:
1)异步加载SDK
(function(d){
var js, id = 'facebook-jssdk', ref = d.getElementsByTagName('script')[0];
if (d.getElementById(id)) {return;}
js = d.createElement('script'); js.id = id; js.async = true;
js.src = "//connect.facebook.net/en_US/all.js";
ref.parentNode.insertBefore(js, ref);
}(document));
2) 在页面加载时检查 access_token。如果用户没有登录,将没有访问令牌。如果用户这样做了,则会将访问令牌作为查询附加到 URL,但使用“#”而不是“?” 我使用了这个功能:
function getUrlVars()
{
var query = '#';//normally ?
var vars = [], hash;
var hashes = window.location.href.slice(window.location.href.indexOf(query) + 1).split('&');
for(var i = 0; i < hashes.length; i++)
{
hash = hashes[i].split('=');
vars.push(hash[0]);
vars[hash[0]] = hash[1];
}
return vars;
}
现在确定您是否获得了 access_token:
var urlString = getUrlVars();
var hasAccess=false;
var userToken;
if(typeof(urlString)!='undefined' && typeof(urlString.access_token)!='undefined'){
hasAccess=true;
userToken=urlString.access_token;
}
如果用户有权使用应用程序 ID、访问令牌和响应类型将他们重定向到相同(或其他)的 url:
var appID = 'your app id';
if(!hasAccess){
$('#login').on('click',function(){
var login_redirect_uri = 'http://www.yourpage.com/';
var login_response_type = 'token';
var loginURL = 'https://www.facebook.com/dialog/oauth?client_id='+appID+'&redirect_uri='+login_redirect_uri+'&response_type='+login_response_type;
window.location.replace(loginURL);
});//login-click
}
3)如果url查询中没有访问令牌,使用服务器端服务(我们将在下面构建)来验证令牌
var tokenValidate = 'https://titan-img-gen.aws.af.cm/toeknValidate.php';
$.ajax({
type: 'GET',
url: tokenValidate,
crossDomain: true,
data:{
token:userToken
},
dataType:'json',
success: function(validateData){
if(validateData.error){
showError();
}else{
username = validateData.username;
firstname = validateData.firstname;
lastname = validateData.lastname
//continue your code
}
},
error: function (responseData, textStatus, errorThrown) {
showError();
}
});
4) 服务器端服务 (PHP) a) 生成应用令牌:https ://developers.facebook.com/docs/facebook-login/access-tokens/ b) 可能需要相同的来源解析:
header('Access-Control-Allow-Origin: '.$_SERVER['HTTP_ORIGIN']);
header('Access-Control-Allow-Methods: GET, PUT, POST, DELETE, OPTIONS');
header('Access-Control-Max-Age: 1000');
header('Access-Control-Allow-Headers: Content-Type, Authorization, X-Requested-With');
c) 定义 app_token :
$app_token='*******';
d) 检查 get 中的令牌参数
$reponse = array();
if(!isset($_GET['token']) || $_GET['token']==NULL ){
$reponse['error'] = true;
}else{
$user_access_token = $_GET['token'];
//continue here...
}
e) use facebook graph service to debug token
$fbDebug = " https://graph.facebook.com/debug_token?input_token= $user_access_token&access_token=$app_token";
f)get the json file, decode it and get the user_id from it. you can then retrieve more info from Facebook easily
try{
$fbResult = file_get_contents($fbDebug);
$fbResultDecode = json_decode($fbResult);
if(isset($fbResultDecode->data->error)){
$reponse['error'] = true;
}else{
$user_id= $fbResultDecode->data->user_id;
$userJSON = file_get_contents("https://graph.facebook.com/$user_id");
$userInfo = json_decode($userJSON);
$reponse['username'] = $userInfo->username;
$reponse['firstname'] = $userInfo->first_name;
$reponse['lastname'] = $userInfo->last_name;
}
}catch(Exception $e){
$reponse['error'] = true;
}
g)return the JSON
header('Content-Type: application/json');
echo json_encode($reponse);
巴达-比姆-巴达-繁荣
我撒了谎,这不是一个快速的解释......但我希望它会节省你一些时间!托默·阿尔莫格