如何从桌面应用程序使用 javascript SDK

Posted

技术标签:

【中文标题】如何从桌面应用程序使用 javascript SDK【英文标题】:How to use the javascript SDK from a desktop application 【发布时间】:2011-11-20 06:35:50 【问题描述】:

我正在编写一个桌面应用程序,通过使用从本地文件运行 html \ javascript 的嵌入式浏览器与 facebook 交互。

我能够使用登录对话框来检索令牌(使用facebook documentation 中描述的用于桌面应用程序的方法),但我仍然无法调用基本的 SDK 功能,例如 FB.init( )FB.getLoginStatus()

当执行FB.init()时:

    FB.init(
        appId: '120260327220',
        status: true, // check login status
        oauth: true // enable OAuth 2.0
    );

我得到了 HTTP 响应(通过 HTTP 嗅探器):

<span>Given URL is not allowed by the Application configuration.: One or more of the given URLs is not allowed by the Application configuration. It must match one of the Connect or Canvas URLs or domain must be the same as or a subdomain of one of the Application&#039;s base domains.</span>

而当执行FB.getLoginStatus()

        FB.getLoginStatus(function (response) 
            if (response.authResponse) 
                alert("logged in and connected user, someone you know");
             else 
                alert("no user session available, someone you dont know");
            
        );

我一无所获!

该应用程序完全基于客户端,这意味着我没有服务器端,因此没有用于注册 facebook 应用程序的 URL。在 IE 上运行。

有谁知道我是否以及如何从本地 javascript 文件(用于桌面应用程序)使用 facebook javascript SDK?

编辑:将应用程序 URL 配置为 http://localhost 不是一个有效选项,因为最终此脚本应该能够在任何机器上运行,无论是否配置了 localhost。

谢谢。

【问题讨论】:

为什么http://localhost 不适合你?您必须将您的应用程序配置为接受http://localhost,一旦配置它就可以在每台PC上运行。 Max - 我不想在最终用户的 PC 上配置 localhost。我正在寻找替代方案。 【参考方案1】:

相关:

JS SDK 旨在用于网站(根据定义提供并可通过 http 或 https 访问),我们不打算支持使用 file: 或任何其他协议。 这与一般的插件一致,其中 http/https URI 可用作标识符(开放图等),但 file:// URI 不可用。

您可以尝试在 Web 可访问文档中初始化 SDK,包括使用 iframe - 请注意,您必须添加逻辑以确保正确调整大小。

作为对Facebook bug report 的回复。

【讨论】:

【参考方案2】:

正如您提到的,您的桌面应用程序中有一个嵌入式浏览器,因此在这种情况下,您可以做的是在网络上托管具有 facebook 相关功能的应用程序页面,并将同一页面的 url 拉入嵌入式浏览器中。这样,您将能够在应用程序的设置中提供有效的域,而不是 localhost。您还可以从您的页面对 facebook API 进行有效调用,然后您的桌面应用程序可以利用所有这些 facebook 相关数据,因为它们被拉入您的嵌入式浏览器。

简而言之,您的桌面应用程序将很像 Facebook 的画布,其中应用程序的页面被拉出并显示在画布中。但是,在您的情况下,您将完全控制页面的显示方式、时间、位置和部分,此外,正确粘合且结构良好的 UI 将使外部页面和桌面应用程序融合在一起,用户永远不会来知道区别。

【讨论】:

谢谢,但不能上传页面【参考方案3】:

由于我没有得到可接受的答案,这里是我的认识和我最终要做的事情::

由于跨域 ajax 问题,无法在本地页面上使用 Facebook SDK。

解决方法是使用 JSONP ajax 调用 Facebook 的图形 API(跨域允许 JSONP)。 登录过程是通过导航(在新窗口中)到登录页面完成的,使用特定的 URL 参数来设置页面的属性。

【讨论】:

@user1692342,不幸的是,我唯一的例子是 3 年前的,它不再有效。从那时起,API 发生了翻天覆地的变化。【参考方案4】:

如果您使用的是 PhoneGap 1.0 和 Xcode 4,请按照以下说明开始:http://www.pushittolive.com/post/1239874936/facebook-login-on-iphone-phonegap

我的安装看起来像:http://cl.ly/AHQ1

确保将 ChildBrowser.js 文件移出 plugins 文件夹并移至 www 文件夹的根目录。还要确保在 index.html 文件中链接到 ChildBrowser.js。

然后按照这3个步骤,http://collingo.com/2011/08/18/installing-childbrowser-ios-phonegap-plugin-in-xcode-4/

最后,更新您的 PhoneGap.plist 文件,如本文所述:http://wiki.phonegap.com/w/page/43708792/How%20to%20Install%20a%20PhoneGap%20Plugin%20for%20iOS,我的看起来像:http://cl.ly/AHAH

【讨论】:

谢谢,但我不是在开发手机应用程序。我为 Windows 开发,使用 IE。虽然第一个链接中提到的身份验证是我登录时所做的。无论如何,谢谢。【参考方案5】:

您在应用程序的开发者页面上设置的应用程序 URL 是什么?我只是根据 FB.init() 错误消息猜测您需要将 URL 设置为“http://localhost/start page name”。在调试我们的应用程序时,我们在本地运行它并以这种方式设置应用程序的 URL。

【讨论】:

谢谢,但将应用程序 URL 配置为 localhost 对我来说不是一个有效的选项。最终脚本应该能够在任何 Windows 机器上本地运行,无论是否配置了 localhost... 错过了您作为桌面应用程序运行的部分。在这种情况下,您没有画布 URL。

以上是关于如何从桌面应用程序使用 javascript SDK的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 android studio 从应用程序中的内部或外部存储(SD 卡)读取文件?

如何通过 Intent 从 SD 卡打开 PDF

安卓从手机相册获取照片作为头像缓存地址

如何从 Android API 24+ 在 SD 卡上写入文件

如何从 SD 卡播放视频

如何从 SAP HTML 查看器打开 javascript 开发者控制台