FBConnect:会话:didLogin从来没有所谓的从用户尝试登录,第二次开始?(FBConne

2019-10-29 17:07发布

我试图用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];
}

Answer 1:

现在,它的工作原理。 下面是相关代码处理会话。 我不显示其他方法,因为会话实例无法在其他地方的任何方式修改。 我希望这可能是给其他人有用。

- (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)viewDidLoad {

   [_session resume];

   ...

}



- (void)dealloc {
    [_session.delegates removeObject: self];
    [_session release], _session = nil;

        ...

    [super dealloc];
}


文章来源: FBConnect: session:didLogin never called starting from the second time the user tries to login?