And*_*ryn 1 delegates facebook login objective-c facebook-graph-api
我已经阅读了很多关于facebook登录的问题,但直到没有我没有成功解决我的问题.到目前为止我已经制作了一些应用程序,但我之前从未搞过appDelegate.
问题是我想调用除了委托之外的类内部的fbDidLogin方法.
到目前为止,fbDidLogin正在appDelegate中调用,但我希望能够在登录发生后更改视图并询问用户信息.
我的代码到目前为止: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];
}
Run Code Online (Sandbox Code Playgroud)
我自己上课的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];
}
Run Code Online (Sandbox Code Playgroud)
对不起,如果不清楚,如果您需要更多信息,请告诉我.
您可以从App Delegate发布通知,如下所示:
- (void)fbDidLogin {
[[NSNotificationCenter defaultCenter] postNotificationName:@"FBDidLoginCalled" object:nil];
}
Run Code Online (Sandbox Code Playgroud)
然后在你的其他课堂上:
- (void)loginFacebook {
if (![facebook isSessionValid]) {
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(fbDidLoginNotificationFired) name:@"FBDidLoginCalled" object:nil]
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)fbDidLoginNotificationFired {
[[NSNotificationCenter defaultCenter] removeObserver:self name:@"FBDidLoginCalled" object:nil];
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];
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1175 次 |
| 最近记录: |