Facebook 身份验证后视图显示延迟

Posted

技术标签:

【中文标题】Facebook 身份验证后视图显示延迟【英文标题】:View showing up with delay after Facebook Authentication 【发布时间】:2017-02-09 12:54:46 【问题描述】:

我正在使用以下代码在 Facebook 身份验证后显示敬酒

if ([SLComposeViewController isAvailableForServiceType:SLServiceTypeFacebook]) // check Fb is configured in Settings or not
    
      accountStore = [[ACAccountStore alloc] init]; // you have to retain ACAccountStore
      ACAccountType *fbAcc = [accountStore accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierFacebook];
      NSString *key = @"xxxxx";
      NSDictionary *dictFB = [NSDictionary dictionaryWithObjectsAndKeys:key,ACFacebookAppIdKey,@[@"email"],ACFacebookPermissionsKey, nil];
      [accountStore requestAccessToAccountsWithType:fbAcc options:dictFB completion:^(BOOL granted, NSError *error) 
                            if (granted) 
                                NSLog(@"Perform fb registration");
                             else 
                                NSLog(@"Facebook 1”);
                                [[Toast shared] showToast:self.view withText:@"You disabled your app from settings."];
                                NSLog(@"Facebook 2”);
                            

                        ];

NSLog(@"Facebook 1”);NSLog(@"Facebook 2”); 分别正在执行和打印日志。但是,这两个日志之间的 toast 语句会延迟并在 15-20 秒后显示。

如果我将 toast 语句 [[Toast shared] showToast:self.view withText:@"You disabled your app from settings."]; 放在以下完成处理程序之外:

[accountStore requestAccessToAccountsWithType:fbAcc options:dictFB completion:^(BOOL granted, NSError *error) 
];

它工作正常,显示吐司及时,从不延迟。有什么办法可以消除延迟?

【问题讨论】:

我假设 requestAccess... 正在异步工作,而 showToast: 是一个 UI 作业,因此您可能需要在主线程中显式调用 showToast: - 如果还没有 -。跨度> @EDUsta 是的,我在主线程中调用了它,它工作正常。谢谢 【参考方案1】:

我相信 EDUsta 所说的是正确的。尝试在主线程上调用 toast 消息。所有 UI 更改都应在主线程上处理,以避免出现奇怪的错误。试试这个:

[accountStore requestAccessToAccountsWithType:fbAcc options:dictFB completion:^(BOOL granted, NSError *error) 
        if (granted) 
            NSLog(@"Perform fb registration");
         else 
            NSLog(@"Facebook 1”);
                  dispatch_async(dispatch_get_main_queue(), ^
                    [[Toast shared] showToast:self.view withText:@"You disabled your app from settings."];
            );
                  NSLog(@"Facebook 2”);
                        

                        ];

【讨论】:

以上是关于Facebook 身份验证后视图显示延迟的主要内容,如果未能解决你的问题,请参考以下文章

使用 Facebook SDK 进行身份验证后转到下一个视图

没有登录按钮的 Facebook 身份验证

在 Android 中单击 Facebook 登录按钮后未显示 Facebook 身份验证对话框

原版论坛 Facebook 身份验证错误:需要唯一 ID

UIWebView 中的 Facebook 身份验证不会重定向回我网站上要求身份验证的原始页面

简单的基于 iframe 的 Facebook 身份验证