iOS:无需离开应用程序即可获得授权即可连接到Facebook

| 我知道在Graph API之前是可能的。 我使用的iPhone应用程序可能不是在后台运行(其中一项要求)。 此外,启动应用程序时还会有一个登录屏幕。 因此,不适合去后台进行身份验证,然后再返回到应用程序并在用户每次要共享内容时再次登录。 因此,我的问题是,是否有一种无需离开应用程序即可通过Facebook进行身份验证的方法。 顺便说一句,我试图使用旧的API。 它在一开始就起作用,但是昨天它停止了工作。 我只是在旧的Facebook登录网络视图中看到一个空白屏幕。 我还检查了使用该旧Facebook Connect API的旧应用程序之一,并且在该应用程序中也得到了相同的空白登录屏幕。 任何想法将不胜感激。 先感谢您。 - 迈克尔     
已邀请:
在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对话框。     
在这里,您有一个替代解决方案。 如果您不想更改facebook sdk代码,并且想要一个允许您在SSO或老式机制之间进行选择的解决方案,则可以实现如下扩展:
//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:您的扩展名将无法正常工作,请使用断言来快速检测到此问题)。另外,如果您要构建可重复使用的组件以与Facebook进行交互,而不必一遍又一遍地重复操作,那么这也将节省您的工作。 干杯。     

要回复问题请先登录注册