我在我的应用程序中使用 Facebook Connect。一切都已准备就绪,所有代码都在运行。大约在昨天,我可以使用我的应用程序登录,然后发布内容和其他功能。我不记得做过任何真正的改变。现在,和往常一样,每当我按下登录按钮时,它都会转到一个 Safari 页面,我必须在该页面上确认我想使用这个应用程序,它会显示我正在以谁的身份登录。如果我按确定,它会返回到应用程序。在整个过程中,在应用程序中,Facebook 从不登录。请记住:就在昨天,这个工作正常,我不记得做过任何更改!以下是连接的启动方式:
-(IBAction)connectToFacebook {
[loginButton setImage:[UIImage imageNamed:@"LoginWithFacebookPressed@2x.png"] forState:UIControlStateNormal];
facebook = [[Facebook alloc] initWithAppId:@"387500177929927" andDelegate:self];
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
if ([defaults objectForKey:@"FBAccessTokenKey"] && [defaults objectForKey:@"FBExpirationDateKey"]) {
facebook.accessToken = [defaults objectForKey:@"FBAccessTokenKey"];
facebook.expirationDate = [defaults objectForKey:@"FBExpirationDateKey"];
}
if (![facebook isSessionValid]) {
NSArray *permissions = [[NSArray alloc] initWithObjects:
@"user_likes",
@"read_stream",
nil];
[facebook authorize:permissions];
[permissions release];
}
NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:2.0 target:self selector:@selector(makeVisibleButtons) userInfo:nil repeats:NO];
}
所以我按下一个按钮来调用这个 IBAction。 NSTimer 没有关系,它只是为了一些按钮的外观。现在,这两个方法永远不会被调用(当我记录它时):
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url
sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
return [self.facebook handleOpenURL:url];
NSLog(@"handleOpenURL");
}
- (void)fbDidLogin {
NSLog(@"log in");
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:[facebook accessToken] forKey:@"FBAccessTokenKey"];
[defaults setObject:[facebook expirationDate] forKey:@"FBExpirationDateKey"];
[defaults synchronize];
}
我不明白为什么。特别是如果它以前工作过。你有什么想法吗?
最佳答案
具有 SSO(单点登录)
的 Facebook API。所以它会要求用户只登录一次。此登录在登录 token 过期之前有效。检查您的代码本身,您正在将 token
和 expiration time
存储在 NSUserDefaults
中。这将有助于 API 再次登录。如果您想确保您的应用程序登录功能是否正常工作,请从模拟器中删除您的应用程序并再次运行它。它只会在第一次询问您的登录凭据。希望你能理解。
关于iphone - Facebook Connect 登录问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9698896/