首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过新的iOS6社交框架查询Facebook用户数据

通过新的iOS6社交框架查询Facebook用户数据
EN

Stack Overflow用户
提问于 2012-06-30 09:27:40
回答 6查看 7.2K关注 0票数 8

我正在尝试使用Facebook6的新集成iOS应用程序接口来查询用户的信息。这是我正在使用的代码,它与他们在WWDC上演示的代码基本相同:

代码语言:javascript
复制
{
NSDictionary *parameters = @{};
NSURL *url = [NSURL URLWithString:@"https://graph.facebook.com/me"];
SLRequest *request = [SLRequest requestForServiceType:SLServiceTypeFacebook
                                        requestMethod:SLRequestMethodGET
                                                  URL:url
                                           parameters:parameters];
request.account = self.account;
[request performRequestWithHandler:^(NSData *responseData, NSHTTPURLResponse *urlResponse, NSError *error) {
    NSLog(@"Facebook request received, status code %d", urlResponse.statusCode);
    NSString *response = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding];
    NSLog(@"Response data: %@", response);
    dispatch_async(dispatch_get_main_queue(), ^{

    });
}];
}

问题是我从Facebook得到了错误代码2500:“必须使用活动的访问令牌来查询有关当前用户的信息。”如果我将查询改为https://graph.facebook.com/[facebook id],那么它工作得很好。我假设问题是在通过requestForServiceType发送请求时,iOS传递的是应用程序的访问令牌,而不是用户的访问令牌。我只是不知道该怎么解决它。显然,预测和硬编码我的用户的Facebook ID不是一种选择。有什么建议吗?

EN

回答 6

Stack Overflow用户

发布于 2012-07-10 15:24:14

在如下参数中添加活动访问令牌

代码语言:javascript
复制
NSDictionary *parameters = [NSDictionary dictionaryWithObject:@"PUT_ACCESS_TOKEN_HERE" forKey:@"access_token"];
票数 5
EN

Stack Overflow用户

发布于 2012-09-20 21:10:00

我遇到了同样的问题,并找到了解决方法:

代码语言:javascript
复制
NSString *uid = [NSString stringWithFormat:@"%@", [[self.account valueForKey:@"properties"] valueForKey:@"uid"]] ;                
NSURL *url = [NSURL URLWithString:[@"https://graph.facebook.com" stringByAppendingPathComponent:uid]];
票数 2
EN

Stack Overflow用户

发布于 2013-01-04 13:56:42

下面是我如何与iOS 6进行集成,并从Facebook获得我想要的东西:

在AppDelegate中,我这样做:

代码语言:javascript
复制
- (BOOL)application:(UIApplication *)application
            openURL:(NSURL *)url
  sourceApplication:(NSString *)sourceApplication
         annotation:(id)annotation {
    return [FBSession.activeSession handleOpenURL:url];
}
- (void)applicationDidBecomeActive:(UIApplication *)application
{
    [FBSession.activeSession handleDidBecomeActive];
}

- (void)applicationWillTerminate:(UIApplication *)application
{
    [FBSession.activeSession close];
}

在我想要检索自己或朋友信息的ViewController中,我这样做(注意:这是一个测试,所以它有很多权限!):

代码语言:javascript
复制
NSArray *permissions =
    [NSArray arrayWithObjects:@"email", @"user_location",
     @"user_birthday",
     @"user_likes", @"user_interests",@"friends_interests",@"friends_birthday",@"friends_location",@"friends_hometown",@"friends_photos",@"friends_status",
     @"friends_about_me", @"friends_birthday", @"friends_hometown", @"friends_interests", @"friends_likes", @"friends_location", nil];

    [FBSession openActiveSessionWithReadPermissions:permissions
                                       allowLoginUI:YES
                                  completionHandler:^(FBSession *session, FBSessionState status, NSError *error) {
                                      /* handle success + failure in block */
                                      if (status) {
                                          NSLog(@"Facebook Read Permission is successful!");
                                          [self presentPostOptions];

                                          //   [self presentPostOptions];


                                      }
                                  }];

然后在"presentPostOptions“中我这样做(在这个例子中,我试图从我的朋友那里检索一些东西):

代码语言:javascript
复制
- (void)presentPostOptions
{

    [[FBRequest requestForMyFriends] startWithCompletionHandler:^(FBRequestConnection *connection, NSDictionary<FBGraphUser> *user, NSError *error)

     {

         if (!error) {

NSArray *data = [user objectForKey:@"data"];
             NSLog(@"%d", [data count]);
             for (FBGraphObject<FBGraphUser> *friend in data) {
                 NSLog(@"%@", [friend first_name]);
                 NSLog(@"%@", [friend last_name]);
                 NSLog(@"%@", [friend id]);
                 //make sure you have FBProfilePictureView outlet in your view
                 //otherwise skip the profile picture!
                 self.fbProfilePic.profileID = @"you'r friend's profile.id";

             }
         }
         else
         {
             NSLog(@"error");
             //  [self didFailWithError:error];
         }
     }];

我不知道你还想做什么,因为在你的问题中,你只是试图建立一个连接,但这样你就可以在集成到iOS 6时做任何你想做的事情。

还有一件事,确保你在Facebook上的应用程序设置和那里的配置,比如在iOS上启用你的应用程序和iPhone/iPad的ID。还有plist中的FacebookAppID。

如果你成功了就告诉我,

编辑:顺便说一下,我的Facebook SDK是3.1.1。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11270755

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档