Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Facebook iOS Safari "Cannot Open Page Error" When Authenticating User with Single-Sign-On

I'm spinning in circles with this issue - and it looks like Facebook has some open tickets regarding it, but I wanted to see if anyone had the same issue I'm having and found a temporary or better solution.

I downloaded Facebook's "DemoApp", and can put in my appId into its info.plist as so: fb1234567890 (where 1234567890 is my appId). It can authenticate the user by multitasking to Safari, entering my credentials, allowing my application access, and then redirecting back to "DemoApp" with me logged in (and I can request my information fine).

NOW, I'm trying to integrate DemoApp's functionality into my existing application.

I am able to access the login screen, and enter my credentials. It allows me to give my application access to my personal information - I click allow and Safari processes a new request, and then returns the error message: Safari cannot open the request because the address is invalid at the URL: http://www.facebook.com/connect/uiserver.php

HOWEVER, If I have DemoApp installed on my simulator and my own application, it will switch BACK to DemoApp with my successfully logged in. If I uninstall DemoApp and try again with my application, I get the Safari error.

WHAT CAN I DO TO SOLVE THIS?? Any help would be great; I'm banging my head here.:(

My 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>
like image 852
user546459 Avatar asked Feb 27 '11 03:02

user546459


2 Answers

The CFBundleURLTypes entry is incorrect. It should look like this:

<key>CFBundleURLTypes</key>
<array>
    <dict>
        <key>CFBundleURLSchemes</key>
        <array>
            <string>fb1234567890</string>
        </array>
    </dict>
</array>
like image 93
Mark Probst Avatar answered Nov 11 '22 13:11

Mark Probst


I had a very similar experience. I found that the plist changes I was making were simply not being absorbed into the simulator, even after a clean build. I was able to make them take by changing the Hardware->Device setting to something different, and then back again. Somehow, this appears to have caused the plist changes to register with the OS on the simulator, whereas nothing else I did had that effect. Not sure this is the "right" way to do it, or if something in the build settings is messed up, but this, for me, did work around the exact problem you are describing.

like image 6
Paul Lettieri Avatar answered Nov 11 '22 15:11

Paul Lettieri