使用单点登录对用户进行身份验证时,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:@&quot;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 行:&lt;key&gt;CFBundleURLSchemes&lt;/key&gt;!在教程中很容易误解这一点,并在此处正确编写!谢谢马克 只是在过去几个小时内我会很感激的澄清,但对于那些在 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登录时身份验证失败

用于 Facebook 集成的 SSO

云原生 | kubernetes - Argo CD Gitlab身份验证及SSO单点登录

使用 Passport 通过 Facebook 进行身份验证不起作用

Spotify Windows 桌面应用程序如何对用户进行身份验证?