FB Singleton登录
问题描述:
我正在创建一个单例以访问所有Facebook方法,并且想要处理此单例中的登录对话框。FB Singleton登录
我遵循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中实现相同的东西时,它可以工作,但在应用程序启动后立即生效。
答
我已经解决了这样的:
中的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;
}
答
虽然你接受了自己的解决方案为工作,有一个简单的解决方案到完成在单身人士登录代码的原始问题。你需要在你的应用程序委托中唯一需要的是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对象所在的位置,而不是您的代理。
注意:在将URL转发到Facebook之前,我检查了方案。如果你的应用程序有其他可以接受的方案,你只需要这个。
如果有人想要单身代码,请留言,我也可以发布。
我绝对有兴趣看到单身代码队友。 – 2012-05-26 20:28:39
在这里,你走了。 http://pastebin.com/Gz9Sm7Ww – Joel 2012-05-26 21:12:29