У меня возникли проблемы с входом в систему с разрешениями публикации в 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, кроме этой одной функции, поэтому процесс входа в систему должен быть одним нажатием кнопки.
Спасибо!