使用单点登录对用户进行身份验证时,Facebook iOS Safari“无法打开页面错误”
Posted
技术标签:
【中文标题】使用单点登录对用户进行身份验证时,Facebook iOS Safari“无法打开页面错误”【英文标题】:Facebook iOS Safari "Cannot Open Page Error" When Authenticating User with Single-Sign-On 【发布时间】:2011-07-05 02:36:56 【问题描述】:我在这个问题上绕圈子 - 看起来 Facebook 对此有一些未解决的问题,但我想看看是否有人遇到了与我相同的问题,并找到了一个临时或更好的解决方案。
我下载了 Facebook 的“DemoApp”,可以将我的appId
放入它的 info.plist 中,如下所示:fb1234567890
(其中 1234567890 是我的 appId)。它可以通过对 Safari 进行多任务处理、输入我的凭据、允许我的应用程序访问,然后在我登录的情况下重定向回“DemoApp”来验证用户身份(我可以很好地请求我的信息)。
现在,我正在尝试将 DemoApp 的功能集成到我现有的应用程序中。
我可以访问登录屏幕并输入我的凭据。它允许我让我的应用程序访问我的个人信息 - 我单击 allow
,Safari 会处理一个新请求,然后返回 错误消息:Safari cannot open the request because the address is invalid
,网址为:http://www.facebook.com/connect/uiserver.php
但是,如果我在我的模拟器和我自己的应用程序上安装了 DemoApp
,它会在我成功登录后切换回 DemoApp。如果我卸载 DemoApp
并再次尝试使用我的应用程序,我会收到 Safari 错误.
我能做些什么来解决这个问题??我在这里敲我的头。:(
我的info.plist
:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleURLName</key>
<string></string>
<key>CFBundleURLSchemes</key>
<array>
<string>fb1234567890</string>
</array>
</dict>
</array>
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleDisplayName</key>
<string>$PRODUCT_NAME</string>
<key>CFBundleExecutable</key>
<string>$EXECUTABLE_NAME</string>
<key>CFBundleIconFile</key>
<string></string>
<key>CFBundleIdentifier</key>
<string>com.yourcompany.$PRODUCT_NAME:rfc1034identifier</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>$PRODUCT_NAME</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>1.0</string>
<key>LSRequiresIPhoneOS</key>
<true/>
<key>NSMainNibFile</key>
<string>MainWindow</string>
</dict>
</plist>
【问题讨论】:
听起来您的 Info.plist 设置不正确。可以发一下吗? 嘿,Anomie:)我已经添加了我的 info.plist。 您可能想隐藏您的 Facebook 应用 ID... 好点。我只是将这个用于开发,并计划稍后收到一个新的,但感谢您指出这一点。 @SimonGoldeen:为什么? ID是公开的,只有秘密是秘密的,顾名思义...... 【参考方案1】:Marks 的回答引导我朝着正确的方向前进,但我的问题有点不同。由于某种原因,plist 看起来像这样:
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleURLSchemes</key>
<array>
<string>fb1234567890
[defaults setObject:[facebook expirationDate] forKey:@"FBExpirationDat</string>
</array>
</dict>
</array>
我刚刚删除了id后面的数据,已经修复了:
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleURLSchemes</key>
<array>
<string>fb1234567890</string>
</array>
</dict>
</array>
【讨论】:
【参考方案2】:CFBundleURLTypes 条目不正确。它应该是这样的:
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleURLSchemes</key>
<array>
<string>fb1234567890</string>
</array>
</dict>
</array>
【讨论】:
对于在 Facebook 开发者网站上关注教程的每个人:注意 this 行:<key>CFBundleURLSchemes</key>
!在教程中很容易误解这一点,并在此处正确编写!谢谢马克
只是在过去几个小时内我会很感激的澄清,但对于那些在 xcode 中执行此操作的人:键名显示为“URL 类型”(注意小写 t),其中键名出现“URL Schemes”(注意大写的 S”。不知道为什么,但这似乎是让它工作的方法!
@aking63:您看到的不同之处在于您使用的 plist-editor 未显示原始键/值名称。右键单击“URLtypes”并选择 SHOW RAW KEYS/VALUES,您将看到 CFBundle... 名称。 (如果你愿意,你可以切换回来。)
一些常见的可以忽略的事情:确保在CFBundleURLSchemes
内带有“fb”。此外,您输入的数字是您的应用 ID,而不是您的应用密码。
感谢您的解决方案!【参考方案3】:
我有过非常相似的经历。我发现我所做的 plist 更改根本没有被吸收到模拟器中,即使在干净构建之后也是如此。我可以通过将硬件->设备设置更改为不同的设置,然后再返回。不知何故,这似乎导致 plist 更改在模拟器上注册到操作系统,而我所做的其他任何事情都没有产生这种效果。不确定这是不是“正确”的方法,或者构建设置中的某些内容是否混乱,但对我来说,这确实解决了您描述的确切问题。
【讨论】:
以上是关于使用单点登录对用户进行身份验证时,Facebook iOS Safari“无法打开页面错误”的主要内容,如果未能解决你的问题,请参考以下文章
使用 facebook 登录并使用 oauth 2.0 对 REST api 调用进行身份验证
在android中通过firebase进行Facebook登录时身份验证失败
云原生 | kubernetes - Argo CD Gitlab身份验证及SSO单点登录