3

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

我正在使用 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 是为原生应用程序设计的,那么到底发生了什么?

4

3 回答 3

1

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

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

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

于 2012-10-12T00:56:33.553 回答
1

使用 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.

于 2012-12-26T23:59:58.870 回答
0

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

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

于 2012-10-18T04:08:36.323 回答