Iphone Facebook iOS Safari“;无法打开页面错误";使用单点登录对用户进行身份验证时

Iphone Facebook iOS Safari“;无法打开页面错误";使用单点登录对用户进行身份验证时,iphone,ios,facebook,oauth,Iphone,Ios,Facebook,Oauth,我在这个问题上转来转去——看起来Facebook有一些关于这个问题的公开票证,但我想看看是否有人和我有同样的问题,并找到了一个临时或更好的解决方案 我下载了Facebook的“DemoApp”,可以将我的appId放入它的info.plist中:fb1234567890(其中1234567890是我的appId)。它可以通过对Safari进行多任务处理、输入我的凭据、允许我的应用程序访问,然后在我登录后重定向回“DemoApp”来验证用户身份(我可以很好地请求我的信息) 现在,我正在尝试将Dem

我在这个问题上转来转去——看起来Facebook有一些关于这个问题的公开票证,但我想看看是否有人和我有同样的问题,并找到了一个临时或更好的解决方案

我下载了Facebook的“DemoApp”,可以将我的
appId
放入它的info.plist中:
fb1234567890
(其中1234567890是我的appId)。它可以通过对Safari进行多任务处理、输入我的凭据、允许我的应用程序访问,然后在我登录后重定向回“DemoApp”来验证用户身份(我可以很好地请求我的信息)

现在,我正在尝试将DemoApp的功能集成到我现有的应用程序中。

我可以访问登录屏幕,并输入我的凭据。它允许我让我的应用程序访问我的个人信息-我单击
allow
,Safari处理一个新请求,然后返回错误消息
Safari无法打开请求,因为URL上的地址无效:
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>

CbundleurlTypes
CFBundleURLName
循环流化床锅炉方案
fb1234567890
CfBundledDevelopmentRegion
英语
CbundleDisplayName
${PRODUCT_NAME}
Cbundlexecutable
${EXECUTABLE_NAME}
循环流化床锅炉
CbundleIdentifier
com.yourcompany.${PRODUCT_NAME:rfc1034identifier}
CbundleInfo字典版本
6
CFBundleName
${PRODUCT_NAME}
CbundlePackageType
应用
CFBundleSignature
????
循环流化床锅炉
1
LSREQUIRESPHONEOS
NSMainNibFile
主窗口

我有一个非常相似的经历。我发现我所做的plist更改根本没有被吸收到模拟器中,即使是在一个干净的构建之后。我可以通过将硬件->设备设置更改为其他设置,然后再重新设置。不知怎的,这似乎导致了plist更改注册使用模拟器上的操作系统,而我没有做过任何其他事情。我不确定这是“正确”的方法,或者构建设置中的某些内容出错,但对我来说,这确实解决了您描述的确切问题。

CbundLeurlTypes条目不正确。它应该是这样的:

<key>CFBundleURLTypes</key>
<array>
    <dict>
        <key>CFBundleURLSchemes</key>
        <array>
            <string>fb1234567890</string>
        </array>
    </dict>
</array>
<key>CFBundleURLTypes</key>
<array>
    <dict>
        <key>CFBundleURLSchemes</key>
        <array>
            <string>fb1234567890
[defaults setObject:[facebook expirationDate] forKey:@&quot;FBExpirationDat</string>
        </array>
    </dict>
</array>
CbundleUrlTypes
循环流化床锅炉方案
fb1234567890

Marks answer将我引向了正确的方向,但我的问题有点不同。出于某种原因,plist看起来像这样:

<key>CFBundleURLTypes</key>
<array>
    <dict>
        <key>CFBundleURLSchemes</key>
        <array>
            <string>fb1234567890</string>
        </array>
    </dict>
</array>
<key>CFBundleURLTypes</key>
<array>
    <dict>
        <key>CFBundleURLSchemes</key>
        <array>
            <string>fb1234567890
[defaults setObject:[facebook expirationDate] forKey:@&quot;FBExpirationDat</string>
        </array>
    </dict>
</array>
CbundleUrlTypes
循环流化床锅炉方案
fb1234567890
[默认设置对象:[facebook expirationDate]forKey:@“FBExpirationDat”
我刚刚删除了id后的数据,它已被修复:

<key>CFBundleURLTypes</key>
<array>
    <dict>
        <key>CFBundleURLSchemes</key>
        <array>
            <string>fb1234567890</string>
        </array>
    </dict>
</array>
CbundleUrlTypes
循环流化床锅炉方案
fb1234567890

听起来你的Info.plist设置不正确。你能发布它吗?嘿,又一次失范:)我已经添加了我的info.plist。您可能想隐藏您的facebook应用程序id。这一点很好。我只是将此应用程序用于开发,并计划稍后再接收一个新应用程序,但感谢您指出这一点。@SimonGoldeen:为什么?id是公开的,只有秘密才是秘密,正如其名称所示……对于所有关注facebook开发者教程的人来说site:请注意这一行:
CbundleurlSchemes
!在教程中很容易误解这一点,并且在这里写得很正确!感谢Mark,这是我在过去几个小时里希望得到的澄清,但对于那些在xcode中这样做的人:关键字名称显示为“URL类型”(注意小写字母t)其中键名显示为“URL Schemes”(注意大写字母S)。不知道为什么,但这似乎是使其工作的方法!@aking63:您看到的区别是,您使用的是plist编辑器,未显示原始键/值名称。右键单击“URLtypes”并选择“显示原始键/值”,您将看到Cbundle…名称。(如果愿意,您可以切换回)一些常见的问题可能会被忽略:请确保在
CbundleurlSchemes
中使用“fb”。此外,您在其中输入的数字是您的应用程序id,而不是您的应用程序机密。感谢您提供此解决方案!