0

ここにログインするための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];
}

なぜこの動作が発生しているのか、はっきりとはわかりません。どんな助けでも大いに受け入れられるでしょう:)

4

1 に答える 1

0

私は実際にこれをログインボタンのラベル付けのエラーにまでさかのぼりました。ボタンに「ログイン」と表示されていても、セッションは常に開いていました。私はなんとかこの問題を修正しましたが、実際にアプリが起動時にログインしたままにならないことを発見しましたが、少なくともログイン/ログアウトボタンは常に正しいです!

于 2012-09-19T21:05:36.780 に答える