首先为这个问题的长度道歉,并询问Facebook API(看似世界上最不一致的API之一......).
情况:我们正在为我们的客户制作一个Facebook产品"社区"类型页面,其中包含标准的Facebook标签,其中一个嵌入了Flash游戏.在这个游戏结束时,我们希望能够通过墙贴分享用户的最终得分,并邀请朋友挑战得分.
首先 - 客户端坚持认为游戏出现在页面中的选项卡上,因此将此全部移动到应用程序(例如apps.facebook.com
),遗憾的是不是一种选择.我知道你可以在tab上嵌入一个应用程序而不是静态FMBL,但是我试过这个并且结果基本相同或失败了(该选项卡对可呈现的内容施加了严格的限制,强制使用FBML并否定了FB:Iframe
标签为首发).
目前我们将这个游戏嵌入到静态FBML选项卡上,使用fb:swf
标签和FBJS-bridge在选项卡上启用一些简单的交互(导航到新窗口等).我们还尝试了FBJS嵌入方法,并将游戏变成了一个应用程序,并将其添加为页面上的选项卡.在所有情况下,在选项卡环境中似乎无法获取查看用户的UID(尽管事实上他们必须首先登录才能查看页面).游戏本身就是Flash ActionScript 3,我可以选择使用Facebook ActionScript 3 API.使用这种方法,到目前为止我设法提出的最佳流程概述如下:
0)创建一个单独的应用程序,其唯一目的是处理分数分享等.
1)用户在TAB页面上点击游戏结束时的"分享我的分数".
2)SWF通过打开新标签执行标准Facebook"登录到应用程序"请求.
3)用户确认此操作并关闭新窗口.
4)用户再次在Flash游戏中点击以确认他们已登录.
5)SWF执行facbook.verifySession()
并打开另一个窗口,请求允许在用户的墙上发布.
6)用户确认这一点并再次回到游戏中.
7)SWF监听'FacebookEvent.PERMISSIONS_CHANGED'并在确认后发布到墙上.
由于无法验证用户是否在其中加载了选项卡时添加了应用程序,因此每次他们想要从游戏中发布结果时,他们可能必须遵循此过程,这很可怕.主要问题似乎是驻留在Facebook选项卡上的任何RIA都没有在该选项卡的OAuth令牌中收到任何有用的信息,相比之下,RIA apps.facebook.com
会在请求标头中获取我需要的所有信息.
简而言之,无论是使用FMBL,FBJS,ActionScript 3,ASP还是其任何组合,我都需要从Facebook产品页面选项卡中制作Facebook墙贴的最简单,最直接的方式.
我见过这个:https://stackoverflow.com/questions/3674923/facebook-share-or-publish-dialogue-from-page-tab-closed这确实是我问的问题,但答案是不清楚,它似乎不会解决我的问题.