swift 2 parse facebookSDK ios9

15,345

Solution 1

I suggest following the instructions from Facebook to prepare an app for iOS 9: https://developers.facebook.com/docs/ios/ios9

  1. Download the latest Facebook SDK for iOS

Download the appropriate version of the Facebook SDK for your app.

v4.x - Recommended. v3.24.0 - Only if you have not migrated to v4.x of the SDK yet. 2. Whitelist Facebook Servers for Network Requests

If you compile your app with iOS SDK 9.0, you will be affected by App Transport Security. Currently, you will need to whitelist Facebook domains in your app by adding the following to your application's plist:

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSExceptionDomains</key>
    <dict>
        <key>facebook.com</key>
        <dict>
            <key>NSIncludesSubdomains</key>
            <true/>                
            <key>NSExceptionRequiresForwardSecrecy</key>
            <false/>
        </dict>
        <key>fbcdn.net</key>
        <dict>
            <key>NSIncludesSubdomains</key>
            <true/>
            <key>NSExceptionRequiresForwardSecrecy</key>
            <false/>
        </dict>
        <key>akamaihd.net</key>
        <dict>
            <key>NSIncludesSubdomains</key>
            <true/>
            <key>NSExceptionRequiresForwardSecrecy</key>
            <false/>
        </dict>
    </dict>
</dict>

or you will encounter errors like:

NSUnderlyingError=0x7f88f9436eb0 {Error Domain=kCFErrorDomainCFNetwork
Code=-1200 "An SSL error has occurred and a secure connection to
the server cannot be made." UserInfo={NSErrorFailingURLStringKey=
https://graph.facebook.com/v2.4, NSLocalizedRecoverySuggestion=
Would you like to connect to the server anyway?,
_kCFNetworkCFStreamSSLErrorOriginalValue=-9802,
kCFStreamPropertySSLPeerCertificates=<CFArray 0x7f88f9536e00
[0x10719f7c0]>{type = immutable, count = 2, values = (
0 : <cert(0x7f88f963f840) s: *.facebook.com (http://facebook.com/)
i: DigiCert High Assurance CA-3>
1 : <cert(0x7f88f96444c0) s: DigiCert High Assurance CA-3 i:
DigiCert High Assurance EV Root CA> )}, 
_kCFStreamPropertySSLClientCertificateState=0,
kCFStreamPropertySSLPeerTrust=<SecTrustRef: 0x7f88f9644d10>,
NSLocalizedDescription=An SSL error has occurred and a secure connection
to the server cannot be made.,_kCFStreamErrorDomainKey=3,
NSErrorFailingURLKey=https://graph.facebook.com/v2.4,
_kCFStreamErrorCodeKey=-9802}}
  1. Whitelist Facebook Apps

If you use any of the Facebook dialogs (e.g., Login, Share, App Invites, etc.) that can perform an app switch to Facebook apps, you will need to update your application's plist to handle the changes to canOpenURL described in https://developer.apple.com/videos/wwdc/2015/?id=703

If you're recompiling with iOS SDK 9.0, add the following to your application's plist if you're using a version of the SDK v4.5 or older:

<key>LSApplicationQueriesSchemes</key>
<array>
    <string>fbapi</string>
    <string>fbapi20130214</string>
    <string>fbapi20130410</string>
    <string>fbapi20130702</string>
    <string>fbapi20131010</string>
    <string>fbapi20131219</string>    
    <string>fbapi20140410</string>
    <string>fbapi20140116</string>
    <string>fbapi20150313</string>
    <string>fbapi20150629</string>
    <string>fbauth</string>
    <string>fbauth2</string>
    <string>fb-messenger-api20140430</string>
</array>

If you're using FBSDKMessengerShareKit from versions older than the v4.6 release, also add

<string>fb-messenger-platform-20150128</string>
<string>fb-messenger-platform-20150218</string>
<string>fb-messenger-platform-20150305</string>

If you're using v4.6.0 of the SDK, you only need to add:

<key>LSApplicationQueriesSchemes</key>
<array>
        <string>fbapi</string>
        <string>fb-messenger-api</string>
        <string>fbauth2</string>
        <string>fbshareextension</string>
</array>

This will allow the FacebookSDK integration to properly identify installed Facebook apps to perform an app switch. If you are not recompiling with iOS SDK 9.0, your app is limited to 50 distinct schemes (calls to canOpenURL afterwards return NO).

Solution 2

From the WWDC 2015 "Privacy and Your App" video, add the following to your info.plist file:

    <key>LSApplicationQueriesSchemes</key>
    <array>
        <string>fbauth</string>
    </array>

Solution 3

Follow this link to see Facebook's reccommended updates for iOS 9 https://developers.facebook.com/docs/ios/ios9

In order to fix this specific error

-canOpenURL: failed for URL: "fbauth://authorize/?client_id=... error: "This app is not allowed to query for scheme fbauth"

For Facebook SDK version 4.6+ go to your info.plist file and add the following:

<key>LSApplicationQueriesSchemes</key>
    <array>
        <string>fbapi</string>
        <string>fb-messenger-api</string>
        <string>fbauth2</string>
        <string>fbshareextension</string>
    </array>

For version 4.5 or older:

<key>LSApplicationQueriesSchemes</key>
<array>
    <string>fbapi</string>
    <string>fbapi20130214</string>
    <string>fbapi20130410</string>
    <string>fbapi20130702</string>
    <string>fbapi20131010</string>
    <string>fbapi20131219</string>    
    <string>fbapi20140410</string>
    <string>fbapi20140116</string>
    <string>fbapi20150313</string>
    <string>fbapi20150629</string>
    <string>fbauth</string>
    <string>fbauth2</string>
    <string>fb-messenger-api20140430</string>
</array>
Share:
15,345
kalafun
Author by

kalafun

Updated on July 15, 2022

Comments

  • kalafun
    kalafun almost 2 years

    I am trying to Log In a user via Facebook. In the previous version of swift 1.2 everything worked perfectly, but after migration I can't seem to log in via my FB account I am still getting the error saying:

    -canOpenURL: failed for URL: "fbauth://authorize/?client_id=... error: "This app is not allowed to query for scheme fbauth"

    Can you please help me with that?

  • Mark A. Durham
    Mark A. Durham almost 9 years
    Try the following as it works for me. Create a new Swift 2.0 app for iOS 9 in Xcode 7. In the AppDelegate.swift file, add let sharedApplication = UIApplication.sharedApplication(); let isFacebookAuthorized = sharedApplication.canOpenURL(NSURL(fileURLWithPath: "fbauth://authorize")); into didFinishLaunchingWithOptions. Build and run. You should get the "not allowed to query for scheme" error. Next, open Info.plist as source code and insert the code from my original reply into the file just in front of </dict>. Rebuild and run. You should no longer get the error.
  • kalafun
    kalafun almost 9 years
    I have came back to Xcode 6 in the meantime, will wait for Parse and FBSDK to actually release a new version that will work on iOS9 and also has built libraries with bitcode
  • Awsed
    Awsed almost 9 years
  • nebiros
    nebiros almost 9 years
    Got the same issue, after add this to the Info.plist I got this: -canOpenURL: failed for URL: "fbauth://authorize/?client_id=…" - error: "(null)", seems like the FBSDK has something wrong.
  • Awsed
    Awsed almost 9 years
    @nebiros To my knowledge error: "(null)" this error is only shown if the requested app is in the whitelist but not installed on the system.
  • Eduardo
    Eduardo almost 9 years
    @VanDuTran could you please share how you fixed it?
  • Van Du Tran
    Van Du Tran almost 9 years
    @Eduardo I did exactly like this answer pointed out. I added the LSApplicationQueriesSchemes key with fbauth.
  • Mike
    Mike over 8 years
    I was curious about the akamaihd.net portion of this response, as it didn't seem connected with facebook, and googled it and found a whole bunch of info related to malware and related issues. It appears that its a CDN that facebook uses, but are we sure this is required?
  • Dimple Shah
    Dimple Shah over 8 years
    @nebiros I am facing the same issue. The only difference I found is that in - error: "This app is not allowed to query for scheme fbauth", after adding above lines in my plist file I am getting error: - "(null)" but previous is same.. -canOpenURL: failed for URL: "fbauth://authorize/?client_id=........
  • Sruit A.Suk
    Sruit A.Suk over 8 years
    this answer is really amazing, it's cover almost all of it.
  • JSNoob
    JSNoob over 8 years
    If you have added the LSApplicationQueriesSchemes to your info.plist, you can ignore those error messages(such as 'This app is not allowed to query for scheme.....'). It is just a bug of Xcode 7, which doesn't affect you integration with Facebook
  • Thinker
    Thinker over 8 years
    I'm running <4.5, and had to add <string>fb-messenger-platform-20150128</string>. In other words, to add the exact scheme from my error message, which was "This app is not allowed to query for scheme fb-messenger-platform-20150218"