Получить uid Facebook из ACAccountStore в iOS?

Привет, я хочу получить UID пользователя Facebook из ACAccountStore в iOS 6.

    self.accountStore = [[ACAccountStore alloc]init];

    ACAccountType *FBaccountType= [self.accountStore accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierFacebook];

    NSString *key = @"01234567890123";
    NSDictionary *dictFB = [NSDictionary dictionaryWithObjectsAndKeys:key,ACFacebookAppIdKey,@[@"email"],ACFacebookPermissionsKey, nil];


        [self.accountStore requestAccessToAccountsWithType:FBaccountType options:dictFB completion:
         ^(BOOL granted, NSError *e) {
             if (granted) {
                 NSArray *accounts = [self.accountStore accountsWithAccountType:FBaccountType];

                 //it will always be the last object with single sign on
                 self.facebookAccount = [accounts lastObject];

                 //i Want to get the Facebook UID and log it here

                 NSLog(@"facebook account =%@",self.facebookAccount);

             } else {
                 //Fail gracefully...
              NSLog(@"error getting permission %@",e);

             }
         }];

У self.facebookAccount есть UID, но я не могу его получить...


person Saravana Vijay    schedule 19.02.2013    source источник


Ответы (2)


Я хотел получить UID без использования Facebook API. Это можно сделать, используя следующий метод

    self.accountStore = [[ACAccountStore alloc]init];

    ACAccountType *FBaccountType= [self.accountStore accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierFacebook];

    NSString *key = @"01234567890123";
    NSDictionary *dictFB = [NSDictionary dictionaryWithObjectsAndKeys:key,ACFacebookAppIdKey,@[@"email"],ACFacebookPermissionsKey, nil];


        [self.accountStore requestAccessToAccountsWithType:FBaccountType options:dictFB completion:
         ^(BOOL granted, NSError *e) {
             if (granted) {
                 NSArray *accounts = [self.accountStore accountsWithAccountType:FBaccountType];

                 //it will always be the last object with single sign on
                 self.facebookAccount = [accounts lastObject];

                 //i  got the Facebook UID and logged it here (ANSWER)

                  NSLog(@"facebook account =%@",[self.facebookAccount valueForKeyPath:@"properties.uid"]);

             } else {
                 //Fail gracefully...
              NSLog(@"error getting permission %@",e);

             }
         }];
person Saravana Vijay    schedule 20.02.2013
comment
Обратите внимание, что UID, найденный в properties.uid, может отличаться от того, который возвращается в вызове /me graph. - person chrysb; 09.07.2014
comment
@chrysb Я знаю, что это старая тема, но не могли бы вы уточнить, почему это так? Это где-то упоминается в документах Apple? - person nrj; 20.10.2014
comment
Это фишка Фейсбука. Они переходят на идентификаторы пользователей для конкретных приложений, которые будут отличаться от вашего канонического идентификатора пользователя. - person chrysb; 22.10.2014

Вам нужно вызвать Facebook Graph API; используйте SLRequest следующим образом:

NSUrl requestURL = NSUrl.FromString("https://graph.facebook.com/me"); 
SLRequest sl = SLRequest.Create(SLServiceKind.Facebook, SLRequestMethod.Get, requestURL, null);

sl.Account = // your ACAccount object here

sl.PerformRequest((data, response, error) => {
    if (error == null) {
        // success! parse response
    }
    else {
        // handle failure
    }
});

Это должно сделать это!

person mrtnkrstn    schedule 19.02.2013
comment
эй, спасибо за ответ, но я хотел бы получить его, не вызывая API Facebook Graph. - person Saravana Vijay; 20.02.2013