Xcode 8を使用して、Swift 3を使用してFacebookログインでアプリを構築しようとしています。iOSSimulator 9.3に戻すと、機能します。 iOS 10では、次のエラーが表示されます。
""fbauth2:/" The operation couldn’t be completed. (OSStatus error -10814.)"
そして
Optional(Error Domain=com.facebook.sdk.login Code=308 "(null)")
誰にもこれに対する解決策がありますか?
デバッグ後、この問題はFBSDKがexpect_challange
を更新できないことです。 security.framework
内の関数SecItemUpdate
は機能しません。これはIOS 10の問題です
エラーOSStatus -10814は、canOpenURL:
アプリケーションが見つからない のときに発生し、このURLを開くことができます(実際、Facebookは引数「fbauth2:/」でcanOpenURL:
を呼び出してアプリケーションを見つけます。印刷は関数の内部で行われるため、それでは何もできません。ただし、Facebookアプリがインストールされたデバイスでアプリケーションを実行する場合、このエラーは表示されません。
エラー308は、キーチェーンに保存されている値がfacebook補完パラメーターに保存されている値と等しくない場合(詳細については、 -[FBSDKLoginManager completeAuthentication:expectChallenge:]
を確認できます)。
AppleがiOS 10でキーチェーンの操作方法を変更したために発生します。この問題を解決するには、単にTargets-> Capabilitiesに移動してキーチェーン共有を有効にします(アプリのキーチェーンへのアクセスを有効にします):-
Xamarinを使用している場合(詳細については、この link を読んでください、ありがとう@dynamokaj):
エンタイトルメントでキーチェーンアクセスを有効にし、シミュレータ(デバッグ)ビルドのエンタイトルメントも選択するようにしてください。デフォルトでは、これは設定されていません。
私のアプリにも同じ問題があり、多くの解決策をチェックしましたが、うまくいきませんでした。以下の方法でこの問題を修正しました。
これに移動します リンク アプリを選択し、info.plist
を設定します
import
そして、このコードをAppDelegate
に追加します
import FBSDKCoreKit
import FBSDKLoginKit
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
return FBSDKApplicationDelegate.sharedInstance().application(application, didFinishLaunchingWithOptions: launchOptions)
}
func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
return FBSDKApplicationDelegate.sharedInstance().application(app, open: url, options: options)
}
次のエラーが表示される主な理由は、
canOpenURL: failed for URL: "fbauth2:/" - error: "The operation couldn’t be completed. (OSStatus error -10814.)
iOSシミュレーターにFacebookアプリケーションがインストールされていないということです。 iOSシミュレーターにアプリケーションをインストールするまで、引き続きエラーが発生します。 Facebookがインストールされているプロビジョニング済みのiOSデバイスでiOSアプリケーションを実行してみてください。エラーメッセージは表示されなくなります。お役に立てれば!
私の場合、修正は*でした:
func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
// First, handle Facebook URL open request
if let fbSDKAppId = FBSDKSettings.appID(), url.scheme!.hasPrefix("fb\(fbSDKAppId)"), url.Host == "authorize" {
let shouldOpen: Bool = FBSDKApplicationDelegate.sharedInstance().application(app, open: url, sourceApplication: options[UIApplicationOpenURLOptionsKey.sourceApplication] as! String!, annotation: options[UIApplicationOpenURLOptionsKey.annotation])
return shouldOpen
}
// After it, handle any other response (e.g. deep links)
handlerOtherUrls(url: url)
return true
}
* Facebook SDKのGithubページ で@MoridinBGが推奨するとおり
このエラーは、FBSDKCoreKitまたはFBSDKLoginKitバージョン4.39.0を使用している場合にも発生する可能性があります。このバージョンのSDKにはバグがありました。 4.39.1以降にアップグレードして修正してください。詳細 ここ 。
補足として、他のユーザーは、シミュレーターにFacebookをインストールしていない場合にこのエラーが表示されると述べました。これは事実ですが、アプリがインストールされていない場合、SDKは自動的にWebログインメソッドにフォールバックすることになっています。表示されない場合は、Info.plistの値の欠落/構成ミス(LSApplicationQueriesSchemesを確認)やAppDelegateのメソッドの欠落など、別の問題が原因である可能性があります。