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


104

Xcode 8を使用して、Swift 3を使用したFacebookログインでアプリを構築しようとしています。iOSシミュレーター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 cant update expect_challangeです。SecItemUpdate内部の機能が動作しsecurity.frameworkません。これはIOS 10の問題です


5
「...なぜこれが機能することを期待しますか?」ソフトウェアが動作するはずだからです。それはこの男のせいではなく、Facebookのせいではありません。それはAppleのせいです。これは「ベータ版」であるためパスを取得しますが、ベータ版であってもキーチェーンを壊すことはほとんど受け入れられません。
ジェフホリデイ

回答:


201

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

エラー308は、キーチェーンに格納されている値が、facebookの補完パラメータに格納されている値と等しくない場合に発生します(詳細については、を参照してください-[FBSDKLoginManager completeAuthentication:expectChallenge:])。

これは、AppleがiOS 10でキーチェーンの操作方法を変更したために発生します。この問題を修正するには、[ターゲット]> [機能]に移動し、キーチェーン共有を有効にします(アプリのキーチェーンへのアクセスを有効にします)。 画像

Xamarinを使用している場合(詳細については、このリンクをお読みください。@ dynamokajに感謝します):

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


2
どうもありがとうございます。この変更に関するドキュメントはありますか?
trquoccuong 2016

1
xcodeを終了して実行し、sudo xcode-select -switch /Applications/Xcode.app/Contents/Developer再構築を試みた後も、同じ問題が発生します。私は見ていますエラーがこれにもっと似ていることを今実現していますstackoverflow.com/questions/39091841/...
ロイKolak

1
@NikitaP @RoyKolakが上記の問題を経験しているようです。
ローマエルモロフ2016

1
@NikitaPはそれを理解しました。これは、アプリデリゲートに自動統合しようとしたサードパーティライブラリ(CleverTap)でした。私はstackoverflow.com/questions/39091841/で返信しました…ご清聴ありがとうございました!
Roy Kolak

3
@RomanErmolov私はそれを理解しました、私はXamarinにいて、デバッグのためにビルドするとき、Entitlement.plistファイルはデフォルトでは使用されません。デバッグ用のエンタイトルメントを含めると、機能しました。以下は私に適切な解決策への最後のプッシュを与えました。stackoverflow.com/a/39576798/1062572- 答えを更新して、Xamarinの担当者が行方不明であることが簡単にわかるようにすることができます。
dynamokaj

5

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

このリンクに移動してアプリを選択し、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)
}

4

次のエラーが発生する主な理由は、

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

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


fbアプリがインストールされていない場合は、Web UIを開く必要があります。
Softlion

3

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

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で推奨


0

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

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


-3

私の場合、問題はGoogle Analyticsでした。デフォルトでは、アプリのビューコントローラーの上に独自のビューコントローラーを追加しているようです。{Your app} -Info.plistで「FirebaseAppDelegateProxyEnabled」を「NO」に設定すると、問題が解決しました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.