Facebook的登录对话框不能在iOS6的仿真工作(Facebook Login Dialog d

2019-08-01 03:21发布

我已经从旧的Facebook SDK到新的Facebook SDK 3.1将我的应用程序,以使用iOS6的本地功能以及其他Facebook的功能,并且我有这种情况发生始终在模拟器上,很少设备上的问题。

当我登录到Facebook上的应用程序backgrounding而不是通过Safari或Facebook的应用程序验证,我得到我的应用程序之上的模态窗口的登录(我相信这开始与iOS6的,即使在切换至Facebook SDK 3.0之前/3.1)。 这个窗口让我输入用户名和密码,但是当我去验证右上角点击“好”,什么都不会发生。 没有发生回调到应用程序:的OpenURL:sourceApplication:注释:在AppDelegate中。

在我的共享FacebookController代码(我在多个项目),我尝试初始化授权按照Facebook的样例代码时FBSession:

FBSession *session = [[FBSession alloc] initWithAppID:nil permissions:readPermissions defaultAudience:FBSessionDefaultAudienceNone urlSchemeSuffix:self.fbUrlSchemeSuffix tokenCacheStrategy:nil];

if(session.state == FBSessionStateCreated || session.state == FBSessionStateCreatedTokenLoaded)
{
  [FBSession setActiveSession:session];

  // we open after the fact, in order to avoid overlapping close
  // and open handler calls for blocks
  [session openWithBehavior:FBSessionLoginBehaviorUseSystemAccountIfPresent completionHandler:^(FBSession *session, FBSessionState status, NSError *error) {
...

除非我点击X取消该对话框上的按钮永远不会执行的完成处理程序的代码(在这种情况下,我得到预期的错误)。

我设置了FacebookAppID在我的iOS目标属性(info.plist中),我有一个设置了FB ### [url_scheme_suffix]以及该URL方案。

我有我的代码和Facebook的样例代码之间唯一的区别是,我使用URL方案的后缀,因为我有我们的应用程序的免费和付费版本。

如果应用程序使用Safari浏览器登录,它与代码工作给出。 如果快速切换到Facebook的应用程序,它也适用。 此外,Facebook的共享帐号iOS6的工作设置。 该应用程序只有在使用中的应用程序模式的失败。

有人遇到过这种情况么?

Answer 1:

同样的事情发生在我身上。 它只发生在模拟器(iPhone5的4英寸,iOS6的),所以我不知道这个问题会出现在实际的设备。

一对夫妇调试会话后,我发现FBDialog的web视图:shouldStartLoadWithRequest:navigationType:方法不处理这是承载着一个的access_token URL。 当Facebook传递的access_token,这意味着你的身份验证。 所以,我算了一下,有东西丢失在那里。

这里是一个没有被处理的URL的形状:

fb122222222222222://授权/#= 的access_token ...&expires_in = 5102464& 代码 = ...

需要注意的是URL方案是你已经在你的应用程序的Info.plist文件配置的相同FB + API密钥。

以下是我为了解决这个问题做了 。 请注意,我添加了一个新否则,如果分公司,我称之为对话成功情况下,我们的访问令牌:

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request
 navigationType:(UIWebViewNavigationType)navigationType {
    NSURL* url = request.URL;

    if ([url.scheme isEqualToString:@"fbconnect"]) {
        if ([[url.resourceSpecifier substringToIndex:8] isEqualToString:@"//cancel"]) {
            NSString * errorCode = [self getStringFromUrl:[url absoluteString] needle:@"error_code="];
            NSString * errorStr = [self getStringFromUrl:[url absoluteString] needle:@"error_msg="];
            if (errorCode) {
                NSDictionary * errorData = [NSDictionary dictionaryWithObject:errorStr forKey:@"error_msg"];
                NSError * error = [NSError errorWithDomain:@"facebookErrDomain"
                                                      code:[errorCode intValue]
                                                  userInfo:errorData];
                [self dismissWithError:error animated:YES];
            } else {
                [self dialogDidCancel:url];
            }
        } else {
            if (_frictionlessSettings.enabled) {
                [self dialogSuccessHandleFrictionlessResponses:url];
            }
            [self dialogDidSucceed:url];
        }
        return NO;
    }
//THIS IS WHAT I'VE ADDED>>>>
        else if ([[[[[[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleURLTypes"] firstObject] objectForKey:@"CFBundleURLSchemes"] firstObject] isEqual:url.scheme])
        {
            [self dialogDidSucceed:url];
            return NO;
        }
//<<<<<
    else if ([_loadingURL isEqual:url]) {
        return YES;
    } else if (navigationType == UIWebViewNavigationTypeLinkClicked) {
        if ([_delegate respondsToSelector:@selector(dialog:shouldOpenURLInExternalBrowser:)]) {
            if (![_delegate dialog:self shouldOpenURLInExternalBrowser:url]) {
                return NO;
            }
        }

        [[UIApplication sharedApplication] openURL:request.URL];
        return NO;
    } else {
        return YES;
    }
}

我是值得一提的是,我下面所有的FB SDK指南(3.1),我还没有作出了SRC代码进行任何进一步的修改。

有了这些变化,FB登录过程按预期工作。

我希望这有帮助!



文章来源: Facebook Login Dialog does not work on iOS6 simulator