session.state FBSessionStateCreated не публикуется на стене fb в ios

Я столкнулся с проблемой. когда я вошел в учетную запись Facebook в моем приложении. Во время 1-ой публикации я получаю этот ответ от FBSession, он работает нормально и публикуется на FBWall как обычно.

FBSESSION <FBSession: 0x1c31bbc0, state: FBSessionStateCreatedTokenLoaded, loginHandler: 0x0, appID: 524460600950223, urlSchemeSuffix: , tokenCachingStrategy:<FBSessionTokenCachingStrategy: 0x176c99b0>, expirationDate: 2015-02-27 10:42:15 +0000, refreshDate: 2014-12-30 06:24:28 +0000, attemptedRefreshDate: 0000-12-30 00:00:00 +0000, permissions:(
"create_note",
"basic_info",
"share_item",
"read_stream",
"status_update",
"publish_actions",
"user_friends",
"publish_checkins",
"video_upload",
"export_stream",
"publish_stream",
"photo_upload",
installed,
email,
"public_profile",
"user_birthday",
"user_status"
)>

начиная со второго раза я пытаюсь опубликовать, я получаю FBSession, как показано ниже, он не будет публиковаться на FBWall

FBSESSION <FBSession: 0x1d05fac0, state: FBSessionStateCreated, loginHandler: 0x0, appID: 524460600950223, urlSchemeSuffix: , tokenCachingStrategy:<FBSessionTokenCachingStrategy: 0x176c99b0>, expirationDate: (null), refreshDate: (null), attemptedRefreshDate: 0000-12-30 00:00:00 +0000, permissions:(null)>

//This will happens at the time of Loginwithfacebook account... otherwise it will work fine  
//can any one help me. Thanks in advance

2 ответа

Решение

Я получил решение. Нет необходимости проверять сессию, если мы вошли в систему с учетной записью Facebook. Просто опубликуйте то, что вы хотите

FBSession *session = [[FBSession alloc] init];

NSLog(@"FBSESSION %@", session);

if (session.state == FBSessionStateCreatedTokenLoaded || session.state == FBSessionStateOpen )
{

    [[[[iToast makeText:@"Post on wall success"] setGravity:iToastGravityBottom] setDuration:iToastDurationShort]show];
    // even though we had a cached token, we need to login to make the session usable
    [session openWithCompletionHandler:^(FBSession *session,
                                         FBSessionState status,
                                         NSError *error) {
        [FBSession setActiveSession:session];
        [FBRequestConnection startWithGraphPath:@"/me/feed"
                                     parameters:params
                                     HTTPMethod:@"POST"
                              completionHandler:^(FBRequestConnection *connection, id result, NSError *error){
                                  NSLog(@"error-- %@",error);
                              }];
    }];
}

Ранее мой код, как показано выше

Я просто добавил еще часть к приведенному выше коду, он будет работать правильно. Моя проблема будет решена.

else
{

[[[[iToast makeText:@"Post on wall success"] setGravity:iToastGravityBottom] setDuration:iToastDurationShort]show];
[FBRequestConnection startWithGraphPath:@"/me/feed"
                             parameters:params
                             HTTPMethod:@"POST"
                      completionHandler:^(FBRequestConnection *connection, id result, NSError *error){
                          NSLog(@"error-- %@",error);
                      }];
}

Следующая строка в вашем коде должна быть изменена:

if (session.state == FBSessionStateCreatedTokenLoaded || session.state == FBSessionStateOpen )

в

if (session.state == FBSessionStateCreatedTokenLoaded || session.state == FBSessionStateCreated )

Если ваше состояние сеанса уже открыто, то нет необходимости снова открывать FBSession.

Если сеанс создан или токен загружен, вам нужно будет снова открыть сеанс.

Другие вопросы по тегам