web-dev-qa-db-ja.com

iOS 10でFacebook iOS SDKを使用する方法

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)")

誰にもこれに対する解決策がありますか?

注1:

デバッグ後、この問題はFBSDKがexpect_challangeを更新できないことです。 security.framework内の関数SecItemUpdateは機能しません。これはIOS 10の問題です

103
trquoccuong

エラーOSStatus -10814は、canOpenURL:アプリケーションが見つからない のときに発生し、このURLを開くことができます(実際、Facebookは引数「fbauth2:/」でcanOpenURL:を呼び出してアプリケーションを見つけます。印刷は関数の内部で行われるため、それでは何もできません。ただし、Facebookアプリがインストールされたデバイスでアプリケーションを実行する場合、このエラーは表示されません。

エラー308は、キーチェーンに保存されている値がfacebook補完パラメーターに保存されている値と等しくない場合(詳細については、 -[FBSDKLoginManager completeAuthentication:expectChallenge:]を確認できます)。

AppleがiOS 10でキーチェーンの操作方法を変更したために発生します。この問題を解決するには、単にTargets-> Capabilitiesに移動してキーチェーン共有を有効にします(アプリのキーチェーンへのアクセスを有効にします):- image

Xamarinを使用している場合(詳細については、この link を読んでください、ありがとう@dynamokaj):

エンタイトルメントでキーチェーンアクセスを有効にし、シミュレータ(デバッグ)ビルドのエンタイトルメントも選択するようにしてください。デフォルトでは、これは設定されていません。

198
Roman Ermolov

私のアプリにも同じ問題があり、多くの解決策をチェックしましたが、うまくいきませんでした。以下の方法でこの問題を修正しました。

これに移動します リンク アプリを選択し、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)
}
5
ZAFAR007

次のエラーが表示される主な理由は、

canOpenURL: failed for URL: "fbauth2:/" - error: "The operation couldn’t be completed. (OSStatus error -10814.)

iOSシミュレーターにFacebookアプリケーションがインストールされていないということです。 iOSシミュレーターにアプリケーションをインストールするまで、引き続きエラーが発生します。 Facebookがインストールされているプロビジョニング済みのiOSデバイスでiOSアプリケーションを実行してみてください。エラーメッセージは表示されなくなります。お役に立てれば!

4
umarqattan

私の場合、修正は*でした:

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が推奨するとおり

3
Ruben Marin

このエラーは、FBSDKCoreKitまたはFBSDKLoginKitバージョン4.39.0を使用している場合にも発生する可能性があります。このバージョンのSDKにはバグがありました。 4.39.1以降にアップグレードして修正してください。詳細 ここ

補足として、他のユーザーは、シミュレーターにFacebookをインストールしていない場合にこのエラーが表示されると述べました。これは事実ですが、アプリがインストールされていない場合、SDKは自動的にWebログインメソッドにフォールバックすることになっています。表示されない場合は、Info.plistの値の欠落/構成ミス(LSApplicationQueriesSchemesを確認)やAppDelegateのメソッドの欠落など、別の問題が原因である可能性があります。

0
Code Commander