ここにログインするためのFacebookチュートリアルで使用されている正確な方法を使用してFBで基本的なログインを行おうとする小さなアプリがあります:https ://developers.facebook.com/docs/howtos/login-with-facebook-using-ios -sdk /
望ましい動作は、ユーザーがFBにログインし、ログアウトボタンをクリックしてログアウトすることを明示的に選択するまでログインしたままにできることです。アプリが強制的に強制終了された場合でも(削除されなかった場合でも)、アプリの起動後もログインしたままにする必要があります。
何が起こっているのかというと、ログインボタンをクリックした後、アプリはユーザーを正しくログインさせますが、ルートビューコントローラーに戻ってからFacebookViewControllerに戻ると、ボタンはログアウトではなくログインを再度表示します。どこかでセッションが強制終了されています。
どのコードが要求されるかはわかりませんが、ここにたくさんあります:
#import "FacebookViewController.h"
@interface FacebookViewController ()
@end
@implementation FacebookViewController
@synthesize authButton;
@synthesize postSwitch;
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
}
return self;
}
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view from its nib.
[[NSNotificationCenter defaultCenter]
addObserver:self
selector:@selector(sessionStateChanged:)
name:FBSessionStateChangedNotification
object:nil];
// Check the session for a cached token to show the proper authenticated
// UI. However, since this is not user intitiated, do not show the login UX.
AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
[appDelegate openSessionWithAllowLoginUI:NO];
// Set toggle
if ([[[NSUserDefaults standardUserDefaults] objectForKey:@"postToFB"] isEqualToString:@"Yes"]) {
//set to yes
[postSwitch setOn:YES animated:YES];
} else {
// set to no
[postSwitch setOn:NO animated:YES];
}
NSLog(@"postToFB is now %@",[[NSUserDefaults standardUserDefaults] objectForKey:@"postToFB"]);
}
- (IBAction)authButtonAction:(id)sender
{
AppDelegate *appDelegate =
[[UIApplication sharedApplication] delegate];
// If the user is authenticated, log out when the button is clicked.
// If the user is not authenticated, log in when the button is clicked.
if (FBSession.activeSession.isOpen) {
[appDelegate closeSession];
} else {
// The user has initiated a login, so call the openSession method
// and show the login UX if necessary.
[appDelegate openSessionWithAllowLoginUI:YES];
}
}
- (IBAction)togglePostSwitch:(id)sender
{
if ([[[NSUserDefaults standardUserDefaults] objectForKey:@"postToFB"] isEqualToString:@"Yes"]) {
//set to No
[[NSUserDefaults standardUserDefaults] setObject:@"No" forKey:@"postToFB"];
} else {
// set to yes
[[NSUserDefaults standardUserDefaults] setObject:@"Yes" forKey:@"postToFB"];
}
NSLog(@"postToFB is now %@",[[NSUserDefaults standardUserDefaults] objectForKey:@"postToFB"]);
}
- (void)sessionStateChanged:(NSNotification*)notification
{
if (FBSession.activeSession.isOpen) {
[self.authButton setTitle:@"Logout of Facebook" forState:UIControlStateNormal];
} else {
[self.authButton setTitle:@"Login to Facebook" forState:UIControlStateNormal];
}
}
@end
MainViewController(ルートVC)には、ViewDidLoadとViewWillAppearに次のものがあります。
- (void)viewDidLoad
{
[[self navigationController] setNavigationBarHidden:YES animated:NO];
AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
BOOL open = [appDelegate openSessionWithAllowLoginUI:NO];
if (open) {
NSLog(@"User session found (MainVC viewDidLoad)");
} else {
NSLog(@"no session detected");
}
}
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:NO];
[[self navigationController] setNavigationBarHidden:YES animated:NO];
}
なぜこの動作が発生しているのか、はっきりとはわかりません。どんな助けでも大いに受け入れられるでしょう:)