25 Abr, 2013 17:25

Como integrar seu aplicativo com o Facebook no iOS 6

Uma das principais vantagens do Facebook integrado é que cada aplicativo não precisa ficar implementando sua própria lógica de conexão com o Facebook. O usuário também não precisa ficar se autenticando em cada aplicativo, basta entrar no sistema e dar permissão para os aplicativos em configurações.

A maneira mais rápida de integrar um aplicativo com o Facebook é usando o SDK do próprio Facebook para iOS, que pode ser baixado neste link. O mais recomendado é dar um clone no repositório Git do projeto, para ficar com ele sempre em dia.

Após baixar o SDK, é preciso cadastrar um aplicativo em http://developers.facebook.com/setup/ e marcar a opção "Native iOS App":

app Facebook

Depois de baixar e instalar o pacote, é preciso ir nos frameworks do seu aplicativo e adicionar o FacebookSDK.framework, que por padrão é instalado na sua pasta Documents, após a instalação do pacote. Lembre-se de colocar o framework como optional para não perder a compatibilidade do seu aplicativo com aparelhos com iOS anterior ao 6. Adicione ao seu projeto também os arquivos FacebookSDKResources.bundle e FBUserSettingsViewResources.bundle. Além disso é preciso incluir os frameworks padrões (AdSupport, Accounts e Social).

Por fim, é preciso adicionar "-lsqlite3.0" e "-ObjC" no campo Build Settings do seu projeto e colocar o App ID do aplicativo criado no Facebook nos campos abaixo:

Build Settings

O código

Após tudo configurado, vamos fazer nosso código para postar no feed de notícias do usuário. A primeira coisa é importar no seu Controller a seguinte libs:

#import <FacebookSDK/FacebookSDK.h>
#import <Accounts/Accounts.h>

Depois use o código abaixo para se autenticar no Facebook. Note que o usuário terá que estar autenticado no iOS, senão você terá que exibir uma mensagem ou uma tela pedindo para ele se autenticar no aparelho:

ACAccountStore *accountStore = [[ACAccountStore alloc] init];

ACAccountType *facebookAccountType = [accountStore accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierFacebook];

NSDictionary *options = @{
                      @"ACFacebookAppIdKey" : @"1234567890",
                      @"ACFacebookPermissionsKey" : @[@"publish_stream"],
                      @"ACFacebookAudienceKey" : ACFacebookAudienceEveryone}; // Needed only when write permissions are requested

[accountStore requestAccessToAccountsWithType:facebookAccountType options:options
                                    completion:^(BOOL granted, NSError *error) {
                                        if (granted)
                                        {
                                            [self postFeed];
                                        } else {
                                            NSLog(@"%@",error);
                                            // Aqui cai no caso do usuário não estar conectado...
                                        }
                                    }];

Existem vários tipos de permissão e de restrição de quem pode ver o conteúdo publicado. Para saber de todas, visite a página do SDK do Facebook. Com o usuário autenticado, é possível chamar a tela do iOS para postar no Facebook com o código abaixo:

BOOL displayedNativeDialog =
 [FBNativeDialogs presentShareDialogModallyFrom:self initialText:@"Mensagem" image:[UIImage imageNamed:@"icon.png"]
 url:[NSURL URLWithString:@"http://www.example.com"]
 handler:^(FBNativeDialogResult result, NSError *error) {
    if (error) {
    /* handle failure */
    } else {
        if (result == FBNativeDialogResultSucceeded) {
         /* handle success */
     } else {
         /* handle user cancel */
     }
 }
  }];
if (!displayedNativeDialog) {
    /* 
    Fallback to web-based Feed Dialog:
    https://developers.facebook.com/docs/howtos/feed-dialog-using-ios-sdk/
    */
}

O resultado:

Post no Facebook

Notem que o código acima só funcionará no iOS 6. Para manter a compatibilidade, basta colocar o primeiro código dentro de um "if" que verifica se as classes existem, como o abaixo:

Class facebookClassTest = (NSClassFromString(@"SLComposeViewController"));

// Verifica se a classe existe no sistema operacional
if (facebookClassTest != nil) {

Ao navegar neste site, você consente o uso de cookies nossos e de terceiros, que coletam informações anônimas e são essenciais para melhorar sua experiência em nosso site.