2012-01-04 32 views
1

私はすべてのFacebookメソッドにアクセスするシングルトンを作成しています。このシングルトンでログインダイアログを処理したいと思います。FBシングルトンログイン

私はFacebook上でiOS SDKチュートリアルに従いましたが、ユーザーがボタンを押したときではなく、アプリケーションの起動時にログインできるようにしました。

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

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation { 
return [self.facebook handleOpenURL:url]; 
} 

する代わりに、問題のようですいただきました、私のアプリは、ログインするために、ブラウザやFBのアプリに切り替えていません。 私はAppDelegateで同じものを実装していますが、アプリケーションの起動後すぐに動作します。

私はこのようにそれを解決した

答えて

2

:AppDelegateで

-(void)connectToFacebook{ 
facebook = [[Facebook alloc] initWithAppId:kAPPID andDelegate:self]; 

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

} 

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

// For 4.2+ support 
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url 
sourceApplication:(NSString *)sourceApplication annotation:(id)annotation { 
return [facebook handleOpenURL:url]; 
} 

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

そしてシングルトン:

- (id)init { 
self = [super init]; 
if (self != nil) { 
    NBNAppDelegate *delegate = (NBNAppDelegate *)[[UIApplication sharedApplication] delegate]; 
    [delegate connectToFacebook]; 
    facebook = delegate.facebook;   
} 
return self; 
} 
1

あなたが作業して独自のソリューションを受け入れますが、簡単な解決策がありますシングルトンにログインコードを持つことを達成する元の質問に変換します。アプリケーションデリゲートに入れる必要があるのは、openURL(および4.2以前のサポートのhandleOpenURL)だけです。ここでは例を示します。他の

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation 
{ 
    if ([[url scheme] isEqualToString:[NSString stringWithFormat:@"fb%@", facebookAppId]]) {   
     return [[FacebookSingleton sharedFacebook].facebook handleOpenURL:url]; 
    } 
} 

すべては、あなたが(すべてのログインコードを含む)あなたのシングルトンに入れ、アプリケーションデリゲートを乱雑することはできません。あなたのシングルトンはFBSessionDelegateコードを実装します。このサンプルコードでは、 "facebook"と呼ばれるシングルトンにプロパティを宣言することを前提としています。これは、あなたのデリゲートではなく、Facebookオブジェクトが存在する場所です。

注:私はFacebookにURLを転送する前にスキームをチェックします。あなたのアプリケーションが受け入れる他のスキームを持っている場合にのみ必要です。

シングルトンコードが必要な人は、メッセージを残して、私もそれを投稿することができます。

+0

私は間違いなくシングルトンコードメイトを見ることに興味があります。 –

+0

ここに行きます。 http://pastebin.com/Gz9Sm7Ww – Joel