Как сохранить учетную запись facebook в ACAccountStore из facebookSDK

Я хочу сохранить учетную запись facebook на ACAccountStore в iOS,

  1. Я получу accessTocken из facebookSDK, но как получить токен и секрет
  2. Как сохранить в ACAccountStore

Заранее спасибо.

------ Редактировать--------

У меня есть приложение, которое использует facebook для входа в систему, и после того, как с информацией для входа нужно поделиться фотографиями, которые он выбрал. Мои варианты использования:

  1. Если учетная запись уже находится в приложении настроек, я могу использовать ее для входа и обмена.

  2. Пользователь использует сафари или веб-просмотр для входа в систему, а затем как я могу продолжить обмен.

    а. facebook SDK говорит, что если пользователю нужно использовать встроенный в ОС контроллер общего доступа, то login method used to authenticate the user must be native iOS 6.0 authentication..

    б. Если мне нужно поделиться опцией, предоставляемой facebook SDK, использующей приложение facebook, я не хочу эту опцию, потому что я хочу максимально избежать переключения приложений.

Как это решить..


person Rafeek    schedule 09.01.2014    source источник
comment
Какова мотивация сохранения токена доступа отдельно?   -  person Ming Li    schedule 10.01.2014
comment
Нужно сохранить информацию об учетной записи facebook в приложении настроек, тогда только я могу использовать социальную структуру, чтобы поделиться с этой учетной записью...   -  person Rafeek    schedule 13.01.2014
comment
Если вы используете Facebook SDK, он автоматически сохраняет для вас информацию о сеансе. Почему бы не использовать API-интерфейсы, предоставляемые SDK, для обмена, а не использовать социальную структуру?   -  person Ming Li    schedule 13.01.2014
comment
Если мне нужно поделиться с facebook SDK, мне нужно установить там приложение facebook, требуется переключение приложений.   -  person Rafeek    schedule 15.01.2014
comment
и я попытался представить встроенный в ОС диалог, и я получил такую ​​​​ошибку.. Error Domain=com.facebook.sdk Code=7 "The operation couldn’t be completed. (com.facebook.sdk error 7.)" com.facebook.sdk:DialogReasonKey=com.facebook.sdk:DialogNotSupported   -  person Rafeek    schedule 15.01.2014
comment
Мне нужно больше информации о том, что вы пытаетесь сделать, чтобы помочь. Код был бы очень полезен. Существует несколько различных типов диалогов, которые вы можете использовать для обмена (с установленным приложением FB или без него), вы также можете напрямую получать разрешения на публикацию и делиться без каких-либо диалогов Facebook.   -  person Ming Li    schedule 15.01.2014
comment
Я отредактировал более подробно. и метод, который я использовал для представления OSIntegratedShareDialog, + (BOOL)presentOSIntegratedShareDialogModallyFrom:(UIViewController*)viewController session:(FBSession*)session initialText:(NSString*)initialText images:(NSArray*)images urls:(NSArray*)urls handler:(FBOSIntegratedShareDialogHandler)handler;   -  person Rafeek    schedule 16.01.2014
comment
Если вы хотите использовать встроенный общий лист iOS, вам необходимо получить учетные данные для входа в iOS, и нет никакого способа обойти это.   -  person Ming Li    schedule 17.01.2014
comment
Да, тогда facebook SDK бесполезен, если у меня есть только вход и обмен.   -  person Rafeek    schedule 21.01.2014
comment
Что ж, у значительного количества пользователей не включена интеграция с iOS, поэтому, если вы используете ТОЛЬКО встроенный общий доступ / вход в систему iOS, вы игнорируете многих потенциальных пользователей.   -  person Ming Li    schedule 22.01.2014
comment
к. Так вы говорите, что лучше избегать авторизации через социальные сети?.. На самом деле авторизация через социальные сети поможет избежать заполнения форм, верно?   -  person Rafeek    schedule 22.01.2014
comment
Нет, я говорю, что вы должны использовать Facebook SDK для iOS, который обрабатывает вход через iOS, приложение Facebook или веб-диалог, а также предлагает различные типы диалогов обмена (и вы можете проверять, какой из них показывать на основе что есть в наличии).   -  person Ming Li    schedule 22.01.2014
comment
к. Если я использую facebook SDK, а приложение facebook не установлено на этом устройстве, мне нужно заставить пользователя делать то, что предоставляет социальная структура, в этом нет никакой разницы? Если они позволяют делиться через сафари или веб-просмотр, это будет здорово.   -  person Rafeek    schedule 23.01.2014
comment
Вам не нужно принудительно использовать социальную структуру, если приложение FB не установлено, SDK вернется к использованию Webview для входа в систему. Существует также диалоговое окно общего доступа Webview (в разделе FBWebDialogs), которое вы можете использовать.   -  person Ming Li    schedule 24.01.2014
comment
какой метод? можете уточнить?   -  person Rafeek    schedule 24.01.2014


Ответы (1)


для этого у вас должен быть токен доступа и секрет,

if (self.accountStore == nil) {
    self.accountStore = [[ACAccountStore alloc] init];
}

//make credentials to assign to ACAccount 
ACAccountCredential *credential = [[ACAccountCredential alloc] initWithOAuthToken:accesstoken tokenSecret:secret];
ACAccountType *acctType =[self.accountStore accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierFacebook];
ACAccount *newAccount = [[ACAccount alloc] initWithAccountType:acctType];

newAccount.credential = credential;

NSDictionary *options = [[NSDictionary alloc] initWithObjectsAndKeys:
                         "xXXXXXX", (NSString *)ACFacebookAppIdKey,
                         [NSArray arrayWithObject:@"basic_info"], (NSString *)ACFacebookPermissionsKey,
                         ACFacebookAudienceEveryone, (NSString *)ACFacebookAudienceKey,
                         nil];


[_accountStore requestAccessToAccountsWithType:acctType options:options completion:^(BOOL granted, NSError *error) {
    if (granted == YES) {
        [self.accountStore saveAccount:newAccount withCompletionHandler:^(BOOL success, NSError *error) {

            if (success) {
                NSLog(@"the account was saved!");
            }
            else {
                if ([error code] == ACErrorPermissionDenied) {
                    NSLog(@"Got a ACErrorPermissionDenied, the account was not saved!");
                }
                NSLog(@"%@",error);
            }
        }];
    }
    else {
        NSLog(@"%@ ",error);
    }
}];
person Zeeshan    schedule 09.01.2014
comment
Как я получу этот секрет и токен? У меня есть токен доступа. - person Rafeek; 09.01.2014
comment
NSString *accessToken = [[FBSession.activeSession accessTokenData] accessToken]; - person Zeeshan; 09.01.2014
comment
Я сказал, что у меня есть accessToken, но как разделить токен и секрет? - person Rafeek; 09.01.2014
comment
В твиттере от accessToken нам нужно отделить токен и секрет. В фейсбуке так же? и как? - person Rafeek; 09.01.2014
comment
извините был на встрече. Я думаю, секрет здесь не требуется. попробуй без него. @ - person Zeeshan; 09.01.2014
comment
Он показывает ошибку Error Domain=com.apple.accounts Code=6 "The operation couldn’t be completed. (com.apple.accounts error 6.) - person Rafeek; 09.01.2014