2011-09-11 24 views
0

Facebook APIのログインに困っています。ネット上で役立つものは見つかりませんでした。Facebook OAuth apiログインの問題

マイFBSessionDelegateメソッドが呼び出されていない、とaccessTokenとEXPIRATIONDATE値が設定されていないので、私は、私が今までにログインしていないと思います。

私は2つのボタンのみで、非常にシンプルなアプリに戻りました(ログイン、ログアウト)、ステータス情報を表示するためのラベル

// 
#import <UIKit/UIKit.h> 
#import "Facebook.h" 

@interface facebook_login_testViewController : UIViewController <FBSessionDelegate>{ 

    UIButton *loginButton; 
    UIButton *logoutButton; 
    UILabel *info; 

    Facebook *facebook; 

} 

@property (nonatomic, retain) Facebook *facebook; 

- (void) loggingIn; 
- (void) loggingOut; 

@end 

#import "facebook_login_testViewController.h" 

@implementation facebook_login_testViewController 
@synthesize facebook; 

- (void)dealloc 
{ 
    [super dealloc]; 
} 

- (void)didReceiveMemoryWarning 
{ 
    [super didReceiveMemoryWarning]; 
} 

#pragma mark - View lifecycle 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    loginButton = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
    [loginButton setTitle: @"Log In" forState:UIControlStateNormal]; 
    [loginButton addTarget:self action:@selector(loggingIn) forControlEvents:UIControlEventTouchUpInside]; 
    loginButton.frame = CGRectMake(200, 200, 200, 50); 

    logoutButton = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
    [logoutButton setTitle: @"Log Out" forState:UIControlStateNormal]; 
    [logoutButton addTarget:self action:@selector(loggingOut) forControlEvents:UIControlEventTouchUpInside]; 
    logoutButton.frame = CGRectMake(200, 300, 200, 50); 

    info = [[UILabel alloc] initWithFrame:CGRectMake(200, 400, 400, 600)]; 
    info.numberOfLines = 0; 

    [self.view addSubview:loginButton]; 
    [self.view addSubview:logoutButton]; 
    [self.view addSubview:info]; 

    info.text = @"Waiting to log in...\n\nPress the login button."; 

    facebook = [[Facebook alloc] initWithAppId:@"159...........5" andDelegate:self]; 

    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
    if ([defaults objectForKey:@"FBAccessTokenKey"] 
     && [defaults objectForKey:@"FBExpirationDateKey"]) { 
     facebook.accessToken = [defaults objectForKey:@"FBAccessTokenKey"]; 
     facebook.expirationDate = [defaults objectForKey:@"FBExpirationDateKey"]; 
    } 

} 


- (void)viewDidUnload 
{ 
    [super viewDidUnload];   
} 

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
{ 
    // Return YES for supported orientations 
    return YES; 
} 

- (void) loggingIn{ 
    if (![facebook isSessionValid]) { 
     [facebook authorize:nil]; 
    } 
} 

- (void) loggingOut{ 
    info.text = [NSString stringWithFormat:@"\naccess token: %@\nexpiration date: %@\nfacebood description:%@\n",facebook.accessToken, facebook.expirationDate, facebook]; 
    [facebook logout:self]; 

} 

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url { 

    return [facebook handleOpenURL:url]; 
} 

- (void)fbDidLogin { 
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
    [defaults setObject:[facebook accessToken] forKey:@"FBAccessTokenKey"]; 
    [defaults setObject:[facebook expirationDate] forKey:@"FBExpirationDateKey"]; 
    [defaults synchronize]; 

} 

@end 

の.plistファイルがこの

enter image description here

ように設定されています。ここでは

は、すべての処理が行われるビューコントローラのためのコードであり、

これは本当に間違っているのは簡単すぎます。ログインボタンをクリックすると、authorize:permission、次にauthorize:permissions localAppId:localAppIdまでトレースすることができます。私はそれをトレースする限り、isSessionValidがTRUEになるようなものは表示されません。

私は待ってからログオフボタンを押して、非同期が必要な場合に備えていくつかのFacebookパラメータを見てください。まだそれらはnullです。

私は行方不明を誰かが見ることができますか?

答えて

1

これはどのように動作するかを示す例はほとんどありませんが、Facebook SDKはappIdをプラグインすると動作するデモアプリケーション(DemoApp)とともに配布されています。 (appIdの値を入力しないと、その値をチェックすると殺されます)

承認プロセスでは、[facebook authorize:permissions]が呼び出されます。

これはへの呼び出しにつながる(パーミッションはゼロではありません)[自己AUTHORIZE:許可がlocalAppId:nilを]、その後、[:YES safariAuth YES自己authorizeWithFBAppAuth]を呼び出します。その方法では、承認のためにFacebookに接続する3つの方法を試すことができます。これらの非同期メソッドのそれぞれにおいて

、アプリケーションデリゲートはへアプリケーションの一部として得られるコールバックを処理するデリゲートである:(のUIApplication *)アプリケーションhandleOpenURL:(NSURL *)URL。これが他のオンラインチュートリアルで言及されていれば、私が見たものから一般にアプリケーションデリゲート内のすべての処理を行うので、見逃しやすいです。私の場合は、メインビューコントローラ内でメイン処理を行いました。

修正、私の場合には、アプリケーションを移動することでした:(のUIApplication *)アプリケーションhandleOpenURL:(NSURL *)URL方法アプリケーションデリゲートにし、このようなFacebookのオブジェクトを指すようにします:

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url { 
    return [[controller facebook] handleOpenURL:url]; 
} 

その後、他のfacebookデリゲートメソッド(fbDidLogin、fbDidLogout)が呼び出され、私はaccessTokenとexpirationDateを受け取りました。だから、これは今働いているように見えます。

関連する問題