iPad:无法在UIWebview中加载Facebook页面墙

时间:2012-09-27 12:44:09

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

我已经太久了,我正在努力解决这个问题。经过大量搜索,我决定在这里发一个问题。

我的应用

  1. 捕捉照片
  2. 将照片上传到页面墙上
  3. 上传完成后在UIWebview显示Facebook页面墙
  4. 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. 如果我在facebookPageURL的Safari中打开网址iOS Simulator,则效果很好
    2. 如果我在Mac上的任何浏览器中打开网址都可以正常使用
    3. webView我看到白屏
    4. 如果我更改facebookPageURL以删除?v=wall?v=info,我仍然可以看到该页面。(至少不是空白屏幕)。
    5. 注意 1.我的Facebook页面不是unpublished并且可见。 2.我已经交叉检查了facebook页面的权限。

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

      请指导。

3 个答案:

答案 0 :(得分:0)

似乎永远变幻莫测的Facebook已经取消了查看墙的权限。我得出了这个结论,因为当我在单独的项目中尝试相同的事情时我得到 info 照片但是对于 wall 它变成了灰色< / p>

因此,解决那些遭受或可能遭受痛苦的人会形成这个问题。

我收到一本字典以回复帖子

<强> {"id":"<imge_id>","post_id":"<post_id>"}

<强> http://www.facebook.com/photo.php?fbid=<imge_id>

它就像一个魅力。

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

我不得不降级到不再使用SSO了。现在它无论如何都有效。

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

答案 1 :(得分:0)

我认为它会帮助你

- (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"];
    }
}

答案 2 :(得分:0)

我把头靠在墙上一段时间了。 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"]];



        });
    });

希望这可以帮助一些人。