如何使用iOS社交框架阅读任何Facebook用户公共时间表?

时间:2013-09-13 12:12:31

标签: ios objective-c facebook facebook-graph-api facebook-ios-sdk

我真的花了好几个小时试图解决这个问题! 我只是想能够从Facebook读取任何用户的时间线(公共消息)... 从技术上讲(为简单起见)我宁愿只使用iOS sdk中的框架(即不必使用facebook)。因此,我目前只使用Social.framework和Accounts.framework

到目前为止我成功完成的是阅读当前登录用户的facebook时间线(设备上标识的用户)但是当我尝试通过以下url中的“ANOTHER_USER_ID”替换“我”时“https://graph.facebook.com/me/feed”它只返回一个空数据字段(没有“消息”节点)。

“奇怪”的事实是,我可以使用@“https://graph.facebook.com/cocacola/feed”成功获得任何公司类型的Feed(例如“cocacola”)。

所以我的问题是如何达到“简单”用户的提要(例如“shireesh.asthana”),以便我可以阅读它的“消息”?

到目前为止我的流程:

  1. https://developers.facebook.com/上创建应用以获取AppID
  2. 在我的代码中使用此AppID可以使用SLRequest
  3. 发送请求

    以下是我目前正在使用的代码:

    ACAccountStore *account = [[ACAccountStore alloc] init];
        ACAccountType *accountType = [account
                                      accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierFacebook];
    
        // Specify App ID and permissions
        NSDictionary *options = @{
                                  ACFacebookAppIdKey: @"1111111111111", // My AppID here
                                  //ACFacebookPermissionsKey: @[@"read_stream"],
                                  ACFacebookPermissionsKey: @[@"email", @"read_stream"],
                                  ACFacebookAudienceKey:ACFacebookAudienceFriends
                                  };
    
        [account requestAccessToAccountsWithType:accountType
                                         options:options completion:^(BOOL granted, NSError *error)
         {
             if (granted == YES)
             {
                 NSArray *arrayOfAccounts = [account
                                             accountsWithAccountType:accountType];
    
                 if ([arrayOfAccounts count] > 0)
                 {
                     ACAccount *facebookAccount = [arrayOfAccounts lastObject];
    
                     // I want the messages and the author
                     NSDictionary *parameters = @{@"fields": @"message,from"};
    
                     NSURL *feedURL = [NSURL URLWithString:@"https://graph.facebook.com/HERE_THE_USER_ID/feed"]; // Work with "cocacola" but not with "shireesh.asthana"
    
                     SLRequest *getRequest = [SLRequest
                                               requestForServiceType:SLServiceTypeFacebook
                                               requestMethod:SLRequestMethodGET
                                               URL:feedURL 
                                               parameters:parameters];
    
                     getRequest.account = facebookAccount;
    
                     [getRequest performRequestWithHandler:
                      ^(NSData *responseData, NSHTTPURLResponse
                        *urlResponse, NSError *error)
                      {
                          dataSource = [NSJSONSerialization
                                        JSONObjectWithData:responseData
                                        options:NSJSONReadingMutableLeaves
                                        error:&error];
    
                          // Reach the main queue to process result
                          dispatch_async(dispatch_get_main_queue(), ^{
                              NSLog(@"Read %d messages", [dataSource[@"data"] count]);
                              if ([dataSource[@"data"] count] != 0) {
                                  // Do stuff in case of success...
                              } else {
                                  // Do stuff in case of ERROR...
                              }
                          });
                      }];
                 } else {
                     // Case of no facebook account on the device...
                 }
             } else {
                 // User don't grant the app to access its facebook info...
             }
         }];
    

1 个答案:

答案 0 :(得分:2)

  

所以我的问题是如何达到“简单”用户的提要(例如“shireesh.asthana”),以便我可以阅读它的“消息”?

原因可能是 -

  1. <user>没有公开信息,

  2. <user>

  3. <user> 关闭平台

    (当然,这里的{{1}}不是会话中的用户)

    P.S。 Shireesh Asthana(在Facebook工作),没有任何公开信息