我正在開發一個使用Objective C的IOS5.1應用程序。我爲我的應用程序登錄功能實現了本機IOS應用程序0122,的Facebook SSO。iOS Facebook的SSO:isSessionValid()在通過Facebook登錄時返回false應用
我的應用程序的流程從一個loginViewController開始。當用戶在我的應用中登錄登錄按鈕時,應用程序將檢查isSessionValid()。如果該方法返回true,則用戶將被引導至下一頁。在配置手機上進行模擬時,我目前的應用程序能夠將我引導至移動Safari瀏覽器(如果沒有Facebook應用程序)或Facebook應用程序。當我通過Safari瀏覽器登錄時,isSessionValid()返回true並將我引導到下一個視圖頁面。但是,如果在配置的Iphone中有Facebook應用程序,當我點擊我的應用程序中的登錄按鈕時,facebook應用程序會彈出。 Facebook應用程序顯示帶有活動指示器「正在加載...」的白頁,然後它將我引導回我的應用程序。當我再次點擊登錄按鈕時,facebook應用程序再次彈出。這變成了一個無限循環。當我嘗試通過配置的iphone上的Facebook應用登錄時,我無法進入下一頁。
這裏是我的代碼:
在AppDelegate.h:
@interface AppDelegate : UIResponder <UIApplicationDelegate>
{
NSMutableDictionary *userPermissions;
}
@property (nonatomic, retain) Facebook *facebook;
@property (nonatomic, retain) UIWindow *window;
@property (nonatomic, retain) LoginViewController *loginvc;
在AppDelegate.m:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions: (NSDictionary *)launchOptions
{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
self.loginvc = [storyboard instantiateInitialViewController];
self.window.rootViewController = loginvc;
facebook = [[Facebook alloc] initWithAppId:@"facebookID" andDelegate:self.loginvc];
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
if ([defaults objectForKey:@"FBAccessTokenKey"]
&& [defaults objectForKey:@"FBExpirationDateKey"]) {
facebook.accessToken = [defaults objectForKey:@"FBAccessTokenKey"];
facebook.expirationDate = [defaults objectForKey:@"FBExpirationDateKey"];
}
// Initialize user permissions
userPermissions = [[NSMutableDictionary alloc] initWithCapacity:1];
[self.window makeKeyAndVisible];
return YES;
}
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
return [self.facebook handleOpenURL:url];
}
在LoginViewController.m:
- (IBAction)loginViaFacebook:(id)sender
{
AppDelegate *delegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
if (![[delegate facebook] isSessionValid]) {
[[delegate facebook] authorize:permissions];
} else {
[self performSegueWithIdentifier:@"signup" sender:self];
}
}
- (void)fbDidLogin {
AppDelegate *delegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:[[delegate facebook] accessToken] forKey:@"FBAccessTokenKey"];
[defaults setObject:[[delegate facebook] expirationDate] forKey:@"FBExpirationDateKey"];
[defaults synchronize];
}
。所有必要的fac電子書協議在LoginViewController.m中實現。
我正在使用storyBoard。故事板中使用的起始ViewController是LoginViewController。 我確定當facebook sso在通過移動Safari瀏覽器登錄時工作但不通過Facebook應用程序。
希望有人知道答案。謝謝!在Facebook上的文檔,https://developers.facebook.com/docs/mobile/ios/build/#implementsso