Facebookのログインについて多くの質問を読んだことがありますが、私が問題を解決することができなくなるまで、これまでにいくつかのアプリを作ったことがありますが、以前はappDelegateを使いこなしたことはありません。facebook fbDidLogin outside appdelegate
私は、代理人以外のクラスの中にあるfbDidLoginメソッドを呼び出す必要があります。
これまでは、appDelegateでfbDidLoginが呼び出されていましたが、ログインが行われた後で、ビューを変更してユーザー情報を要求できるようにしたいと考えています。
私のコード今のところ: AppDelegate:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window.rootViewController = self.tabBarController;
[self.window makeKeyAndVisible];
facebook = [[Facebook alloc] initWithAppId:SHKCONFIG(facebookAppId) andDelegate:self];
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
if ([defaults objectForKey:@"FBAccessTokenKey"]
&& [defaults objectForKey:@"FBExpirationDateKey"]) {
facebook.accessToken = [defaults objectForKey:@"FBAccessTokenKey"];
facebook.expirationDate = [defaults objectForKey:@"FBExpirationDateKey"];
}
return YES;
}
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
return [facebook handleOpenURL:url];
}
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url
{
return [facebook handleOpenURL:url];
}
// This one is called correctly
- (void)fbDidLogin {
NSLog(@"[DELEGATE] Deu login!");
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:[facebook accessToken] forKey:@"FBAccessTokenKey"];
[defaults setObject:[facebook expirationDate] forKey:@"FBExpirationDateKey"];
[defaults synchronize];
}
Facebookのログインボタンと私自身のクラス:
- (void)loginFacebook {
if (![facebook isSessionValid]) {
NSLog(@"[LOGIN] Facebook session invalid");
NSArray * permissions = [[NSArray alloc] initWithObjects:
@"email",
@"user_birthday",
nil];
[facebook authorize:permissions];
[permissions release];
} else {
NSLog(@"[LOGIN] Facebook session valid");
[facebook requestWithGraphPath:@"me" andDelegate:self];
}
}
// I want this one to work so I can ask for user info at the end of it
- (void)fbDidLogin {
NSLog(@"[LOGIN][FB] Deu login!");
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:[facebook accessToken] forKey:@"FBAccessTokenKey"];
[defaults setObject:[facebook expirationDate] forKey:@"FBExpirationDateKey"];
[defaults synchronize];
[facebook requestWithGraphPath:@"me" andDelegate:self];
}
私は申し訳ありませんが、これは明確でない場合は、より多くの情報が必要な場合は、私に聞かせて知っている。あなたの他のクラスの
- (void)fbDidLogin {
[[NSNotificationCenter defaultCenter] postNotificationName:@"FBDidLoginCalled" object:nil];
}
そして:
恐ろしくいいですね。 –