我正在创建一个单例来访问所有Facebook方法,并且要处理此单例中的“登录”对话框。
我在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 App进行登录。
当我在AppDelegate中实现相同的东西时,它可以工作,但应在Application启动后立即进行。
最佳答案
我已经这样解决了:
在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];
}
在Singleton中:
- (id)init {
self = [super init];
if (self != nil) {
NBNAppDelegate *delegate = (NBNAppDelegate *)[[UIApplication sharedApplication] delegate];
[delegate connectToFacebook];
facebook = delegate.facebook;
}
return self;
}
关于iphone - FB Singleton登录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8733298/