授权后未立即调用时,facebook对话框静默失败

Posted

技术标签:

【中文标题】授权后未立即调用时,facebook对话框静默失败【英文标题】:facebook dialog failing silently when not called immediately after authorize 【发布时间】:2011-02-24 13:56:03 【问题描述】:

我有以下功能可以使用最新的 ios Facebook SDK 发布到 Facebook。

-(void)fbPost:(NSMutableDictionary *) params
    NSLog(@"fbPost called");

    if (![facebook isSessionValid]) 
        NSLog(@"session invalid, calling fblogin");

        [self fblogin];
    
    if ([facebook isSessionValid]) 
        NSLog(@"session valid, calling publishToFB");

        [self.facebook dialog:@"stream.publish" andParams:params andDelegate:self];

    


当没有现有会话时,它可以正常工作:它登录到 facebook,获取权限,返回应用程序,显示对话框并发布状态。但是,当第二次尝试时,isSessionValid 第一次返回 true 并且没有任何反应,尽管日志显示调用了 publishToFB。

会话在 fbDidLogin 中持久化:

[[NSUserDefaults standardUserDefaults] setObject:self.facebook.accessToken forKey:@"AccessToken"];
    [[NSUserDefaults standardUserDefaults] setObject:self.facebook.expirationDate forKey:@"ExpirationDate"];
    [[NSUserDefaults standardUserDefaults] synchronize];

并加载到应用程序 didFinishLaunchingWithOptions:

facebook.accessToken    = [[NSUserDefaults standardUserDefaults] stringForKey:@"AccessToken"];
facebook.expirationDate = (NSDate *) [[NSUserDefaults standardUserDefaults] objectForKey:@"ExpirationDate"];

我确保在登录时请求offline_access 权限:

_permissions =  [[NSArray arrayWithObjects:
                      @"publish_stream",@"offline_access",nil] retain];

【问题讨论】:

【参考方案1】:

看来问题在于在 FBDialog.m 中的这段代码中绘制对话框

UIWindow* window = [UIApplication sharedApplication].keyWindow;
  if (!window) 
    window = [[UIApplication sharedApplication].windows objectAtIndex:0];
  

如果我注释掉 If 子句,它可以正常工作。我猜在我的应用设置中,“keyWindow”不是最前面的,所以对话框没有出现。

【讨论】:

以上是关于授权后未立即调用时,facebook对话框静默失败的主要内容,如果未能解决你的问题,请参考以下文章

Facebook分享对话框立即消失

回发后未调用模态对话框的 onshow

用户对 facebook 进行身份验证后未调用应用程序打开 Url 方法

Facebook iOS SDK 3.2.1 授权/确认授权时的空白对话框

trigger.io facebook 使用 iphone 5 授权“意外失败”

Swift:登录时是不是可以避免 Facebook SDK 4.x “您已经授权此应用程序”对话框?