问题
在我的 iOS 应用中,用户通过 UIWebView 使用 Facebook 登录。有时,Facebook 会显示“未登录”消息,而不是登录页面:
我每次都可以用几行代码重现这个问题:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
UIWebView* web = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, 320, 400)];
[self.window addSubview:web];
NSString* url = @"https://m.facebook.com/dialog/oauth?client_id=9999999999999999&redirect_uri=https%3A%2F%2Fmysite.com%2FApp%2FFacebookLogin%2FCallback&response_type=code&scope=read_stream%2Cuser_about_me%2Coffline_access%2Cpublish_actions%2Cpublish_stream%2Cemail";
[web loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:url]]];
}
我试过的
如果我在移动 safari 中打开相同的 URL,[[UIApplication sharedApplication] openUrl:...]
那么它就可以工作。它显示了一个没有问题的登录页面。
如果我将范围更改为“电子邮件”,那么它可以在 Web 视图中正常工作。如果我通过添加一个项目来更改它,那么它仍然会中断。
我已尝试清除 UIWebView 的 cookie和缓存,并且已删除该应用程序并重新安装它以尝试清除所有内容。这些都不起作用。
&state=abcd
如果我通过添加强制浏览器重新加载请求来更改 url ,它仍然会中断。这没有效果。
如果我使用域www.facebook.com
而不是m.facebook.com
那么它可以工作。
如果我登录shouldstartloadwithrequest
UIWebView,它会显示 url 加载然后再次加载。换句话说,facebook 似乎正在重定向到它自己。
此外,我已经向 Facebook ( https://developers.facebook.com/bugs/452609994811240 ) 提交了一个错误,他们已将其移至“中等”,因此这可能只是他们系统上的错误。
知道如何在不弄乱范围的情况下显示登录页面吗?