你如何创build一个Facebook的testing用户在iOS使用Facebook的SDK

我开发了一个iPhone应用程序,需要一个Facebook的朋友的电子邮件地址。 假设你的朋友有这个应用程序,并已授予电子邮件和offline_access的权限,那么我相信可以使用:

[facebook requestWithGraphPath:@"FRIEND_ID?fields=id,email" andDelegate:self]; 

获取他们的电子邮件地址。 为了testing的目的和提交给苹果,你如何创build一个iOS应用程序的Facebooktesting用户使用Facebook的SDK? Facebook提供了创buildtesting用户的function(http://developers.facebook.com/docs/test_users/),但是我不明白如何使用他们的sdk / graph api在我的ios应用程序中使用这个网站上的信息。

好的,我也一直在研究这个,这是我想到的。

根据文档,应该可以通过调用图API来创buildtesting用户,如下所示:

 NSString *urlString = [NSString stringWithFormat:@"%@/accounts/test-users", kAppId]; [facebook requestWithGraphPath:urlString andParams:params andHttpMethod:@"POST" andDelegate:self]; 

其中params是一个包含部分或全部参数的NSMutableDictionary,详见https://developers.facebook.com/docs/test_users/

但是,我发现API需要一个应用程序访问令牌来创build一个testing用户,并且SDK文件Facebook.m的方法requestWithGraphPath:andParams:andHttpMethod:andDelegate:实际上会发送一个用户访问令牌。 即使您在params字典中专门设置了应用程序访问令牌,它也将在此方法中被用户访问令牌覆盖。

看来围绕这个困境有两种办法。 我们可以用Facebook SDK猴子,并考虑到这一点,这是绝对不推荐。 或者我们可以诉诸标准的HTTP请求,并把事情交给我们自己。 这是我如何处理第二种方法。

首先,我们需要应用访问令牌,可以通过向https://graph.facebook.com/oauth/access_token?client_id=APP_ID&client_secret=APP_SECRET&grant_type=client_credentials发送请求来获取该令牌。

然后,我们在接下来的请求中使用从此请求返回的应用访问令牌: https://graph.facebook.com/APP_ID/accounts/test-users?installed=true&name=FULL_NAME&permissions=read_stream&method=post&access_token=APP_ACCESS_TOKEN : https://graph.facebook.com/APP_ID/accounts/test-users?installed=true&name=FULL_NAME&permissions=read_stream&method=post&access_token=APP_ACCESS_TOKEN

两个请求的总体格式是相同的。 以下是两个请求中的第二个,整个请求在代码中的样子。

 NSString *urlString = @"https://graph.facebook.com/APP_ID/accounts/test-users"; NSURL *testUserUrl = [NSURL URLWithString:urlString]; NSMutableURLRequest *testUserRequest = [[NSMutableURLRequest alloc] initWithURL:testUserUrl]; [testUserRequest setHTTPMethod:@"POST"]; [testUserRequest addValue:@"text/plain" forHTTPHeaderField:@"content-type"]; NSString *bodyString = @"installed=true&permissions=read_stream&access_token=APP_ACCESS_TOKEN"; NSData *bodyData = [bodyString dataUsingEncoding:NSUTF8StringEncoding]; [testUserRequest setHTTPBody:bodyData]; [[NSURLConnection alloc] initWithRequest:testUserRequest delegate:self]; [testUserRequest release]; 

希望这可以帮助你完成testing用户的实验。