我正在启动我的第一个Facebook应用程序,托管在Heroku上。我在Heroku上建立了一个用于生产的应用程序,并在自己的机器上本地运行了一个单独的应用程序用于开发。目前,该应用程序(功能很少)在本地主机上运行得很好。但我不明白这个应用程序是否应该像一个具有Facebook功能的本地主机上的典型画布应用程序一样运行。例如,请求对话框会在本地画布应用程序中运行吗。在开发过程中,我是否应该能够在本地使用该功能?如果是这样的话,我需要采取哪些步骤才能使其发挥作用?
差异
独立网站和画布应用程序(或页面选项卡)之间的唯一真正区别是,在加载页面时不会传入signed_request
。
应用程序对话框仍然可以工作,但在弹出窗口中,而不是直接在页面上。此外,如果您在"使用Facebook登录的网站"(或移动网络)下的Facebook应用程序设置中设置本地开发URL(例如http://localhost:5000
),您将能够像登录用户一样登录用户。
还有一些东西你无法在服务器上测试,比如实时更新,脸书会向你的网站发送通知更新的请求。
可能还有其他一些事情,但这是我现在可以考虑的。
在本地工作
所以,我通常做的是在本地开发它。为了管理丢失的signed_request
,我只提供了一个存根,或者我不指望它会出现,这样我的应用程序也可以在facebook上用完。
对于登录方法,我倾向于只依赖JS SDK,因为大多数通过画布应用程序的服务器端登录都将依赖signed_request
-和enaway,我发现通过JS SDK的用户体验登录更好。
然后,我只设置了两个FB应用程序,一个是暂存应用程序,另一个是发布应用程序。临时应用程序指向我的本地URL,所以我的Facebook将允许从它连接。
在这一点上,它应该基本上可以开箱即用!
但我不明白这个应用程序是否应该像一个典型的画布应用程序一样在本地主机上运行,并具有Facebook功能
无论是在本地主机上还是在最终生产服务器上,您的应用程序都应该以相同的方式运行。
Facebook对话框(请求、消息等)应该像在实时服务器上一样显示在本地(dev)机器上。在我的情况下,为了实现这一点,我设置了一个具有不同App Domains
、Site URL
和Canvas URL
值的辅助"facebook应用程序"。
这允许您从localhost运行应用程序。如果你的应用程序只是画布,它将在iframe(指向Site URL
)中运行,但会显示在Facebook中。
此外,如果你想看到任何Facebook模式框而不是弹出窗口,请确保你包含了Facebook的JS API。
您应该注意的唯一区别是,如果您通过FB API共享本地主机开发网站上的页面,Facebook将无法抓取您的网站并获得所需的任何图标、图像或描述。