Facebook iOS Safari在单点登录验证用户身份时无法打开页面错误

问题描述:

我在这个问题上圈了一圈 - 它看起来像Facebook有一些关于它的公开门票,但我想看看是否有人我遇到了同样的问题,并找到了一个临时或更好的解决方案。Facebook iOS Safari在单点登录验证用户身份时无法打开页面错误

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

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

我可以访问登录屏幕并输入我的凭证。这使我可以给我的个人信息,我的应用程序访问 - 我点击allow和Safari处理新的请求,然后返回错误信息:在URL Safari cannot open the request because the address is invalidhttp://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> 
+1

这听起来像你没有你的Info.plist设置正确。你可以发布吗? – Anomie 2011-02-27 03:15:49

+1

嘿再次失态:)我已经添加了我的info.plist。 – user546459 2011-02-27 03:28:14

+0

你可能想要掩盖你的Facebook应用程序ID ... – 2011-02-27 03:52:56

我有一个非常类似的经验,我发现,我正在plist中的变化根本就没有被吸收到模拟器,甚至后一个干净的版本。我可以让他们采取通过改变硬件 - >设备设置到不同的东西,然后再返回。不知怎的,这似乎已经引起的plist变化与仿真器上的OS进行登记,而没有别的我也有这样的效果。不知道这是“正确”的方式做到这一点,或者某些东西在构建设置被搞砸了,但是这对我来说,做你身边所描述的具体问题的工作。

CFBundleURLTypes条目不正确。它应该看起来像这样:

<key>CFBundleURLTypes</key> 
<array> 
    <dict> 
     <key>CFBundleURLSchemes</key> 
     <array> 
      <string>fb1234567890</string> 
     </array> 
    </dict> 
</array> 
+1

对于大家对Facebook的开发者网站上的教程如下:注意_this_行:' CFBundleURLSchemes'!在教程中很容易误解这一点,并在这里写入__correctly__!谢谢马克 – DAS 2012-03-25 08:11:53

+0

只是一个澄清,我会赞赏在过去几个小时,但对于这样做在xcode中:这个键名出现“URL类型”(注意小写字母t),并在其中键名称出现“URL Schemes”(注意大写字母S“。不知道为什么,但这似乎是使它工作的方法! – bkbeachlabs 2012-05-13 21:33:09

+0

@ aking63:你看到的区别在于你使用的是plist编辑器,而不是原始键/值名右键单击“URLtypes”并选择SHOW RAW KEYS/VALUES,您将看到CFBundle ...名称(如果喜欢,可以切换回)。 – Olie 2012-08-28 19:01:04

马克斯的回答引导我朝着正确的方向,但我的问题有点不同。出于某种原因,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>