Search code examples
iosiphonefacebookfacebook-ios-sdksocial-framework

Fetching basic information (id, first_name) from Facebook by using Social Framework - source code and screenshots attached


For what would be a word game later I am trying to fetch very basic information about a player by using Social framework:

  • id
  • first_name
  • gender
  • location

(i.e. nothing sensitive like email and I don't use Facebook iOS SDK).

So in Xcode 5.0.2 I create a blank single view app for iPhone and add Social.framework to the Build phases tab.

Then I add the following code to the ViewController.m:

#import "ViewController.h"
#import <Social/Social.h>
#import <Accounts/Accounts.h>

#define FB_APP_ID @"432298283565593"
//#define FB_APP_ID @"262571703638"

@interface ViewController ()
@property (strong, nonatomic) ACAccountStore *accountStore;
@end

@implementation ViewController

- (void)viewDidLoad
{
    [super viewDidLoad];

    NSLog(@"Facebook is available: %d", [SLComposeViewController isAvailableForServiceType:SLServiceTypeFacebook]);

    [self getMyDetails];
}

- (void) getMyDetails {
    if (!_accountStore) {
        _accountStore = [[ACAccountStore alloc] init];
    }

    ACAccountType *facebookAccountType = [_accountStore
                                        accountTypeWithAccountTypeIdentifier: ACAccountTypeIdentifierFacebook];
    NSDictionary *options = @{
                              ACFacebookAppIdKey: FB_APP_ID,
                              ACFacebookPermissionsKey: @[@"basic_info"]};

    [_accountStore requestAccessToAccountsWithType:facebookAccountType
                                           options:options
                                        completion:^(BOOL granted, NSError *error)
    {
        if (granted) {
            NSLog(@"Basic access granted");
        } else {
            NSLog(@"Basic access denied %@", error);
        }
    }];
}

@end

And create a new Facebook app for which I specify de.afarber.MyFacebook as the iOS Bundle ID:

enter image description here

Finally at Apple iTunes Connect I create a new App ID and then a new app (with a dummy icon and even 2 iPhone screenshots attached):

enter image description here

enter image description here

My Xcode Info tab and the rest of the source code are unchanged:

enter image description here

UPDATE 2:

I have updated the source code as suggested by helpful comments, thank you.

Also, I have another Facebook game, which works well (since 1-2 years) for an Adobe AIR desktop and mobile apps (but now I try to learn native iOS programming) and I have tried its id 262571703638 without success.

And I have added FacebookAppID to MyFacebook-Info.plist as suggested by Mohit10 (it seems to me that it is needed for Facebook SDK only, while I try to use Social Framework - but it can't hurt...)

Now I get the debugger output:

2013-12-31 11:08:07.584 MyFacebook[3009:70b] Facebook is available: 1
2013-12-31 11:08:07.964 MyFacebook[3009:3903] Basic access granted

I just need to figure out, how to fetch the id, first_name, gender, location now (and if basic_info is really needed for that)...


Solution

  • There are a few things wrong with your code.

    • ACAccountStore *accountStore is going out of scope, it should be an instance variable.
    • You don't need the ACFacebookAudienceKey, that's for publishing.
    • You don't need the ACFacebookPermissionsKey as the properties you want are available by default

    With these fixes your code still doesn't work for me, although it does work for my App ID. I get the the following error:

    "The Facebook server could not fulfill this access request: Invalid application 432298283565593" UserInfo=0x1d5ab670 {NSLocalizedDescription=The Facebook server could not fulfill this access request: Invalid application 432298283565593}
    

    Looks like there's something wrong with your app's Facebook configuration.

    The only difference I can see is that my app is sandboxed and I'm logged in using my developer account. Good luck.