iOS:连接到Facebook,无需离开应用程序进行授权

我知道这是可能的graphicsAPI之前。

我工作的iPhone应用程序可能不在后台(其中一个要求)。
此外,应用程序启动时还有一个login屏幕。
因此,为了向Facebook进行身份validation,然后返回到应用程序,并且每次用户想要共享某个内容时再次login,都不适合转到后台。

所以,我的问题是,如果没有离开应用程序,有没有办法与Facebook进行身份validation。

顺便说一句,我曾尝试使用旧的API。
它在一开始工作,但昨天停止工作。
我只是在旧的FacebookloginWeb视图中看到一个空白屏幕。
我也检查了一个使用旧的Facebook Connect API的老应用程序,并且在该应用程序中也获得了相同的空白login屏幕。

任何想法将不胜感激。

先谢谢你。


迈克尔。

在Facebook.m

- (void)authorizeWithFBAppAuth:(BOOL)tryFBAppAuth safariAuth:(BOOL)trySafariAuth { NSMutableDictionary* params = [NSMutableDictionary dictionaryWithObjectsAndKeys: _appId, @"client_id", @"user_agent", @"type", kRedirectURL, @"redirect_uri", @"touch", @"display", kSDKVersion, @"sdk", nil]; 

方法注释掉这个

  UIDevice *device = [UIDevice currentDevice]; if ([device respondsToSelector:@selector(isMultitaskingSupported)] && [device isMultitaskingSupported]) { if (tryFBAppAuth) { NSString *fbAppUrl = [FBRequest serializeURL:kFBAppAuthURL params:params]; didOpenOtherApp = [[UIApplication sharedApplication] openURL:[NSURL URLWithString:fbAppUrl]]; } if (trySafariAuth && !didOpenOtherApp) { NSString *nextUrl = [NSString stringWithFormat:@"fb%@://authorize", _appId]; [params setValue:nextUrl forKey:@"redirect_uri"]; NSString *fbAppUrl = [FBRequest serializeURL:loginDialogURL params:params]; didOpenOtherApp = [[UIApplication sharedApplication] openURL:[NSURL URLWithString:fbAppUrl]]; } } 

这将阻止应用程序转到后台并显示标准的fb对话框。

在这里你有一个替代解决scheme。

如果您不想更改Facebook的sdk代码,并希望有一个解决scheme可以在SSO或旧式机制之间进行select,则可以实现如下所示的扩展:

 //Facebook_SSOExtension.h -------------------------------------------------------- @interface Facebook(SSOExtension) -(void) authorize:(NSArray*)permissions useSSO:(BOOL) useSSO; @end //Facebook_SSOExtension.m -------------------------------------------------------- //So warnings do not appear @interface Facebook(PrivateSSOExtension) - (void)authorizeWithFBAppAuth:(BOOL)tryFBAppAuth safariAuth:(BOOL)trySafariAuth; -(void) setPermissions:(NSArray*) permissions; @end @implementation Facebook(SSOExtension) -(void) authorize:(NSArray*)permissions useSSO:(BOOL) useSSO { [self setPermissions: permissions]; [self authorizeWithFBAppAuth:useSSO safariAuth:useSSO]; } @end 

即使这需要比注释sso代码更多的工作,您将能够更新facebook-sdk而不会有重大问题(如果他们重命名authorizeWithFBAppAuth:safariAuth:您的扩展将不起作用,请使用断言来快速检测此问题)。 另外,如果您正在构build可重复使用的组件来与Facebook进行交互,而无需一遍又一遍地重复这些事情,这也将为您节省一些工作量。

干杯。