我试图用FBConnect SDK来连接Facebook。 一切工作正常的用户第一次尝试登录:委托方法session:didLogin
被调用,那么我能够获得扩展权限更新用户的状态和上传图片。 但是,当用户点击退出按钮,尝试重新连接,从第二次开始对这个结果总是在session:didLogin
从来没有所谓。 发生这种情况时,双方会话缓存(上在FBLoginDialog复选框用户点击),当它不是。
我只需要在建立以开始显示用户需要以获取扩展许可轻按按钮会话正确识别。
什么是以下可能性之间的正确/预期的行为?
1)如果会话缓存,则第二次在用户登录session:didLogin
不会被调用,但会话真正连接(即_session.IsConnected
必须是YES
),并没有别的需要做建立会话;
2)如果会话缓存,则第二次在用户登录session:didLogin
不会被调用,所以需要采取进一步行动,以建立会话(我应该在这种情况下,做了会议未连接);?
3)如果会话没有被缓存,然后在第二时间在用户登录session:didLogin
将被调用,建立会话;
相关代码如下。 请让我知道,如果事情是错误的,你当前的最佳实践,以独立的会话状态实现多个正确登录(缓存与否)。 先感谢您。
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
if (self = [super initWithNibName:@"FacebookViewController" bundle:nibBundleOrNil]) {
if (kGetSessionProxy) {
_session = [[FBSession sessionForApplication:kApiKey getSessionProxy:kGetSessionProxy delegate:self] retain];
} else {
_session = [[FBSession sessionForApplication:kApiKey secret:kApiSecret delegate:self] retain];
}
}
return self;
}
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
BOOL resumed = [_session resume];
_loginButton.style = FBLoginButtonStyleWide;
if (_session.isConnected) {
_permissionButton.hidden = NO;
}
else{
_permissionButton.hidden = YES;
}
_statusButton.hidden = YES;
_photoButton.hidden = YES;
if(([_session isConnected] || resumed) && self.name){
_label.text = [NSString stringWithFormat:@"%@ %@", NSLocalizedString(@"Logged in as", nil), self.name];
}
else{
_label.text = [NSString stringWithFormat:@"%@", NSLocalizedString(@"You are not logged in", nil)];
}
}
- (void)session:(FBSession*)session didLogin:(FBUID)uid {
NSLog(@"session:didLogin:");
if(_session && session != _session){
[_session release], _session = nil;
}
if(!_session){
_session = [session retain];
}
_label.text = @"";
_permissionButton.hidden = YES;
_statusButton.hidden = YES;
_photoButton.hidden = YES;
NSString* fql = [NSString stringWithFormat:@"select uid,name from user where uid == %lld", session.uid];
NSDictionary* params = [NSDictionary dictionaryWithObject:fql forKey:@"query"];
[[FBRequest requestWithDelegate:self] call:@"facebook.fql.query" params:params];
}
- (void)dealloc {
[_session.delegates removeObject: self];
[_session release], _session = nil;
[_permissionButton release], _permissionButton = nil;
[_statusButton release], _statusButton = nil;
[_photoButton release], _photoButton = nil;
[name release], name = nil;
[super dealloc];
}