【问题标题】:iPad: Cannot load facebook page wall in UIWebviewiPad:无法在 UIWebview 中加载 facebook 页面墙
【发布时间】:2012-09-27 12:44:09
【问题描述】:

我在这个问题上苦苦挣扎已经太久了。经过大量搜索后,我决定在这里发布一个问题。

我的应用能做什么

  1. 拍摄照片
  2. 上传页面墙上的照片
  3. 上传完成后在UIWebview中显示facebook页面墙

4 天前一切正常 :) 突然出了点问题 :(

代码

    NSString *facebookPageURL =@"https://m.facebook.com/pages/<myPageName>/<myPageID>?v=wall"
    UIWebView *webView = [[UIWebView alloc] initWithFrame:kAppFrame];
    [webView setUserInteractionEnabled:NO];
    [webView setBackgroundColor:[UIColor clearColor]];
    webView.delegate = self;
    [webView setHidden: YES];

    NSURL *url = [NSURL URLWithString:[facebookPageURL stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding] relativeToURL:[NSURL URLWithString:@"http://login.facebook.com"]];
    NSMutableURLRequest *request = nil;

    if(url)
        request = [NSMutableURLRequest requestWithURL:url];        
       [webView loadRequest:request];
    [self.view addSubview:webView];
    [webView reload];
    [self.view bringSubviewToFront:webView];
    webView = nil;

场景

  1. 如果我在 Safari 中的 iOS Simulator 中打开网址 facebookPageURL,效果会很好
  2. 如果我在 Mac 上的任何浏览器中打开该 url,它都可以正常工作
  3. webView 我看到一个白屏
  4. 如果我将facebookPageURL 更改为将?v=wall 删除为?v=info,我仍然可以看到该页面。(至少不是空白屏幕)。

注意 1. 我的 Facebook 页面不是 unpublished 并且是可见的。 2.我已经交叉检查了facebook页面的权限。

我怀疑 Facebook 方面一夜之间发生了一些变化。

请指导。

【问题讨论】:

  • 其他人也有同样的问题 - 1771.in/…
  • 我也有同样的问题
  • @Hivebrain 请检查接受的答案,这对我来说非常有效,无需任何进一步的解决方法。

标签: facebook ipad facebook-graph-api facebook-ios-sdk


【解决方案1】:

似乎一直反复无常的Facebook已经取消了查看墙的权限。我得出了这个结论,因为当我在单独的项目中尝试相同的事情时,我得到了 infophotos 但对于 wall 它变成了灰色

所以这里是所有遭受或可能遭受此问题的人的解决方案。

我正在收到一本字典来回复帖子

{"id":"&lt;imge_id&gt;","post_id":"&lt;post_id&gt;"}

http://www.facebook.com/photo.php?fbid=&lt;imge_id&gt;

它就像一个魅力。

编辑:1 刚才我发现了一个问题 对于有年龄限制的页面,我们需要在我的应用中验证哪个 SSO 不支持 UIWebView。

我不得不降级为不再使用 SSO。现在它无论如何都可以工作了。

只需添加here,您就可以找到如何巧妙地降级到non-sso机制。

【讨论】:

    【解决方案2】:

    我觉得对你有帮助

    - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
        if ([(NSMutableURLRequest *)request respondsToSelector:@selector(setValue:forHTTPHeaderField:)]) {
            [(NSMutableURLRequest *)request setValue:@" Safari/537.1" forHTTPHeaderField:@"User_Agent"];
        }
    }
    

    【讨论】:

      【解决方案3】:

      我的头撞在墙上有一段时间了。 iPhone 上的相同请求和 webview 将打开一个 facebook 页面,但在 iPad 上会导致一个空白页面。更改用户代理并不能解决问题。

      我可以通过使用 stringWithContentsOfURL 拉下我正在寻找的页面的 HTML,然后手动将 HTML 加载到 webview 中来绕过它

      如果你能提供帮助,你不想从你的主线程调用 [NSString stringWithContentsofURL,因为它会阻止你的线程直到结果返回。这是我在后台运行它并更新我已经创建并添加到名为“facebookWebView”的子视图中的 UIWebView 的解决方案:

          dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
      
          NSString *rawHTML = [NSString stringWithContentsOfURL:[NSURL URLWithString:@"http://www.facebook.com/link.to.your.page.on.facebook"] encoding:NSASCIIStringEncoding error:nil];
      
              dispatch_async(dispatch_get_main_queue(), ^(void) {
      
      
                  [facebookWebView loadHTMLString:rawHTML baseURL:[NSURL URLWithString:@"http://www.facebook.com"]];
      
      
      
              });
          });
      

      希望这对某些人有所帮助。

      【讨论】:

        猜你喜欢
        • 2011-06-01
        • 1970-01-01
        • 2014-08-15
        • 1970-01-01
        • 2012-05-24
        • 1970-01-01
        • 2015-06-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多