我有这个Facebook应用程序资料页面:
与我的基于iframe的Facebook应用程序Gem Spinner相关联:
http://apps.facebook.com/gemspinner/
我从阅读最近的Facebook文档中了解到,在过去几个月中,Facebook改变了用户可以“标记”应用程序的方法(“书签”,据我所知,是为应用程序添加图标的过程用户在Facebook主页左侧的应用程序列表)。我的理解是书签现在应该在用户第一次使用应用程序时自动发生。
但是我的应用程序没有发生这种情况。当你去那里时,它只会显示应用程序页面,让你玩游戏。没有确认消息,就像我在其他应用程序中看到的那样,检查我是否要允许此应用程序从我的Facebook帐户访问各种信息。并且我的主页上的应用程序列表中没有添加任何书签/图标。
所以我显然错过了一些东西。我试着按照这里的说明进行操作:http://developers.facebook.com/docs/guides/canvas/,包括书签上的部分,但是这一部分听起来就像它会自动发生一样。
我的应用已被批准用于Facebook目录(尽管它尚未显示在目录的搜索中)。而且它不是“沙盒”模式。
也许我必须做一些Facebook API调用才能让用户“安装”应用程序。如果是这样,我很想知道它们是什么。
答案 0 :(得分:0)
显然我缺少的是,你需要从你的javascript代码中调用FB.login(),以便让facebook“自动”为用户添加应用程序的书签。我认为这有一定的意义,因为用户必须在您的应用(或代表您的应用的Facebook)之前对您的应用进行“身份验证”,才能对用户的帐户进行任何更改,例如添加书签。尽管如此,它似乎可能已经它添加了没有身份验证的书签,并且肯定会阅读Facebook文档,人们会认为只需访问应用程序就可以创建书签,无论身份验证如何
无论如何,另一个问题是如何以平稳的方式进行身份验证。使用页面重定向可能会有更聪明,更实用的方法,但似乎这个新API想要显示登录UI的弹出窗口。如果通过按下按钮触发该弹出窗口(即,表示“意味着”单击此处以使用此应用程序进行身份验证的按钮),则会弹出没有可怕的浏览器弹出警告的弹出窗口。但是如果你自己调用FB.login()函数,就会收到可怕的警告。
所以,为了解决这个问题,我让我的代码触发了按钮事件,并且它起作用了(至少在Firefox上)。代码是:
<body>
<div id="fb-root">
</div>
<script src="http://connect.facebook.net/en_US/all.js" type="text/javascript"></script>
<script type="text/javascript">
FB.init({
appId : 'your app id here',
status : true, // check login status
cookie : true, // enable cookies to allow the server to access the session
xfbml : false // parse XFBML
});
function fblogin() {
FB.getLoginStatus(function(response) {
if (response.session) {
// logged in and connected user, someone you know
} else {
// no user session available, someone you dont know
FB.login(
function(response)
{
if (response.session)
{
// user successfully logged in *or* user was already logged in
// *and* user has now been successfully authenticated for this app
// *and* a bookmark added by Facebook for this app
}
else
{
// user cancelled login
}
} );
}
});
}
</script>
<a id="clickme" href="#" onclick="fblogin();return false;"></a>
... the rest of your page here ...
<script type="text/javascript">
document.getElementById( "clickme" ).onclick();
</script>
</body>
这一切看起来都非常糟糕,但我不知道更好的方法是在避免弹出警告的同时自动进行身份验证。
在我看来,FB.login()函数容易混淆命名。它似乎意味着,“如果用户未登录,则显示登录UI。但如果用户已登录,或者用户使用UI成功登录,则还要为此应用程序验证用户,包括自动为用户添加此应用程序的书签。“所以也许至少loginAndAuthenticate()会是一个更好的名字。