Ios 如何使用FBTestSession

Ios 如何使用FBTestSession,ios,facebook,facebook-fql,facebook-ios-sdk,Ios,Facebook,Facebook Fql,Facebook Ios Sdk,我正在构建一个本机iOS应用程序,允许用户登录Facebook和“喜欢”打开的图形对象。我正在尝试为我的代码编写单元测试,以实现内置的功能。我在Facebook应用程序的管理网页中创建了测试用户,我想在单元测试中做的是以测试用户的身份登录,“像”一个打开的图形对象,检查以确保“喜欢”的数量更改,然后“不喜欢”它 我正在使用Facebook iOS SDK,它附带了FBTestSession,我认为它非常适合我的需要。我的理解是,它会随机抓取一个测试用户作为用户登录,或者根据需要创建一个临时用户。

我正在构建一个本机iOS应用程序,允许用户登录Facebook和“喜欢”打开的图形对象。我正在尝试为我的代码编写单元测试,以实现内置的功能。我在Facebook应用程序的管理网页中创建了测试用户,我想在单元测试中做的是以测试用户的身份登录,“像”一个打开的图形对象,检查以确保“喜欢”的数量更改,然后“不喜欢”它

我正在使用Facebook iOS SDK,它附带了FBTestSession,我认为它非常适合我的需要。我的理解是,它会随机抓取一个测试用户作为用户登录,或者根据需要创建一个临时用户。然而,有几个问题,我没有看到任何文档对此进行解释

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

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

https://graph.facebook.com/fql?access_token=ACCESS_TOKEN&q=SELECT id,从测试\u帐户访问\u令牌,其中app\u id=app\u id


我收到错误消息15本机应用程序不支持此方法。但显然FBTestSession是为本机应用程序设计的,那么到底是怎么回事呢?

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

此方法不应在应用程序代码中使用,但可用于创建使用Facebook SDK的单元测试


只要这是真的,并且不会给你的应用程序带来安全风险,就将你Facebook应用程序的高级设置中的客户端应用程序机密值更改为否。这样你就可以使用你的应用程序访问令牌请求测试用户信息


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

使用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"];
测试时,文档目录与我们在模拟器中执行应用程序时不同,我打印它,它是:

/Users/{user}/Library/Application Support/iPhone Simulator/{iOS_version}/Documents/
如果你把钱放在那里,那就行了。plist文件具有字典结构,包含两个键:FacebookAppID和FacebookAppSecret