Facebook iOS 3.1 SDK войти с разрешением публиковать обратные вызовы
У меня возникли проблемы при входе с разрешениями на публикацию в Facebook 3.1 IOS SDK.
В моем приложении есть кнопка для отправки видео, и когда пользователь нажимает на нее, я хочу добавить базовое + разрешение на публикацию. Как я понимаю, мне нужно сделать два звонка -
openActiveSessionWithReadPermissions
, а потомreauthorizeWithPublishPermissions
Вот'это код, который яиспользую сейчас:
//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];
}
}];
}
Я вижу, что блок в openSessionForReadPermissions вызывается дважды (один раз с FBSessionStateOpen и один раз с FBSessionStateOpenTokenExtended из вызова openSessionForPublishPermissions), и я получаю ErrorReauthorizeFailedReasonUserCancelled при первой попытке войти в приложение до (если O удалил все разрешения приложения до).
Как правильно реализовать этот логин? Приложение не требует входа в Facebook, за исключением этой функции, поэтому процесс входа должен быть одним нажатием кнопки.
Спасибо!