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.
Если сеанс создан или токен загружен, вам нужно будет снова открыть сеанс.