iOS Facebook的SSO:isSessionValid()在通过Facebook登录时返回false应用
我正在开发一个使用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
根据SSO的实现,必须实现这个上AppDelegate.h代表:
@interface AppDelegate : UIResponder <UIApplicationDelegate,UIApplicationDelegate, FBSessionDelegate>
希望这可以帮助。