Zaktualizowałem swoją aplikację z pakietu SDK Facebooka 2 do wersji 3.1.Facebook iOS wydaje się utraconą sesją po powrocie do aplikacji po kliknięciu przycisku OK, masz już autoryzowaną aplikację
Mam przycisk Post na ekranie RecordsScreen. Jeśli użytkownik nie jest zalogowany na Facebooku, pojawi się strona logowania, a jeśli użytkownik jest już zalogowany, zostanie załadowany kolejny stalówka, aby zachęcić użytkownika do wprowadzenia wiadomości do wysłania na jego własną ścianę.
Mam już się zalogować. Później za każdym razem, gdy kliknę przycisk Post, strona o aplikacji jest już autoryzowana i zapyta, czy kontynuować, klikając OK. Po kliknięciu OK aplikacja kończy działanie i zaczyna ponownie uruchamiać od początku. Za każdym razem, gdy klikam przycisk Post, ta sama strona pojawia się ponownie. Wygląda na to, że nie może znaleźć prawidłowej sesji lub zgubiono token.
Testowałem to na symulatorze i urządzeniu. To samo dzieje się. Cel wdrożenia to iOS5.1.
Jedynym parametrem, którego nie wprowadziłem, jest identyfikator iPhone App Store. Czy to wpłynie na powyższe zachowanie?
Próbowałem już wiele razy i nie mogłem znaleźć rozwiązania.
Każda pomoc jest doceniana.
Dzięki!
AOBS
edytowane Jan 4:
I okazało się, że za każdym razem openSessionWithAllowLoginUI nazywa. Zostanie zwrócony stan FBSessionStateClosedLoginFailed. Wystąpił problem z zalogowaniem. Ale użytkownik ma już login od pojawienia się strony Już autoryzowane.
Powodem jest applicationWillTerminate wykonywany zaraz po openSessonWithAllowLoginUI. Czy ktoś może rzucić na to światło?
W appDelegate.h, że importować FacebookSDK/FacebookSDK.h i appDelegate.m następujące wymogiem:
-(BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
return [FBSession.activeSession handleOpenURL:url);
}
-(void)applicationDidBecomeActive:(UIApplication *)application {
[FBSession.activeSession handleDidBecomeActive];
}
-(void)applicationWillTerminate:(UIApplication *)application {
[FBSession.activeSession close];
}
The mainViewController to sterownik wielo-, który włącza stalówki.
Zaimplementowałem klasę FBHandler do obsługi logowania/wylogowania na Facebooku. FBHandler.h zawiera #import „Facebook.h” i FBHandler jest klasa, która zawiera
-(void)sessionStateChanged:(FBSession *)session state:(FBSessionState)state error:(NSError *)error {
switch(state) {
case FBSessionStateOpen:
break;
case FBSessionStateClosed:
case FBSessionStateClosedLoginFailed:
[FBSession.activeSession closeAndClearTokenInformation];
default:
break;
}
[[NSNotificationCenter defaultCenter]postNotificationName:FBSessionStateChangedNotification object:session];
// If there is an error, display the alert view. I have skipped this code.
}
-(BOOL)openSessionWithAllowLoginUI:(BOOL)allowLoginUI {
return [FBSession openActiveSessionWithReadPermissions:nil allowLoginUI:allowLoginUI completionHandler:^(FBSession *session, FBSessionState state, NSError *error) {
[self sessionStateChanged:session state:state error:error];
}];
}
Jeden z piszących - RecordsScreen.xib zawiera Facebooka Zaloguj/Wyloguj przycisków. W RecordsScreen.m (miejsce, w którym użytkownik może zobaczyć jego/jej wynik i zalogować lub wylogować się z Facebook), dodaje się do viewDidLoad:
fbHandler = [[FBHandler alloc] init];
[fbHandler openSessionWithAllowLoginUI:NO];
// Also, we will listen to FBSessionStateChangedNotification in viewDidLoad. Code is skipped here.
// The implementation of sessionStateChanged in RecordsScreen:
-(void)sessionStateChanged:(NSNotification *)notification {
if (FBSession.activeSession.isOpen) {
if (self.facebook == nil) {
self.facebook = [[Facebook alloc]initWithAppId:FBSession.activeSession.appID andDelegate:nil];
self.facebook.accessToken = FBSession.activeSession.accessToken;
self.facebook.expirationDate = FBSession.activeSession.expirationDate;
}
} else {
self.facebook = nil;
}
}
W RecordsScreen.m, jeśli użytkownik kliknie logowanie w przycisku,
if (!FBSession.activeSession.isOpen) {
// Login to Facebook.
[fbHandler openSessionWithAllowLoginUI:YES];
} else {
// If user is login, post to wall.
[self postScoreToWall];
}
Nie potrzebujesz identyfikatora sklepu App dla tego – Harikrishnan
Czy to działa dobrze w Facebook SDK 2? – Harikrishnan
Tak, wszystko działało prawidłowo w SDK 2. Kod był inny. – aobs