调用FB.init(之前</body>)的简单事情然后FB.getLoginStatus(callback)不会触发回调函数.
经过一些调试后,我认为SDK停留在"加载"(即FB.Auth._loadState == 'loading')阶段并且永远不会"加载",因此所有回调都会排队,直到SDK加载完毕.如果我在调试期间强制触发"已加载"事件 - FB.Event.fire('FB.loginStatus', 'loaded')如果您有兴趣 - 那么可以正确调用回调.
可能相关的额外细节:
这是怎么回事?为什么SDK永远不会被加载?
谢谢
更新:刚刚在Chrome上试过它并且它有效(不知道为什么它之前没有用).仍然无法在IE中工作
TL; DR Facebook javascript SDK无法确定直接从facebook.com下面注销的用户的准确登录状态.
我正在使用javascript SDK开发一个Facebook应用程序进行身份验证.我注意到,当用户直接退出Facebook(在facebook.com上)时,SDK无法理解用户在应用页面上的登录状态.我把它归结为以下简单的测试用例.
在一个选项卡中登录facebook.com.在另一个选项卡中,渲染下面的应用页面(根据需要替换MY_APP_ID).如果您以从未授予此应用程序权限的用户身份登录Facebook,请单击"登录"并授予他们.无论哪种方式,您都应该看到一些事件触发,表明您已登录.
现在,回到facebook.com标签上,退出facebook.转到应用程序选项卡,然后单击所有按钮("登录"除外)并查看浏览器控制台输出.
什么时候FB.logout被召唤,什么都没发生 永远不会调用回调.在Chrome中,出现以下错误:"不安全的JavaScript尝试使用URL http://www.facebook.com/从框架http://my_app.com访问框架.域,协议和端口必须匹配."
当FB.getLoginStatus被调用时,响应说"连接"和具有authResponse对象.但这没有用,因为它现在不正确.相反,如果为"force"参数传入true,则不会发生任何事情(永远不会调用回调).
当FB.getAuthResponse被调用时,没有任何反应(回调永远不会调用).
在任何此类事件中(在退出facebook之后)都没有触发任何相关事件.
那么问题是在这种情况下似乎没有可能从SDK合法地确定用户的登录状态.或者我做了一些愚蠢的事情,尽管我把它煮到了最低限度.
我的最终目标是,如果用户在退出facebook后点击我的注销按钮,我希望能够在这种情况下做一些事情.但SDK没有提供实现这一目标的可行方法.
任何想法或想法?有没有其他人经历过这个并找到了解决方法?谢谢!
简单的应用页面:
<html lang='en' xml:lang='en' xmlns='http://www.w3.org/1999/xhtml' xmlns:fb='http://www.facebook.com/2008/fbml'>
<head>
</head>
<body>
<script>
window.fbAsyncInit = function() {
function subFBEvent(name) {
FB.Event.subscribe(name, function(r) {
console.log(name);
console.log(r);
});
}
subFBEvent('auth.login');
subFBEvent('auth.logout');
subFBEvent('auth.authResponseChange');
subFBEvent('auth.statusChange');
FB.init({
appId : 'MY_APP_ID',
status : true, // check login status
cookie : true, // enable cookies to allow the server to access …Run Code Online (Sandbox Code Playgroud) 我正在尝试在我的网站上实现,真的需要你的登录与Facebook功能的帮助.
基本上,我正在努力实现以下目标:
如果用户之前已确认该应用并点击我网站上的FB登录按钮,则会登录该网站(该网站的用户帐户与Facebook用户ID相关联)
如果用户之前没有确认该应用程序,则在FB登录(和订阅应用程序)时,他们会被重定向到网站的注册页面.这里的表格预先填入了来自Facebook的用户数据,注册过程变得更加容易和快捷.
我正在使用下面的代码.
<body>
<div id="fb-root"></div>
<script>
window.fbAsyncInit = function() {
FB.init({
appId: 'xxxxxxxx',
status: true,
cookie: true,
xfbml: true,
oauth: true
});
FB.Event.subscribe('auth.login', function(response) {
if (response.status === 'connected') {
var uid = response.authResponse.userID;
var accessToken = response.authResponse.accessToken;
if ((parseFloat(uid) == parseInt(uid)) && !isNaN(uid)) {
$.ajax({
url: '/user_actions/prep_facebook_registration',
cache: false,
type: 'POST',
data: { 'uid': uid, 'token': accessToken },
dataType: 'json',
success: function(data) {
if (data.success=='true') {
if ((typeof(data.redirect) != 'undefined')) {
window.location=data.redirect;
}
}
}
}); …Run Code Online (Sandbox Code Playgroud) 目前的omniauth-facebook似乎有一些问题,我想知道是否有人对它们有答案.
第一个问题是无效的凭证问题.由于此问题,我无法使用客户端授权登录我的应用程序.但是,这可以通过将facebook-omniauth降级到1.4.0版本来解决.(参考)
但是,现在我遇到第二个问题,NoAuthorizationCodeError,错误消息:
OmniAuth Strategies Facebook NoAuthorizationCodeError
(must pass either a `code` parameter or a signed request
(via `signed_request` parameter):
Run Code Online (Sandbox Code Playgroud)
这是在这里被问到的,但是接受的答案建议再次实际升级到1.4.1版本,这将使先前的无效凭证问题再次发生.所以这对我来说不是一个选择.
NoAuthorizationCodeError当我尝试通过Internet Explorer登录Facebook iFrame(从应用程序中心搜索我的应用程序)内的应用程序时,会发生这种情况.在chrome或firefox上一切正常.还有一个github问题确切地指出了这个问题,但还没有人提出答案.我也尝试降级到omniauth-facebook 1.3.0版本,但它没有任何区别.我也尝试传递signed_request如下参数:
window.location = '/auth/facebook/callback',
{ signed_request: response.authResponse.signedRequest }
Run Code Online (Sandbox Code Playgroud)
但是,它没有任何区别(在IE上,错误仍然存在),我不确定这是否是将代码作为参数传递的正确方法(我该如何检查?)
我假设我的设置没有问题.我真的很感激这方面的任何帮助.
更新:
我升级到1.4.1版本没有无效的凭据问题,但当我通过Internet Explorer访问Facebook内的应用程序时仍然会出现NoAuthorizationCodeError.检查我的Github 问题.
更新:
我降级到1.4.0版本,并添加了signedRequest params.
<script>
function login() {
FB.login(function(response) {
if (response.authResponse) {
window.location = '/auth/facebook/callback?' + $.param({ signed_request: response.authResponse.signedRequest })
}
}, {scope: 'email,publish_stream,publish_actions'}); …Run Code Online (Sandbox Code Playgroud) 我有Senscha 2.0移动应用程序,我想使用最新的phonegap(cordova)构建.
我想添加facebook登录功能.我找到了三个选择:
我决定和第二个一起去.
我在FB应用程序设置(移动站点URL)中遇到域存在问题.
我在那里键入了我的一个域名,但是当在xCode中使用Cordova构建应用程序时,facebook会出现错误,因为很明显,phonegap/cordova不会"使用"任何域名.
当我将我的应用程序(不使用phonegap)上传到我在Facebook设置中输入的域名时,一切都可以在我的iPhone上运行(在Safari中使用网站).
更确切地说.
当我将我的应用程序用作"移动Web应用程序"时,Facebook JS SDK正常工作.
当我使用Cordova/Phonegap构建我的项目(它自动使用InAppBrowser插件)时,它停止工作.
Facebook JS SDK能与Phonegap/Cordova一起使用吗?
我已经在使用这个脚本,但是当我使用API到家乡并且位置是undefined消息时我没有得到家乡和位置请出示示例代码以及如何在Facebook API中获取用户手机号码:
function login() {
FB.login(function(response) {
if (response.authResponse) {
// connected
testAPI();
} else {
// cancelled
}
}, { scope: 'email,user_birthday,user_location,user_hometown' });
}
function testAPI() {
console.log('Welcome! Fetching your information.... ');
FB.api('/me', function(response) {
console.log('Good to see you, ' + response.name + '.' + ' Email: ' + response.email + ' Facebook ID: ' + response.id);
//console.log('Good to see you, ' + response.name + '.');
var userfirstName=response.first_name;
var lastName=response.last_name;
var useremail=response.email;
var usersex=response.gender;
var userbithday=response.birthday;
var …Run Code Online (Sandbox Code Playgroud) javascript jsp facebook facebook-graph-api facebook-javascript-sdk
我有以下代码记录用户并显示"选择要求的朋友"对话框("apprequests"):
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:fb="http://www.facebook.com/2008/fbml">
<head>
<title>Test</title>
<script type="text/javascript">
function facebook(){
FB.login(function(response) {
if (response.authResponse) {
var access_token = FB.getAuthResponse()['accessToken'];
FB.ui({
method: 'apprequests',
message: 'Sample Title',
max_recipients:1
}, function(response){
console.log('OK');
});
}
}, {scope: 'publish_stream'});
}
</script>
</head>
<body>
<p><a href="javascript:facebook();">Test</a></p>
<div id="fb-root"></div>
<script type="text/javascript">
(function(d, s, id) {
var js, fjs = d.getElementsByTagName(s)[0];
if (d.getElementById(id)) return;
js = d.createElement(s); js.id = id;
js.src = "//connect.facebook.net/es_LA/all.js#xfbml=0&appId=XXXXXXXXXXXXXX";
fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));
</script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
该代码适用于所有主流浏览器(Firefox,Chrome,Opera,IE11,适用于IOS的Safari,Android浏览器).Safari(适用于Mac/PC)是例外:它打开"apprequests"对话框,但对话框显示为空.如果您更改下拉选项(再次"邀请朋友",然后再更改为"所有朋友"),最终会显示好友列表.
知道如何修复这个bug吗?
谢谢!
我正在使用facebook 3.0.1钛模块.在Android中,Facebook apprequests对话框始终返回为已取消,即使实际的apprequest已发送,也可以在Facebook上看到.因此,我无法将请求存储在我的后端,这使得apprequest无用.
但在iOS中它工作正常.
这是我的代码
var fb = require('facebook');
fb.appid = 'my_app_id';
fb.permissions = ['publish_stream', 'read_stream', 'email']; // Permissions your app needs
fb.forceDialogAuth = true;
fb.addEventListener('login', function(evt) {
if (evt.success) {
fb.dialog("apprequests", {
message:"LeaugeNation",
// max_recipients : "2"
}, function(response) {
alert(JSON.stringify(response));
if(response.result) {
alert("send friend req");
// sendFacebookInvite(e.result);
}
});
} else if (evt.error) {
alert("error");
} else if (evt.cancelled) {
alert("cancelled");
} else {
alert("default");
}
});
fb.authorize();
Run Code Online (Sandbox Code Playgroud)
如果我运行代码我得到以下结果
{"cancelled":true,"code":-1,"success":false}
我做了以下更改,但没有得到结果.
提前致谢.
你能告诉我我想要在Android上获得正确结果的变化吗?
android titanium facebook-javascript-sdk titanium-modules titanium-mobile
我记得有一个channelUrl选项FB.init(),但根据这个页面它似乎不再存在
此功能是否已弃用?
我试图将应用程序升级到当前的Facebook API(v2.7),因为Facebook警告我们当前使用的API(v2.0)已被弃用.我查看了代码并找到sdk.js并更改了FB.init函数配置参数的version属性v2.7.
然后我找到了其他FB.init使用的电话all.js.似乎FB.init功能all.js不需要版本.
我查看了Facebook开发者页面all.js,但是我找不到任何相关信息.
那么,sdk.js和之间有什么区别all.js?
javascript sdk facebook facebook-graph-api facebook-javascript-sdk