FBConnect SDK を使用して Facebook に接続しようとしています。ユーザーが最初にログインしようとすると、すべてが正常に機能します。デリゲート メソッドsession:didLoginが呼び出された後、ユーザーのステータスを更新し、写真をアップロードするための拡張アクセス許可を取得できます。ただし、ユーザーがログアウト ボタンをタップして再度接続しようとすると、2 回目以降は常にsession:didLoginNEVER が呼び出されます。これは、セッションがキャッシュされている場合 (ユーザが FBLoginDialog のチェックボックスをクリックした場合) とキャッシュされていない場合の両方で発生します。
拡張アクセス許可を取得するためにユーザーがタップする必要があるボタンの表示を開始するには、セッションが確立されたときに正しく認識する必要があります。
次の可能性のうち、正しい/予想される動作はどれですか?
1) セッションがキャッシュされている場合、ユーザーの 2 回目のログインはsession:didLogin呼び出されませんが、セッションは実際に接続されており (つまり、接続されている_session.IsConnected必要がありますYES)、セッションを確立するために他に何もする必要はありません。
2) セッションがキャッシュされている場合、ユーザーが 2 回目にログインしたときsession:didLoginに呼び出されず、セッションが接続されないため、セッションを確立するためにさらにアクションが必要になります (この場合はどうすればよいでしょうか?);
3) セッションがキャッシュされていない場合、ユーザーが 2 回目にログインしたとき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];
}