我开始使用facebook javscript SDK,当我阅读源代码时,我发现了一件有趣的事情.
代码示例如下:
/**
* Annotates a function with a meta object
*/
function annotate(fn, meta) {
meta.superClass = fn.__superConstructor__;
fn.__TCmeta = meta;
return fn;
}
// export to global
__w = annotate;
/**
* when using the annotate function
*/
function sprintf(format) {
// function body
}
__w(sprintf, {"signature":"function(string)"}); // <-- what is the purpose of doing this?
Run Code Online (Sandbox Code Playgroud)
所以,我的问题是用于什么?这样做有什么好处?
仅供参考,整个源代码在这里,你可以看到很多annotate()被使用
我希望我的网站登录Facebook,但我看到这个错误.
给定的URL未在客户端OAuth设置中列入白名单:此重定向失败,因为重定向URI未在应用的客户端OAuth设置中列入白名单.确保启用了客户端和Web OAuth登录,并将所有应用程序域添加为有效的OAuth重定向URI.
<!DOCTYPE html>
<html>
<head>
<title>Facebook Login JavaScript Example</title>
<meta charset="UTF-8">
</head>
<body>
<script>
// This is called with the results from from FB.getLoginStatus().
function statusChangeCallback(response) {
console.log('statusChangeCallback');
console.log(response);
// The response object is returned with a status field that lets the
// app know the current login status of the person.
// Full docs on the response object can be found in the documentation
// for FB.getLoginStatus().
if (response.status === 'connected') {
// Logged into your app …Run Code Online (Sandbox Code Playgroud) facebook facebook-graph-api facebook-javascript-sdk facebook-login
我在谷歌应用引擎(webapp)上使用python facebook api.我想将用户的cookie设置为在用户退出应用程序时过期.此cookie由Javascript Facebook API设置.
这是facebook api函数显示facebook api如何访问facebook cookie:
def get_user_from_cookie(cookies, app_id, app_secret):
cookie = cookies.get("fbs_" + app_id, "")
if not cookie: return None
args = dict((k, v[-1]) for k, v in cgi.parse_qs(cookie.strip('"')).items())
payload = "".join(k + "=" + args[k] for k in sorted(args.keys())
if k != "sig")
sig = hashlib.md5(payload + app_secret).hexdigest()
expires = int(args["expires"])
if sig == args.get("sig") and (expires == 0 or time.time() < expires):
return args
else:
return None
Run Code Online (Sandbox Code Playgroud)
我可以通过执行以下操作来调用此函数:
class WelcomePage(webapp.RequestHandler):
def getFacebookCookie(self):
cookie = …Run Code Online (Sandbox Code Playgroud) python google-app-engine session-cookies facebook-graph-api facebook-javascript-sdk
我们使用Facebook Javascript SDK来验证我们的用户.
用户进行身份验证后,用户将获得包含已签名请求的fbsr_ <app_id> cookie.
然后我们使用AJAX将一些信息发布到我们的服务器.服务器接收带有签名请求的cookie,但是当服务器解析cookie中的签名请求(修改过的python SDK)时,它会将JSON对象解码为:
{
"algorithm": "HMAC-SHA256",
"code": "2.AQDBJ3-ZpURb9P4T.3600.1316037600.1-786359552|BNK6FGOAkvMs7slboQMSIEJYDWc",
"issued_at": 1316031333,
"user_id": "786359552"
}
这与我们应该获得的签名请求文档相反.
服务器需要访问令牌,因此可以使用GraphAPI获取一些其他信息.
我们如何从签名请求中获取访问令牌?
我只想在我的网站上使用基本的facebook按钮.我按照facebooks网站上的说明进行操作(http://developers.facebook.com/docs/reference/plugins/like/).我尝试了HTML5,XFBML和iFrame方式,没有任何快乐.所以我想也许这与我的网站干扰有关.所以我创建了一个简单的html页面,如下所示,它仍然FB.getLoginStatus()在调用FB.init()错误之前给我调用.
<html>
<body>
<div id="fb-root"></div>
<script>(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/en_US/all.js#xfbml=1";
fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));</script>
<div class="fb-like" data-href="http://www.facebook.com/[mypage]" data-send="false" data-width="450" data-show-faces="false"></div>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
更新:我删除了上面所有的东西回到iFrame唯一的方法,它的工作原理,但只在Firefox中.Chrome和IE9我仍然没有得到任何错误报告.为什么下面的这一行只能在FireFox中工作(显然[myPage]部分被换掉了)?
<iframe src="//www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.facebook.com%2F[myPage]&send=false&layout=standard&width=450&show_faces=false&action=like&colorscheme=light&font&height=35" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:450px; height:35px;" allowTransparency="true"></iframe>
Run Code Online (Sandbox Code Playgroud) 在我的代码中我有
FB.api('/me/friends', function(response) {
if(response.data) {
//TODO : what to do if no. of friends is more than 5000 (pagination by fb)
friends_data=response.data;
dijit.registry.byId("mainWidget_div").set_friends_data(friends_data);
} else {
alert("Error!");
}
});
Run Code Online (Sandbox Code Playgroud)
这给出了一个错误.但是,如果我手动调用此函数(在控制台上),则没有错误
FB.api('/me/friends', function(response){r=response;});
//wait a while
r
Run Code Online (Sandbox Code Playgroud)
现在r.data是我的一群朋友.
我检查了网络面板,我收集到,当我手动调用它时,访问令牌会自动插入到请求URL中,当通过代码调用它时,访问令牌不会被插入.
我的应用程序中的完整fb sdk加载代码是这样的:
<script type="text/javascript">
// You probably don't want to use globals, but this is just example code
var fbAppId = "{{facebook_app_id}}";
// This is boilerplate code that is used to initialize the Facebook
// JS SDK. …Run Code Online (Sandbox Code Playgroud) facebook facebook-graph-api facebook-javascript-sdk facebook-access-token
我正在尝试在Google Analytics上设置目标以跟踪Sign Ups,因此我设置了一个"谢谢"页面作为我的网址目标.当我的用户使用他们的电子邮件地址注册但是当他们使用Facebook注册/登录时,它很有效.当他们登录时,他们被重定向到感谢页面,因为在使用Passport JS和Node设置Facebook时只有一个url回调.
这是我的代码:
passport.serializeUser(function(user, done) {
done(null, user);
});
passport.deserializeUser(function(id, done) {
UserActivity.findOne(id,'uid ref', function (err, user) {
done(err, user);
});
});
passport.use(new FacebookStrategy({
clientID: 'XXXXXXXXXXXX',
clientSecret: 'XXXXXXXXXXXXXXXX',
callbackURL: "https://www.xxxxxxx.com/auth/facebook/callback"
},
function(accessToken, refreshToken, profile, done) {
//console.log(profile);
User.findOne({ uid: profile.id }, function(err, uInfo) {
if(err) console.log('Error: '+err);
else{
//User exists: we are done
if(uInfo){
done(err, uInfo);
}
else{
//User doesn't exist: we create a new one
var newUser = new User ({
uid: profile.id,
email:profile.emails[0].value,
ref: 'Facebook'
}); …Run Code Online (Sandbox Code Playgroud) 我目前正在构建一个应用程序,它将使用Apache Cordova Facebook插件来通信和验证用户.
我大约一个月前就开始工作了,当我决定升级到最新版本的Apache Cordova Facebook插件和Facebook SDK时,我接近了开发的结束 - 现在我无法让它运转起来.
我不确定Facebook是否已经改变了一些东西,或者Cordova Facebook Connect插件现在是否有问题 - 我真的被卡住了:(
以下是我正在采取的步骤和结果:
注意:我每次都尝试从计算机中删除所有程序和SDK,以消除任何交叉版本问题.
keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore | openssl sha1 -binary | openssl base64./adb install ~/facebook-android-sdk-3.14/bin/FBAndroid-7.0.0.apksudo npm install -g cordovacordova create hello com.example.hello "HelloWorld"cd hellocordova platform add androidcordova …android facebook facebook-javascript-sdk cordova facebook-sdk-3.0
我在本地部署的Web应用程序上首次尝试使用Facebook登录API.
我在他们的文档中使用片段初始化API,并在我的HTML页面上有一个按钮
<button type="button" onclick="fbLogin()">
Run Code Online (Sandbox Code Playgroud)
哪里fbLogin()是
function fbLogin() {
FB.login(function(response) {
console.log(response);
// handle the response
if (response.status === 'connected') {
// Logged into your app and Facebook.
} else if (response.status === 'not_authorized') {
// The person is logged into Facebook, but not your app.
} else {
// The person is not logged into Facebook, so we're not sure if
// they are logged into this app or not.
}
}, {scope: …Run Code Online (Sandbox Code Playgroud) 我正在本地主机上开发一个应用程序,突然出现此错误:
X天之内从http页面调用FB.api方法将停止工作。请更新您的网站以使用https进行Facebook登录。
时间到了,我仍然可以在localhost中进行开发吗?
facebook ×7
android ×1
annotations ×1
cordova ×1
html5 ×1
javascript ×1
node.js ×1
oauth-2.0 ×1
passport.js ×1
python ×1