Login do Facebook SDK para iOS 3.1 com callbacks de permissão de publicação
Estou tendo problemas para fazer login com permissões de publicação no facebook 3.1 ios sdk.
Meu aplicativo tem um botão para compartilhar um vídeo e, quando o usuário clica nele, quero adicionar a permissão básica de publicação +. Pelo que entendi, eu tenho que fazer duas chamadas -
openActiveSessionWithReadPermissions
, e depoisreauthorizeWithPublishPermissions
Aqui está o código que estou usando agora:
//Opens a Facebook session and optionally shows the login UX.
- (void)openSessionForReadPermissions
{
[FBSession openActiveSessionWithReadPermissions:nil
allowLoginUI:YES
completionHandler:
^(FBSession *session,
FBSessionState state, NSError *error) {
//this is called even from the reauthorizeWithPublishPermissions
if (state == FBSessionStateOpen && !error)
{
[self openSessionForPublishPermissions];
}
else if (state == FBSessionStateClosedLoginFailed)
{
[FBSession.activeSession closeAndClearTokenInformation];
[[NSNotificationCenter defaultCenter] postNotificationName:FBLoginErrorNotification object:session];
}
}];
}
-(void)openSessionForPublishPermissions
{
NSArray* permissions = [NSArray arrayWithObject:@"publish_stream"];
[[FBSession activeSession] reauthorizeWithPublishPermissions:permissions
defaultAudience:FBSessionDefaultAudienceFriends
completionHandler:
^(FBSession *session, NSError *error)
{
if (!error)
{
[[NSNotificationCenter defaultCenter]
postNotificationName:FBLoginSuccessNotification
object:session];
}
else
{
[[NSNotificationCenter defaultCenter]
postNotificationName:FBLoginErrorNotification
object:session];
}
}];
}
Vejo que o bloco no openSessionForReadPermissions é chamado duas vezes (uma vez com FBSessionStateOpen e uma vez com FBSessionStateOpenTokenExtended da chamada openSessionForPublishPermissions), e recebo um ErrorReauthorizeFailedReasonUserCancelled ao tentar primeiro efetuar login no aplicativo (se O excluiu todas as permissões de aplicativo anteriormente).
Qual é a maneira correta de implementar esse login? O aplicativo não exige o login do Facebook, exceto por esse recurso, portanto, o processo de login deve estar no mesmo botão.
Obrigado!