IOS6 Facebook: Что делать, если пользователь не настроил Facebook? - программирование
Подтвердить что ты не робот

IOS6 Facebook: Что делать, если пользователь не настроил Facebook?

Я использую новую интеграцию Facebook в iOS6 следующим образом:

SLComposeViewController *fbController = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeFacebook];

if([SLComposeViewController isAvailableForServiceType:SLServiceTypeFacebook]) {
    SLComposeViewControllerCompletionHandler __block completionHandler=^(SLComposeViewControllerResult result){

        [fbController dismissViewControllerAnimated:YES completion:nil];

        switch(result){
            case SLComposeViewControllerResultCancelled:
            default:
            {
                NSLog(@"Cancelled.....");

            }
                break;
            case SLComposeViewControllerResultDone:
            {
                NSLog(@"Posted....");
            }
                break;
        }};

    //[fbController addImage:[UIImage imageNamed:@"1.jpg"]];
    [fbController setInitialText:@"Test message"];
    [fbController addURL:[NSURL URLWithString:self.asset.url]];
    [fbController setCompletionHandler:completionHandler];
    [self presentViewController:fbController animated:YES completion:nil];
} else {
    NSLog(@"no facebook setup");
}

Проблема здесь в том, что я тестирую ее, не войдя в Facebook, и все, что я получаю, это сообщение журнала.

** Странно, я получаю диалог в симуляторе, но НЕ устройство! **

Как я могу показать пользователю предупреждение, которое сообщает им, что им нужно войти в Facebook? Я видел скриншоты системного оповещения, но по какой-то причине я этого не понимаю. Что я сделал неправильно?

4b9b3361

Ответ 1

Удаление проверки для [SLComposeViewController isAvailableForServiceType:SLServiceTypeFacebook] исправило проблему для меня.

Ответ 2

Кажется, что [SLComposeViewController isAvailableForServiceType:] возвращает true в симуляторе, даже если вы не создали там свою учетную запись.

Ответ 3

Я не думаю, что вы получите системное предупреждение (я не уверен, но на основе опыта Twitter). Хотя я видел это в некоторых последних блогах/веб-сообщениях, но он не работает и для меня. Я предлагаю в таком случае вам лучше спросить учетные данные пользователя FB (пользовательский диалог или FBDialog) и добавить учетную запись FB в iPad. Код ниже не проверен, но вы можете получить представление. Я делаю подобное для Twitter, и это отлично работает в моих приложениях.

ACAccountStore *store = [[ACAccountStore alloc] init] ;
    ACAccountType *fbType = [store accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierFacebook];
    [store requestAccessToAccountsWithType:fbType options:[NSDictionary dictionaryWithObjectsAndKeys:kAppID,ACFacebookAppIdKey, nil] completion:^(BOOL granted, NSError *error) {
        if(YES) {
            ACAccount *fbAccount = [[ACAccount alloc] initWithAccountType:[store accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierFacebook]];

            ACAccountCredential *outhCredential = [[ACAccountCredential alloc] initWithOAuth2Token:[appDelegate.facebook accessToken] refreshToken:refesrhToken expiryDate:[appDelegate.facebook expirationDate]];


            fbAccount.credential = outhCredential;

            [store saveAccount:fbAccount withCompletionHandler:^(BOOL success, NSError *error) {
                if(success)
                {
                    [self performSelectorOnMainThread:@selector(showFBPostSheet) withObject:nil waitUntilDone:NO];
                }
            }];

            [outhCredential release];
            [fbAccount release];
            [store release];
        }
        // Handle any error state here as you wish
    }];