如何使用 FBTestSession

Posted

技术标签:

【中文标题】如何使用 FBTestSession【英文标题】:How to use FBTestSession 【发布时间】:2012-10-12 00:44:19 【问题描述】:

我正在构建一个原生 ios 应用程序,它允许用户登录 Facebook 并“喜欢”Open Graph 对象。我正在尝试为执行内置喜欢的代码编写单元测试。我在 Facebook 应用程序的管理网页中创建了测试用户,我想在单元测试中以测试用户身份登录,“喜欢”一个打开的图形对象,检查以确保“喜欢”的数量' 改变,然后 'unlike' 它。

我正在使用 Facebook iOS SDK,它带有 FBTestSession,我认为它非常适合我的需求。我的理解是它会随机抓取一个测试用户以登录(或者如果你愿意,可以创建一个临时用户)。但是,出现了几个问题,我没有看到任何解释它的文档。

第一个问题:它尝试从 Documents 目录加载 FacebookSDK-UnitTestConfig.plist 以读取 AppID 和 AppSecret。为了解决这个问题,我制作了这样一个文件,并在测试开始时将其复制到 Documents 目录中。这是正确的做法吗?

第二个问题是,当我尝试打开测试会话时,它会抛出一个错误,带有 400 响应代码并且没有任何有用的消息。查看它尝试发出的请求,似乎它正在使用 fql 来查询所有测试帐户。当我在网络浏览器中输入适当的 URL 时

https://graph.facebook.com/fql?access_token=ACCESS_TOKEN&q=SELECT id,access_token FROM test_account WHERE app_id = APP_ID)

我收到错误消息“(#15) 本机应用不支持此方法”。但显然 FBTestSession 是针对原生应用的,那么这是怎么回事呢?

【问题讨论】:

【参考方案1】:

根据他们的文档,它不适用于应用程序代码:

http://developers.facebook.com/docs/reference/ios/3.0/class/FBTestSession

此方法不应在应用程序代码中使用——但对于创建使用 Facebook SDK 的单元测试很有用。

【讨论】:

【参考方案2】:

使用 FBTestSession 很简单,它会在打开时创建一个测试用户,并在关闭时销毁它。在您可以像使用经典会话一样使用会话之后(内部 FBTestSession 继承自 FBSession):

FBSession *fbSession = [FBTestSession sessionWithPrivateUserWithPermissions:@[@"publish_stream", @"email"]];
[fbSession openWithCompletionHandler:^(FBSession *session, FBSessionState status, NSError *error) 
    // Test here, you can use the session.accessToken attribute

我在使用FacebookSDK-UnitTestConfig.plist 时遇到了一些问题,我认为 Facebook SDK 中有一些奇怪的地方,我查看了代码并构建了他们正在寻找文档目录的此 plist 的路径:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *configFilename = [documentsDirectory stringByAppendingPathComponent:@"FacebookSDK-UnitTestConfig.plist"];

测试的时候文档目录和我们在模拟器中执行一个App的时候不一样,我打印出来是:

/Users/user/Library/Application Support/iPhone Simulator/iOS_version/Documents/

如果你把你的 plist 放在那里应该可以工作。您的 plist 文件具有字典结构并包含 2 个键:FacebookAppIDFacebookAppSecret

【讨论】:

【参考方案3】:

只要它是真实的,因此不会给您的应用程序带来安全风险,请在您的 高级 设置中更改 App Secret in Client 值Facebook 应用。这应该让您可以使用您的应用访问令牌来请求测试用户信息。

如果您的应用确实在分布式本机代码中包含应用机密,则可能会被发现并因此危及您应用的安全性。我认为这就是为什么当你有一个原生应用程序时,FB 默认会打开这个设置。

【讨论】:

以上是关于如何使用 FBTestSession的主要内容,如果未能解决你的问题,请参考以下文章

如果加入条件,我该如何解决。如果使用字符串连接,我如何使用

如何使用本机反应创建登录以及如何验证会话

如何在自动布局中使用约束标识符以及如何使用标识符更改约束? [迅速]

如何使用 AngularJS 的 ng-model 创建一个数组以及如何使用 jquery 提交?

如何使用laravel保存所有行数据每个行名或相等

如何使用 Math.Net 连接矩阵。如何使用 Math.Net 调用特定的行或列?